/cp
[official-gcc.git] / gcc / cp / decl.c
blob148afa6c9ace158ae5ded668460c9c9520c8c26b
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 value = mark_rvalue_use (value);
3546 if (cxx_dialect >= cxx11
3547 && (SCOPED_ENUM_P (type)
3548 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3550 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3551 type = type_promotes_to (type);
3552 value = (perform_implicit_conversion_flags
3553 (type, value, tf_warning_or_error,
3554 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3556 return cxx_constant_value (value);
3559 /* Note that we've seen a definition of a case label, and complain if this
3560 is a bad place for one. */
3562 tree
3563 finish_case_label (location_t loc, tree low_value, tree high_value)
3565 tree cond, r;
3566 cp_binding_level *p;
3567 tree type;
3569 if (low_value == NULL_TREE && high_value == NULL_TREE)
3570 switch_stack->has_default_p = true;
3572 if (processing_template_decl)
3574 tree label;
3576 /* For templates, just add the case label; we'll do semantic
3577 analysis at instantiation-time. */
3578 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3579 return add_stmt (build_case_label (low_value, high_value, label));
3582 /* Find the condition on which this switch statement depends. */
3583 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3584 if (cond && TREE_CODE (cond) == TREE_LIST)
3585 cond = TREE_VALUE (cond);
3587 if (!check_switch_goto (switch_stack->level))
3588 return error_mark_node;
3590 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3592 low_value = case_conversion (type, low_value);
3593 high_value = case_conversion (type, high_value);
3595 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3596 low_value, high_value,
3597 &switch_stack->outside_range_p);
3599 /* After labels, make any new cleanups in the function go into their
3600 own new (temporary) binding contour. */
3601 for (p = current_binding_level;
3602 p->kind != sk_function_parms;
3603 p = p->level_chain)
3604 p->more_cleanups_ok = 0;
3606 return r;
3609 struct typename_info {
3610 tree scope;
3611 tree name;
3612 tree template_id;
3613 bool enum_p;
3614 bool class_p;
3617 struct typename_hasher : ggc_ptr_hash<tree_node>
3619 typedef typename_info *compare_type;
3621 /* Hash a TYPENAME_TYPE. */
3623 static hashval_t
3624 hash (tree t)
3626 hashval_t hash;
3628 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3629 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3631 return hash;
3634 /* Compare two TYPENAME_TYPEs. */
3636 static bool
3637 equal (tree t1, const typename_info *t2)
3639 return (TYPE_IDENTIFIER (t1) == t2->name
3640 && TYPE_CONTEXT (t1) == t2->scope
3641 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3642 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3643 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3647 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3648 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3650 Returns the new TYPENAME_TYPE. */
3652 static GTY (()) hash_table<typename_hasher> *typename_htab;
3654 tree
3655 build_typename_type (tree context, tree name, tree fullname,
3656 enum tag_types tag_type)
3658 tree t;
3659 tree d;
3660 typename_info ti;
3661 tree *e;
3662 hashval_t hash;
3664 if (typename_htab == NULL)
3665 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3667 ti.scope = FROB_CONTEXT (context);
3668 ti.name = name;
3669 ti.template_id = fullname;
3670 ti.enum_p = tag_type == enum_type;
3671 ti.class_p = (tag_type == class_type
3672 || tag_type == record_type
3673 || tag_type == union_type);
3674 hash = (htab_hash_pointer (ti.scope)
3675 ^ htab_hash_pointer (ti.name));
3677 /* See if we already have this type. */
3678 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3679 if (*e)
3680 t = *e;
3681 else
3683 /* Build the TYPENAME_TYPE. */
3684 t = cxx_make_type (TYPENAME_TYPE);
3685 TYPE_CONTEXT (t) = ti.scope;
3686 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3687 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3688 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3690 /* Build the corresponding TYPE_DECL. */
3691 d = build_decl (input_location, TYPE_DECL, name, t);
3692 TYPE_NAME (TREE_TYPE (d)) = d;
3693 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3694 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3695 DECL_ARTIFICIAL (d) = 1;
3697 /* Store it in the hash table. */
3698 *e = t;
3700 /* TYPENAME_TYPEs must always be compared structurally, because
3701 they may or may not resolve down to another type depending on
3702 the currently open classes. */
3703 SET_TYPE_STRUCTURAL_EQUALITY (t);
3706 return t;
3709 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3710 provided to name the type. Returns an appropriate type, unless an
3711 error occurs, in which case error_mark_node is returned. If we
3712 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3713 return that, rather than the _TYPE it corresponds to, in other
3714 cases we look through the type decl. If TF_ERROR is set, complain
3715 about errors, otherwise be quiet. */
3717 tree
3718 make_typename_type (tree context, tree name, enum tag_types tag_type,
3719 tsubst_flags_t complain)
3721 tree fullname;
3722 tree t;
3723 bool want_template;
3725 if (name == error_mark_node
3726 || context == NULL_TREE
3727 || context == error_mark_node)
3728 return error_mark_node;
3730 if (TYPE_P (name))
3732 if (!(TYPE_LANG_SPECIFIC (name)
3733 && (CLASSTYPE_IS_TEMPLATE (name)
3734 || CLASSTYPE_USE_TEMPLATE (name))))
3735 name = TYPE_IDENTIFIER (name);
3736 else
3737 /* Create a TEMPLATE_ID_EXPR for the type. */
3738 name = build_nt (TEMPLATE_ID_EXPR,
3739 CLASSTYPE_TI_TEMPLATE (name),
3740 CLASSTYPE_TI_ARGS (name));
3742 else if (TREE_CODE (name) == TYPE_DECL)
3743 name = DECL_NAME (name);
3745 fullname = name;
3747 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3749 name = TREE_OPERAND (name, 0);
3750 if (DECL_TYPE_TEMPLATE_P (name))
3751 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3752 if (TREE_CODE (name) != IDENTIFIER_NODE)
3754 if (complain & tf_error)
3755 error ("%qD is not a type", name);
3756 return error_mark_node;
3759 if (TREE_CODE (name) == TEMPLATE_DECL)
3761 if (complain & tf_error)
3762 error ("%qD used without template parameters", name);
3763 return error_mark_node;
3765 gcc_assert (identifier_p (name));
3766 gcc_assert (TYPE_P (context));
3768 if (!MAYBE_CLASS_TYPE_P (context))
3770 if (complain & tf_error)
3771 error ("%q#T is not a class", context);
3772 return error_mark_node;
3775 /* When the CONTEXT is a dependent type, NAME could refer to a
3776 dependent base class of CONTEXT. But look inside it anyway
3777 if CONTEXT is a currently open scope, in case it refers to a
3778 member of the current instantiation or a non-dependent base;
3779 lookup will stop when we hit a dependent base. */
3780 if (!dependent_scope_p (context))
3781 /* We should only set WANT_TYPE when we're a nested typename type.
3782 Then we can give better diagnostics if we find a non-type. */
3783 t = lookup_field (context, name, 2, /*want_type=*/true);
3784 else
3785 t = NULL_TREE;
3787 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3788 return build_typename_type (context, name, fullname, tag_type);
3790 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3792 if (!t)
3794 if (complain & tf_error)
3796 if (!COMPLETE_TYPE_P (context))
3797 cxx_incomplete_type_error (NULL_TREE, context);
3798 else
3799 error (want_template ? G_("no class template named %q#T in %q#T")
3800 : G_("no type named %q#T in %q#T"), name, context);
3802 return error_mark_node;
3805 /* Pull out the template from an injected-class-name (or multiple). */
3806 if (want_template)
3807 t = maybe_get_template_decl_from_type_decl (t);
3809 if (TREE_CODE (t) == TREE_LIST)
3811 if (complain & tf_error)
3813 error ("lookup of %qT in %qT is ambiguous", name, context);
3814 print_candidates (t);
3816 return error_mark_node;
3819 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3821 if (complain & tf_error)
3822 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3823 context, name, t);
3824 return error_mark_node;
3826 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3828 if (complain & tf_error)
3829 error ("%<typename %T::%D%> names %q#T, which is not a type",
3830 context, name, t);
3831 return error_mark_node;
3834 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3835 return error_mark_node;
3837 /* If we are currently parsing a template and if T is a typedef accessed
3838 through CONTEXT then we need to remember and check access of T at
3839 template instantiation time. */
3840 add_typedef_to_current_template_for_access_check (t, context, input_location);
3842 if (want_template)
3843 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3844 NULL_TREE, context,
3845 /*entering_scope=*/0,
3846 complain | tf_user);
3848 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3849 t = TREE_TYPE (t);
3851 maybe_record_typedef_use (t);
3853 return t;
3856 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3857 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3858 in which case error_mark_node is returned.
3860 If PARM_LIST is non-NULL, also make sure that the template parameter
3861 list of TEMPLATE_DECL matches.
3863 If COMPLAIN zero, don't complain about any errors that occur. */
3865 tree
3866 make_unbound_class_template (tree context, tree name, tree parm_list,
3867 tsubst_flags_t complain)
3869 tree t;
3870 tree d;
3872 if (TYPE_P (name))
3873 name = TYPE_IDENTIFIER (name);
3874 else if (DECL_P (name))
3875 name = DECL_NAME (name);
3876 gcc_assert (identifier_p (name));
3878 if (!dependent_type_p (context)
3879 || currently_open_class (context))
3881 tree tmpl = NULL_TREE;
3883 if (MAYBE_CLASS_TYPE_P (context))
3884 tmpl = lookup_field (context, name, 0, false);
3886 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3887 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3889 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3891 if (complain & tf_error)
3892 error ("no class template named %q#T in %q#T", name, context);
3893 return error_mark_node;
3896 if (parm_list
3897 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3899 if (complain & tf_error)
3901 error ("template parameters do not match template %qD", tmpl);
3902 inform (DECL_SOURCE_LOCATION (tmpl),
3903 "%qD declared here", tmpl);
3905 return error_mark_node;
3908 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3909 complain))
3910 return error_mark_node;
3912 return tmpl;
3915 /* Build the UNBOUND_CLASS_TEMPLATE. */
3916 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3917 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3918 TREE_TYPE (t) = NULL_TREE;
3919 SET_TYPE_STRUCTURAL_EQUALITY (t);
3921 /* Build the corresponding TEMPLATE_DECL. */
3922 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3923 TYPE_NAME (TREE_TYPE (d)) = d;
3924 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3925 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3926 DECL_ARTIFICIAL (d) = 1;
3927 DECL_TEMPLATE_PARMS (d) = parm_list;
3929 return t;
3934 /* Push the declarations of builtin types into the global namespace.
3935 RID_INDEX is the index of the builtin type in the array
3936 RID_POINTERS. NAME is the name used when looking up the builtin
3937 type. TYPE is the _TYPE node for the builtin type.
3939 The calls to set_global_binding below should be
3940 eliminated. Built-in types should not be looked up name; their
3941 names are keywords that the parser can recognize. However, there
3942 is code in c-common.c that uses identifier_global_value to look up
3943 built-in types by name. */
3945 void
3946 record_builtin_type (enum rid rid_index,
3947 const char* name,
3948 tree type)
3950 tree decl = NULL_TREE;
3952 if (name)
3954 tree tname = get_identifier (name);
3955 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3956 DECL_ARTIFICIAL (tdecl) = 1;
3957 set_global_binding (tdecl);
3958 decl = tdecl;
3961 if ((int) rid_index < (int) RID_MAX)
3962 if (tree rname = ridpointers[(int) rid_index])
3963 if (!decl || DECL_NAME (decl) != rname)
3965 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3966 DECL_ARTIFICIAL (rdecl) = 1;
3967 set_global_binding (rdecl);
3968 if (!decl)
3969 decl = rdecl;
3972 if (decl)
3974 if (!TYPE_NAME (type))
3975 TYPE_NAME (type) = decl;
3976 debug_hooks->type_decl (decl, 0);
3980 /* Push a type into the namespace so that the back ends ignore it. */
3982 static void
3983 record_unknown_type (tree type, const char* name)
3985 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3986 TYPE_DECL, get_identifier (name), type));
3987 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3988 DECL_IGNORED_P (decl) = 1;
3989 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3990 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3991 SET_TYPE_ALIGN (type, 1);
3992 TYPE_USER_ALIGN (type) = 0;
3993 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3996 /* Create all the predefined identifiers. */
3998 static void
3999 initialize_predefined_identifiers (void)
4001 struct predefined_identifier
4003 const char *name; /* Name. */
4004 tree *node; /* Node to store it in. */
4005 cp_identifier_kind kind; /* Kind of identifier. */
4008 /* A table of identifiers to create at startup. */
4009 static const predefined_identifier predefined_identifiers[] = {
4010 {"C++", &lang_name_cplusplus, cik_normal},
4011 {"C", &lang_name_c, cik_normal},
4012 /* Some of these names have a trailing space so that it is
4013 impossible for them to conflict with names written by users. */
4014 {"__ct ", &ctor_identifier, cik_ctor},
4015 {"__ct_base ", &base_ctor_identifier, cik_ctor},
4016 {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4017 {"__dt ", &dtor_identifier, cik_dtor},
4018 {"__dt_base ", &base_dtor_identifier, cik_dtor},
4019 {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4020 {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4021 {"__conv_op ", &conv_op_identifier, cik_conv_op},
4022 {"__in_chrg", &in_charge_identifier, cik_normal},
4023 {"this", &this_identifier, cik_normal},
4024 {"__delta", &delta_identifier, cik_normal},
4025 {"__pfn", &pfn_identifier, cik_normal},
4026 {"_vptr", &vptr_identifier, cik_normal},
4027 {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4028 {"::", &global_identifier, cik_normal},
4029 {"std", &std_identifier, cik_normal},
4030 /* The demangler expects anonymous namespaces to be called
4031 something starting with '_GLOBAL__N_'. It no longer needs
4032 to be unique to the TU. */
4033 {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4034 {"auto", &auto_identifier, cik_normal},
4035 {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4036 {"initializer_list", &init_list_identifier, cik_normal},
4037 {NULL, NULL, cik_normal}
4040 for (const predefined_identifier *pid = predefined_identifiers;
4041 pid->name; ++pid)
4043 *pid->node = get_identifier (pid->name);
4044 /* Some of these identifiers already have a special kind. */
4045 if (pid->kind != cik_normal)
4046 set_identifier_kind (*pid->node, pid->kind);
4050 /* Create the predefined scalar types of C,
4051 and some nodes representing standard constants (0, 1, (void *)0).
4052 Initialize the global binding level.
4053 Make definitions for built-in primitive functions. */
4055 void
4056 cxx_init_decl_processing (void)
4058 tree void_ftype;
4059 tree void_ftype_ptr;
4061 /* Create all the identifiers we need. */
4062 initialize_predefined_identifiers ();
4064 /* Create the global variables. */
4065 push_to_top_level ();
4067 current_function_decl = NULL_TREE;
4068 current_binding_level = NULL;
4069 /* Enter the global namespace. */
4070 gcc_assert (global_namespace == NULL_TREE);
4071 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4072 void_type_node);
4073 TREE_PUBLIC (global_namespace) = 1;
4074 DECL_CONTEXT (global_namespace)
4075 = build_translation_unit_decl (get_identifier (main_input_filename));
4076 /* Remember whether we want the empty class passing ABI change warning
4077 in this TU. */
4078 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4079 = warn_abi && abi_version_crosses (12);
4080 debug_hooks->register_main_translation_unit
4081 (DECL_CONTEXT (global_namespace));
4082 begin_scope (sk_namespace, global_namespace);
4083 current_namespace = global_namespace;
4085 if (flag_visibility_ms_compat)
4086 default_visibility = VISIBILITY_HIDDEN;
4088 /* Initially, C. */
4089 current_lang_name = lang_name_c;
4091 /* Create the `std' namespace. */
4092 push_namespace (std_identifier);
4093 std_node = current_namespace;
4094 pop_namespace ();
4096 flag_noexcept_type = (cxx_dialect >= cxx17);
4098 c_common_nodes_and_builtins ();
4100 integer_two_node = build_int_cst (NULL_TREE, 2);
4102 /* Guess at the initial static decls size. */
4103 vec_alloc (static_decls, 500);
4105 /* ... and keyed classes. */
4106 vec_alloc (keyed_classes, 100);
4108 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4109 truthvalue_type_node = boolean_type_node;
4110 truthvalue_false_node = boolean_false_node;
4111 truthvalue_true_node = boolean_true_node;
4113 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4114 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4115 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4116 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4117 NULL_TREE);
4119 #if 0
4120 record_builtin_type (RID_MAX, NULL, string_type_node);
4121 #endif
4123 delta_type_node = ptrdiff_type_node;
4124 vtable_index_type = ptrdiff_type_node;
4126 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4127 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4128 void_ftype_ptr = build_function_type_list (void_type_node,
4129 ptr_type_node, NULL_TREE);
4130 void_ftype_ptr
4131 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4133 /* Create the conversion operator marker. This operator's DECL_NAME
4134 is in the identifier table, so we can use identifier equality to
4135 find it. */
4136 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4137 void_ftype);
4139 /* C++ extensions */
4141 unknown_type_node = make_node (LANG_TYPE);
4142 record_unknown_type (unknown_type_node, "unknown type");
4144 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4145 TREE_TYPE (unknown_type_node) = unknown_type_node;
4147 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4148 result. */
4149 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4150 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4152 init_list_type_node = make_node (LANG_TYPE);
4153 record_unknown_type (init_list_type_node, "init list");
4156 /* Make sure we get a unique function type, so we can give
4157 its pointer type a name. (This wins for gdb.) */
4158 tree vfunc_type = make_node (FUNCTION_TYPE);
4159 TREE_TYPE (vfunc_type) = integer_type_node;
4160 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4161 layout_type (vfunc_type);
4163 vtable_entry_type = build_pointer_type (vfunc_type);
4165 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4167 vtbl_type_node
4168 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4169 layout_type (vtbl_type_node);
4170 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4171 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4172 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4173 layout_type (vtbl_ptr_type_node);
4174 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4176 push_namespace (get_identifier ("__cxxabiv1"));
4177 abi_node = current_namespace;
4178 pop_namespace ();
4180 global_type_node = make_node (LANG_TYPE);
4181 record_unknown_type (global_type_node, "global type");
4183 any_targ_node = make_node (LANG_TYPE);
4184 record_unknown_type (any_targ_node, "any type");
4186 /* Now, C++. */
4187 current_lang_name = lang_name_cplusplus;
4189 if (aligned_new_threshold > 1
4190 && !pow2p_hwi (aligned_new_threshold))
4192 error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4193 aligned_new_threshold = 1;
4195 if (aligned_new_threshold == -1)
4196 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4197 if (aligned_new_threshold == 1)
4198 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4201 tree newattrs, extvisattr;
4202 tree newtype, deltype;
4203 tree ptr_ftype_sizetype;
4204 tree new_eh_spec;
4206 ptr_ftype_sizetype
4207 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4208 if (cxx_dialect == cxx98)
4210 tree bad_alloc_id;
4211 tree bad_alloc_type_node;
4212 tree bad_alloc_decl;
4214 push_namespace (std_identifier);
4215 bad_alloc_id = get_identifier ("bad_alloc");
4216 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4217 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4218 bad_alloc_decl
4219 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4220 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4221 pop_namespace ();
4223 new_eh_spec
4224 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4226 else
4227 new_eh_spec = noexcept_false_spec;
4229 /* Ensure attribs.c is initialized. */
4230 init_attributes ();
4232 /* Ensure constraint.cc is initialized. */
4233 init_constraint_processing ();
4235 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4236 NULL_TREE);
4237 newattrs = tree_cons (get_identifier ("alloc_size"),
4238 build_tree_list (NULL_TREE, integer_one_node),
4239 extvisattr);
4240 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4241 newtype = build_exception_variant (newtype, new_eh_spec);
4242 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4243 deltype = build_exception_variant (deltype, empty_except_spec);
4244 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4245 DECL_IS_MALLOC (opnew) = 1;
4246 DECL_IS_OPERATOR_NEW (opnew) = 1;
4247 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4248 DECL_IS_MALLOC (opnew) = 1;
4249 DECL_IS_OPERATOR_NEW (opnew) = 1;
4250 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4251 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4252 if (flag_sized_deallocation)
4254 /* Also push the sized deallocation variants:
4255 void operator delete(void*, std::size_t) throw();
4256 void operator delete[](void*, std::size_t) throw(); */
4257 tree void_ftype_ptr_size
4258 = build_function_type_list (void_type_node, ptr_type_node,
4259 size_type_node, NULL_TREE);
4260 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4261 extvisattr);
4262 deltype = build_exception_variant (deltype, empty_except_spec);
4263 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4264 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4267 if (aligned_new_threshold)
4269 push_namespace (std_identifier);
4270 tree align_id = get_identifier ("align_val_t");
4271 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4272 NULL_TREE, /*scoped*/true, NULL);
4273 pop_namespace ();
4275 /* operator new (size_t, align_val_t); */
4276 newtype = build_function_type_list (ptr_type_node, size_type_node,
4277 align_type_node, NULL_TREE);
4278 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4279 newtype = build_exception_variant (newtype, new_eh_spec);
4280 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4281 DECL_IS_MALLOC (opnew) = 1;
4282 DECL_IS_OPERATOR_NEW (opnew) = 1;
4283 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4284 DECL_IS_MALLOC (opnew) = 1;
4285 DECL_IS_OPERATOR_NEW (opnew) = 1;
4287 /* operator delete (void *, align_val_t); */
4288 deltype = build_function_type_list (void_type_node, ptr_type_node,
4289 align_type_node, NULL_TREE);
4290 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4291 deltype = build_exception_variant (deltype, empty_except_spec);
4292 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4293 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4295 if (flag_sized_deallocation)
4297 /* operator delete (void *, size_t, align_val_t); */
4298 deltype = build_function_type_list (void_type_node, ptr_type_node,
4299 size_type_node, align_type_node,
4300 NULL_TREE);
4301 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4302 deltype = build_exception_variant (deltype, empty_except_spec);
4303 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4304 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4308 nullptr_type_node = make_node (NULLPTR_TYPE);
4309 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4310 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4311 TYPE_UNSIGNED (nullptr_type_node) = 1;
4312 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4313 if (abi_version_at_least (9))
4314 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4315 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4316 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4317 nullptr_node = build_int_cst (nullptr_type_node, 0);
4320 abort_fndecl
4321 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4322 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4324 /* Perform other language dependent initializations. */
4325 init_class_processing ();
4326 init_rtti_processing ();
4327 init_template_processing ();
4329 if (flag_exceptions)
4330 init_exception_processing ();
4332 if (! supports_one_only ())
4333 flag_weak = 0;
4335 make_fname_decl = cp_make_fname_decl;
4336 start_fname_decls ();
4338 /* Show we use EH for cleanups. */
4339 if (flag_exceptions)
4340 using_eh_for_cleanups ();
4343 /* Generate an initializer for a function naming variable from
4344 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4345 filled in with the type of the init. */
4347 tree
4348 cp_fname_init (const char* name, tree *type_p)
4350 tree domain = NULL_TREE;
4351 tree type;
4352 tree init = NULL_TREE;
4353 size_t length = 0;
4355 if (name)
4357 length = strlen (name);
4358 domain = build_index_type (size_int (length));
4359 init = build_string (length + 1, name);
4362 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4363 type = build_cplus_array_type (type, domain);
4365 *type_p = type;
4367 if (init)
4368 TREE_TYPE (init) = type;
4369 else
4370 init = error_mark_node;
4372 return init;
4375 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4376 the decl, LOC is the location to give the decl, NAME is the
4377 initialization string and TYPE_DEP indicates whether NAME depended
4378 on the type of the function. We make use of that to detect
4379 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4380 at the point of first use, so we mustn't push the decl now. */
4382 static tree
4383 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4385 const char *const name = (type_dep && processing_template_decl
4386 ? NULL : fname_as_string (type_dep));
4387 tree type;
4388 tree init = cp_fname_init (name, &type);
4389 tree decl = build_decl (loc, VAR_DECL, id, type);
4391 if (name)
4392 free (CONST_CAST (char *, name));
4394 TREE_STATIC (decl) = 1;
4395 TREE_READONLY (decl) = 1;
4396 DECL_ARTIFICIAL (decl) = 1;
4398 TREE_USED (decl) = 1;
4400 if (current_function_decl)
4402 DECL_CONTEXT (decl) = current_function_decl;
4403 decl = pushdecl_outermost_localscope (decl);
4404 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4405 LOOKUP_ONLYCONVERTING);
4407 else
4409 DECL_THIS_STATIC (decl) = true;
4410 pushdecl_top_level_and_finish (decl, init);
4413 return decl;
4416 static tree
4417 builtin_function_1 (tree decl, tree context, bool is_global)
4419 tree id = DECL_NAME (decl);
4420 const char *name = IDENTIFIER_POINTER (id);
4422 retrofit_lang_decl (decl);
4424 DECL_ARTIFICIAL (decl) = 1;
4425 SET_DECL_LANGUAGE (decl, lang_c);
4426 /* Runtime library routines are, by definition, available in an
4427 external shared object. */
4428 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4429 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4431 DECL_CONTEXT (decl) = context;
4433 /* A function in the user's namespace should have an explicit
4434 declaration before it is used. Mark the built-in function as
4435 anticipated but not actually declared. */
4436 if (name[0] != '_' || name[1] != '_')
4437 DECL_ANTICIPATED (decl) = 1;
4438 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4440 size_t len = strlen (name);
4442 /* Treat __*_chk fortification functions as anticipated as well,
4443 unless they are __builtin_*. */
4444 if (len > strlen ("___chk")
4445 && memcmp (name + len - strlen ("_chk"),
4446 "_chk", strlen ("_chk") + 1) == 0)
4447 DECL_ANTICIPATED (decl) = 1;
4450 if (is_global)
4451 pushdecl_top_level (decl);
4452 else
4453 pushdecl (decl);
4455 return decl;
4458 tree
4459 cxx_builtin_function (tree decl)
4461 tree id = DECL_NAME (decl);
4462 const char *name = IDENTIFIER_POINTER (id);
4463 /* All builtins that don't begin with an '_' should additionally
4464 go in the 'std' namespace. */
4465 if (name[0] != '_')
4467 tree decl2 = copy_node(decl);
4468 push_namespace (std_identifier);
4469 builtin_function_1 (decl2, std_node, false);
4470 pop_namespace ();
4473 return builtin_function_1 (decl, NULL_TREE, false);
4476 /* Like cxx_builtin_function, but guarantee the function is added to the global
4477 scope. This is to allow function specific options to add new machine
4478 dependent builtins when the target ISA changes via attribute((target(...)))
4479 which saves space on program startup if the program does not use non-generic
4480 ISAs. */
4482 tree
4483 cxx_builtin_function_ext_scope (tree decl)
4486 tree id = DECL_NAME (decl);
4487 const char *name = IDENTIFIER_POINTER (id);
4488 /* All builtins that don't begin with an '_' should additionally
4489 go in the 'std' namespace. */
4490 if (name[0] != '_')
4492 tree decl2 = copy_node(decl);
4493 push_namespace (std_identifier);
4494 builtin_function_1 (decl2, std_node, true);
4495 pop_namespace ();
4498 return builtin_function_1 (decl, NULL_TREE, true);
4501 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4502 function. Not called directly. */
4504 static tree
4505 build_library_fn (tree name, enum tree_code operator_code, tree type,
4506 int ecf_flags)
4508 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4509 DECL_EXTERNAL (fn) = 1;
4510 TREE_PUBLIC (fn) = 1;
4511 DECL_ARTIFICIAL (fn) = 1;
4512 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4513 = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4514 SET_DECL_LANGUAGE (fn, lang_c);
4515 /* Runtime library routines are, by definition, available in an
4516 external shared object. */
4517 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4518 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4519 set_call_expr_flags (fn, ecf_flags);
4520 return fn;
4523 /* Returns the _DECL for a library function with C++ linkage. */
4525 static tree
4526 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4527 int ecf_flags)
4529 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4530 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4531 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4532 return fn;
4535 /* Like build_library_fn, but takes a C string instead of an
4536 IDENTIFIER_NODE. */
4538 tree
4539 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4541 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4544 /* Like build_cp_library_fn, but takes a C string instead of an
4545 IDENTIFIER_NODE. */
4547 tree
4548 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4550 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4551 ecf_flags);
4554 /* Like build_library_fn, but also pushes the function so that we will
4555 be able to find it via get_global_binding. Also, the function
4556 may throw exceptions listed in RAISES. */
4558 tree
4559 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4561 tree fn;
4563 if (raises)
4564 type = build_exception_variant (type, raises);
4566 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4567 pushdecl_top_level (fn);
4568 return fn;
4571 /* Like build_cp_library_fn, but also pushes the function so that it
4572 will be found by normal lookup. */
4574 static tree
4575 push_cp_library_fn (enum tree_code operator_code, tree type,
4576 int ecf_flags)
4578 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4579 operator_code, type, ecf_flags);
4580 pushdecl (fn);
4581 if (flag_tm)
4582 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4583 return fn;
4586 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4587 a FUNCTION_TYPE. */
4589 tree
4590 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4592 tree type = build_function_type (void_type_node, parmtypes);
4593 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4596 /* Like push_library_fn, but also note that this function throws
4597 and does not return. Used for __throw_foo and the like. */
4599 tree
4600 push_throw_library_fn (tree name, tree type)
4602 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4603 return fn;
4606 /* When we call finish_struct for an anonymous union, we create
4607 default copy constructors and such. But, an anonymous union
4608 shouldn't have such things; this function undoes the damage to the
4609 anonymous union type T.
4611 (The reason that we create the synthesized methods is that we don't
4612 distinguish `union { int i; }' from `typedef union { int i; } U'.
4613 The first is an anonymous union; the second is just an ordinary
4614 union type.) */
4616 void
4617 fixup_anonymous_aggr (tree t)
4619 /* Wipe out memory of synthesized methods. */
4620 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4621 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4622 TYPE_HAS_COPY_CTOR (t) = 0;
4623 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4624 TYPE_HAS_COPY_ASSIGN (t) = 0;
4625 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4627 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4628 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4629 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4630 *prev_p = DECL_CHAIN (probe);
4631 else
4632 prev_p = &DECL_CHAIN (probe);
4634 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4635 assignment operators (because they cannot have these methods themselves).
4636 For anonymous unions this is already checked because they are not allowed
4637 in any union, otherwise we have to check it. */
4638 if (TREE_CODE (t) != UNION_TYPE)
4640 tree field, type;
4642 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4643 if (TREE_CODE (field) == FIELD_DECL)
4645 type = TREE_TYPE (field);
4646 if (CLASS_TYPE_P (type))
4648 if (TYPE_NEEDS_CONSTRUCTING (type))
4649 error ("member %q+#D with constructor not allowed "
4650 "in anonymous aggregate", field);
4651 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4652 error ("member %q+#D with destructor not allowed "
4653 "in anonymous aggregate", field);
4654 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4655 error ("member %q+#D with copy assignment operator "
4656 "not allowed in anonymous aggregate", field);
4662 /* Warn for an attribute located at LOCATION that appertains to the
4663 class type CLASS_TYPE that has not been properly placed after its
4664 class-key, in it class-specifier. */
4666 void
4667 warn_misplaced_attr_for_class_type (source_location location,
4668 tree class_type)
4670 gcc_assert (OVERLOAD_TYPE_P (class_type));
4672 if (warning_at (location, OPT_Wattributes,
4673 "attribute ignored in declaration "
4674 "of %q#T", class_type))
4675 inform (location,
4676 "attribute for %q#T must follow the %qs keyword",
4677 class_type, class_key_or_enum_as_string (class_type));
4680 /* Make sure that a declaration with no declarator is well-formed, i.e.
4681 just declares a tagged type or anonymous union.
4683 Returns the type declared; or NULL_TREE if none. */
4685 tree
4686 check_tag_decl (cp_decl_specifier_seq *declspecs,
4687 bool explicit_type_instantiation_p)
4689 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4690 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4691 /* If a class, struct, or enum type is declared by the DECLSPECS
4692 (i.e, if a class-specifier, enum-specifier, or non-typename
4693 elaborated-type-specifier appears in the DECLSPECS),
4694 DECLARED_TYPE is set to the corresponding type. */
4695 tree declared_type = NULL_TREE;
4696 bool error_p = false;
4698 if (declspecs->multiple_types_p)
4699 error ("multiple types in one declaration");
4700 else if (declspecs->redefined_builtin_type)
4702 if (!in_system_header_at (input_location))
4703 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4704 "redeclaration of C++ built-in type %qT",
4705 declspecs->redefined_builtin_type);
4706 return NULL_TREE;
4709 if (declspecs->type
4710 && TYPE_P (declspecs->type)
4711 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4712 && MAYBE_CLASS_TYPE_P (declspecs->type))
4713 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4714 declared_type = declspecs->type;
4715 else if (declspecs->type == error_mark_node)
4716 error_p = true;
4717 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4718 permerror (input_location, "declaration does not declare anything");
4719 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4721 error_at (declspecs->locations[ds_type_spec],
4722 "%<auto%> can only be specified for variables "
4723 "or function declarations");
4724 return error_mark_node;
4726 /* Check for an anonymous union. */
4727 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4728 && TYPE_UNNAMED_P (declared_type))
4730 /* 7/3 In a simple-declaration, the optional init-declarator-list
4731 can be omitted only when declaring a class (clause 9) or
4732 enumeration (7.2), that is, when the decl-specifier-seq contains
4733 either a class-specifier, an elaborated-type-specifier with
4734 a class-key (9.1), or an enum-specifier. In these cases and
4735 whenever a class-specifier or enum-specifier is present in the
4736 decl-specifier-seq, the identifiers in these specifiers are among
4737 the names being declared by the declaration (as class-name,
4738 enum-names, or enumerators, depending on the syntax). In such
4739 cases, and except for the declaration of an unnamed bit-field (9.6),
4740 the decl-specifier-seq shall introduce one or more names into the
4741 program, or shall redeclare a name introduced by a previous
4742 declaration. [Example:
4743 enum { }; // ill-formed
4744 typedef class { }; // ill-formed
4745 --end example] */
4746 if (saw_typedef)
4748 error ("missing type-name in typedef-declaration");
4749 return NULL_TREE;
4751 /* Anonymous unions are objects, so they can have specifiers. */;
4752 SET_ANON_AGGR_TYPE_P (declared_type);
4754 if (TREE_CODE (declared_type) != UNION_TYPE
4755 && !in_system_header_at (input_location))
4756 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4759 else
4761 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4762 error_at (declspecs->locations[ds_inline],
4763 "%<inline%> can only be specified for functions");
4764 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4765 error_at (declspecs->locations[ds_virtual],
4766 "%<virtual%> can only be specified for functions");
4767 else if (saw_friend
4768 && (!current_class_type
4769 || current_scope () != current_class_type))
4770 error_at (declspecs->locations[ds_friend],
4771 "%<friend%> can only be specified inside a class");
4772 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4773 error_at (declspecs->locations[ds_explicit],
4774 "%<explicit%> can only be specified for constructors");
4775 else if (declspecs->storage_class)
4776 error_at (declspecs->locations[ds_storage_class],
4777 "a storage class can only be specified for objects "
4778 "and functions");
4779 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4780 error_at (declspecs->locations[ds_const],
4781 "%<const%> can only be specified for objects and "
4782 "functions");
4783 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4784 error_at (declspecs->locations[ds_volatile],
4785 "%<volatile%> can only be specified for objects and "
4786 "functions");
4787 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4788 error_at (declspecs->locations[ds_restrict],
4789 "%<__restrict%> can only be specified for objects and "
4790 "functions");
4791 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4792 error_at (declspecs->locations[ds_thread],
4793 "%<__thread%> can only be specified for objects "
4794 "and functions");
4795 else if (saw_typedef)
4796 warning_at (declspecs->locations[ds_typedef], 0,
4797 "%<typedef%> was ignored in this declaration");
4798 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4799 error_at (declspecs->locations[ds_constexpr],
4800 "%<constexpr%> cannot be used for type declarations");
4803 if (declspecs->attributes && warn_attributes && declared_type)
4805 location_t loc;
4806 if (!CLASS_TYPE_P (declared_type)
4807 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4808 /* For a non-template class, use the name location. */
4809 loc = location_of (declared_type);
4810 else
4811 /* For a template class (an explicit instantiation), use the
4812 current location. */
4813 loc = input_location;
4815 if (explicit_type_instantiation_p)
4816 /* [dcl.attr.grammar]/4:
4818 No attribute-specifier-seq shall appertain to an explicit
4819 instantiation. */
4821 if (warning_at (loc, OPT_Wattributes,
4822 "attribute ignored in explicit instantiation %q#T",
4823 declared_type))
4824 inform (loc,
4825 "no attribute can be applied to "
4826 "an explicit instantiation");
4828 else
4829 warn_misplaced_attr_for_class_type (loc, declared_type);
4832 return declared_type;
4835 /* Called when a declaration is seen that contains no names to declare.
4836 If its type is a reference to a structure, union or enum inherited
4837 from a containing scope, shadow that tag name for the current scope
4838 with a forward reference.
4839 If its type defines a new named structure or union
4840 or defines an enum, it is valid but we need not do anything here.
4841 Otherwise, it is an error.
4843 C++: may have to grok the declspecs to learn about static,
4844 complain for anonymous unions.
4846 Returns the TYPE declared -- or NULL_TREE if none. */
4848 tree
4849 shadow_tag (cp_decl_specifier_seq *declspecs)
4851 tree t = check_tag_decl (declspecs,
4852 /*explicit_type_instantiation_p=*/false);
4854 if (!t)
4855 return NULL_TREE;
4857 if (maybe_process_partial_specialization (t) == error_mark_node)
4858 return NULL_TREE;
4860 /* This is where the variables in an anonymous union are
4861 declared. An anonymous union declaration looks like:
4862 union { ... } ;
4863 because there is no declarator after the union, the parser
4864 sends that declaration here. */
4865 if (ANON_AGGR_TYPE_P (t))
4867 fixup_anonymous_aggr (t);
4869 if (TYPE_FIELDS (t))
4871 tree decl = grokdeclarator (/*declarator=*/NULL,
4872 declspecs, NORMAL, 0, NULL);
4873 finish_anon_union (decl);
4877 return t;
4880 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4882 tree
4883 groktypename (cp_decl_specifier_seq *type_specifiers,
4884 const cp_declarator *declarator,
4885 bool is_template_arg)
4887 tree attrs;
4888 tree type;
4889 enum decl_context context
4890 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4891 attrs = type_specifiers->attributes;
4892 type_specifiers->attributes = NULL_TREE;
4893 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4894 if (attrs && type != error_mark_node)
4896 if (CLASS_TYPE_P (type))
4897 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4898 "outside of definition", type);
4899 else if (MAYBE_CLASS_TYPE_P (type))
4900 /* A template type parameter or other dependent type. */
4901 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4902 "type %qT without an associated declaration", type);
4903 else
4904 cplus_decl_attributes (&type, attrs, 0);
4906 return type;
4909 /* Process a DECLARATOR for a function-scope variable declaration,
4910 namespace-scope variable declaration, or function declaration.
4911 (Function definitions go through start_function; class member
4912 declarations appearing in the body of the class go through
4913 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4914 If an error occurs, the error_mark_node is returned instead.
4916 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4917 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4918 for an explicitly defaulted function, or SD_DELETED for an explicitly
4919 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4920 implicitly initialized via a default constructor. ATTRIBUTES and
4921 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4923 The scope represented by the context of the returned DECL is pushed
4924 (if it is not the global namespace) and is assigned to
4925 *PUSHED_SCOPE_P. The caller is then responsible for calling
4926 pop_scope on *PUSHED_SCOPE_P if it is set. */
4928 tree
4929 start_decl (const cp_declarator *declarator,
4930 cp_decl_specifier_seq *declspecs,
4931 int initialized,
4932 tree attributes,
4933 tree prefix_attributes,
4934 tree *pushed_scope_p)
4936 tree decl;
4937 tree context;
4938 bool was_public;
4939 int flags;
4940 bool alias;
4942 *pushed_scope_p = NULL_TREE;
4944 /* An object declared as __attribute__((deprecated)) suppresses
4945 warnings of uses of other deprecated items. */
4946 if (lookup_attribute ("deprecated", attributes))
4947 deprecated_state = DEPRECATED_SUPPRESS;
4949 attributes = chainon (attributes, prefix_attributes);
4951 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4952 &attributes);
4954 deprecated_state = DEPRECATED_NORMAL;
4956 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4957 || decl == error_mark_node)
4958 return error_mark_node;
4960 context = CP_DECL_CONTEXT (decl);
4961 if (context != global_namespace)
4962 *pushed_scope_p = push_scope (context);
4964 /* Is it valid for this decl to have an initializer at all?
4965 If not, set INITIALIZED to zero, which will indirectly
4966 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4967 if (initialized
4968 && TREE_CODE (decl) == TYPE_DECL)
4970 error ("typedef %qD is initialized (use decltype instead)", decl);
4971 return error_mark_node;
4974 if (initialized)
4976 if (! toplevel_bindings_p ()
4977 && DECL_EXTERNAL (decl))
4978 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4979 decl);
4980 DECL_EXTERNAL (decl) = 0;
4981 if (toplevel_bindings_p ())
4982 TREE_STATIC (decl) = 1;
4984 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4986 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4987 record_key_method_defined (decl);
4989 /* If this is a typedef that names the class for linkage purposes
4990 (7.1.3p8), apply any attributes directly to the type. */
4991 if (TREE_CODE (decl) == TYPE_DECL
4992 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4993 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4994 flags = ATTR_FLAG_TYPE_IN_PLACE;
4995 else
4996 flags = 0;
4998 /* Set attributes here so if duplicate decl, will have proper attributes. */
4999 cplus_decl_attributes (&decl, attributes, flags);
5001 /* Dllimported symbols cannot be defined. Static data members (which
5002 can be initialized in-class and dllimported) go through grokfield,
5003 not here, so we don't need to exclude those decls when checking for
5004 a definition. */
5005 if (initialized && DECL_DLLIMPORT_P (decl))
5007 error ("definition of %q#D is marked %<dllimport%>", decl);
5008 DECL_DLLIMPORT_P (decl) = 0;
5011 /* If #pragma weak was used, mark the decl weak now. */
5012 if (!processing_template_decl)
5013 maybe_apply_pragma_weak (decl);
5015 if (TREE_CODE (decl) == FUNCTION_DECL
5016 && DECL_DECLARED_INLINE_P (decl)
5017 && DECL_UNINLINABLE (decl)
5018 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5019 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5020 "inline function %qD given attribute noinline", decl);
5022 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5024 bool this_tmpl = (processing_template_decl
5025 > template_class_depth (context));
5026 if (VAR_P (decl))
5028 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5029 if (field == NULL_TREE
5030 || !(VAR_P (field) || variable_template_p (field)))
5031 error ("%q+#D is not a static data member of %q#T", decl, context);
5032 else if (variable_template_p (field) && !this_tmpl)
5034 if (DECL_LANG_SPECIFIC (decl)
5035 && DECL_TEMPLATE_SPECIALIZATION (decl))
5036 /* OK, specialization was already checked. */;
5037 else
5039 error_at (DECL_SOURCE_LOCATION (decl),
5040 "non-member-template declaration of %qD", decl);
5041 inform (DECL_SOURCE_LOCATION (field), "does not match "
5042 "member template declaration here");
5043 return error_mark_node;
5046 else
5048 if (variable_template_p (field))
5049 field = DECL_TEMPLATE_RESULT (field);
5051 if (DECL_CONTEXT (field) != context)
5053 if (!same_type_p (DECL_CONTEXT (field), context))
5054 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5055 "to be defined as %<%T::%D%>",
5056 DECL_CONTEXT (field), DECL_NAME (decl),
5057 context, DECL_NAME (decl));
5058 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5060 /* Static data member are tricky; an in-class initialization
5061 still doesn't provide a definition, so the in-class
5062 declaration will have DECL_EXTERNAL set, but will have an
5063 initialization. Thus, duplicate_decls won't warn
5064 about this situation, and so we check here. */
5065 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5066 error ("duplicate initialization of %qD", decl);
5067 field = duplicate_decls (decl, field,
5068 /*newdecl_is_friend=*/false);
5069 if (field == error_mark_node)
5070 return error_mark_node;
5071 else if (field)
5072 decl = field;
5075 else
5077 tree field = check_classfn (context, decl,
5078 this_tmpl
5079 ? current_template_parms
5080 : NULL_TREE);
5081 if (field && field != error_mark_node
5082 && duplicate_decls (decl, field,
5083 /*newdecl_is_friend=*/false))
5084 decl = field;
5087 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5088 DECL_IN_AGGR_P (decl) = 0;
5089 /* Do not mark DECL as an explicit specialization if it was not
5090 already marked as an instantiation; a declaration should
5091 never be marked as a specialization unless we know what
5092 template is being specialized. */
5093 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5095 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5096 if (TREE_CODE (decl) == FUNCTION_DECL)
5097 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5098 && DECL_DECLARED_INLINE_P (decl));
5099 else
5100 DECL_COMDAT (decl) = false;
5102 /* [temp.expl.spec] An explicit specialization of a static data
5103 member of a template is a definition if the declaration
5104 includes an initializer; otherwise, it is a declaration.
5106 We check for processing_specialization so this only applies
5107 to the new specialization syntax. */
5108 if (!initialized && processing_specialization)
5109 DECL_EXTERNAL (decl) = 1;
5112 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5113 /* Aliases are definitions. */
5114 && !alias)
5115 permerror (input_location, "declaration of %q#D outside of class is not definition",
5116 decl);
5119 was_public = TREE_PUBLIC (decl);
5121 /* Enter this declaration into the symbol table. Don't push the plain
5122 VAR_DECL for a variable template. */
5123 if (!template_parm_scope_p ()
5124 || !VAR_P (decl))
5125 decl = maybe_push_decl (decl);
5127 if (processing_template_decl)
5128 decl = push_template_decl (decl);
5129 if (decl == error_mark_node)
5130 return error_mark_node;
5132 if (VAR_P (decl)
5133 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5134 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5136 /* This is a const variable with implicit 'static'. Set
5137 DECL_THIS_STATIC so we can tell it from variables that are
5138 !TREE_PUBLIC because of the anonymous namespace. */
5139 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5140 DECL_THIS_STATIC (decl) = 1;
5143 if (current_function_decl && VAR_P (decl)
5144 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5146 bool ok = false;
5147 if (CP_DECL_THREAD_LOCAL_P (decl))
5148 error ("%qD declared %<thread_local%> in %<constexpr%> function",
5149 decl);
5150 else if (TREE_STATIC (decl))
5151 error ("%qD declared %<static%> in %<constexpr%> function", decl);
5152 else
5153 ok = true;
5154 if (!ok)
5155 cp_function_chain->invalid_constexpr = true;
5158 if (!processing_template_decl && VAR_P (decl))
5159 start_decl_1 (decl, initialized);
5161 return decl;
5164 /* Process the declaration of a variable DECL. INITIALIZED is true
5165 iff DECL is explicitly initialized. (INITIALIZED is false if the
5166 variable is initialized via an implicitly-called constructor.)
5167 This function must be called for ordinary variables (including, for
5168 example, implicit instantiations of templates), but must not be
5169 called for template declarations. */
5171 void
5172 start_decl_1 (tree decl, bool initialized)
5174 tree type;
5175 bool complete_p;
5176 bool aggregate_definition_p;
5178 gcc_assert (!processing_template_decl);
5180 if (error_operand_p (decl))
5181 return;
5183 gcc_assert (VAR_P (decl));
5185 type = TREE_TYPE (decl);
5186 complete_p = COMPLETE_TYPE_P (type);
5187 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5189 /* If an explicit initializer is present, or if this is a definition
5190 of an aggregate, then we need a complete type at this point.
5191 (Scalars are always complete types, so there is nothing to
5192 check.) This code just sets COMPLETE_P; errors (if necessary)
5193 are issued below. */
5194 if ((initialized || aggregate_definition_p)
5195 && !complete_p
5196 && COMPLETE_TYPE_P (complete_type (type)))
5198 complete_p = true;
5199 /* We will not yet have set TREE_READONLY on DECL if the type
5200 was "const", but incomplete, before this point. But, now, we
5201 have a complete type, so we can try again. */
5202 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5205 if (initialized)
5206 /* Is it valid for this decl to have an initializer at all? */
5208 /* Don't allow initializations for incomplete types except for
5209 arrays which might be completed by the initialization. */
5210 if (complete_p)
5211 ; /* A complete type is ok. */
5212 else if (type_uses_auto (type))
5213 ; /* An auto type is ok. */
5214 else if (TREE_CODE (type) != ARRAY_TYPE)
5216 error ("variable %q#D has initializer but incomplete type", decl);
5217 type = TREE_TYPE (decl) = error_mark_node;
5219 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5221 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5222 error ("elements of array %q#D have incomplete type", decl);
5223 /* else we already gave an error in start_decl. */
5226 else if (aggregate_definition_p && !complete_p)
5228 if (type_uses_auto (type))
5229 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5230 else
5232 error ("aggregate %q#D has incomplete type and cannot be defined",
5233 decl);
5234 /* Change the type so that assemble_variable will give
5235 DECL an rtl we can live with: (mem (const_int 0)). */
5236 type = TREE_TYPE (decl) = error_mark_node;
5240 /* Create a new scope to hold this declaration if necessary.
5241 Whether or not a new scope is necessary cannot be determined
5242 until after the type has been completed; if the type is a
5243 specialization of a class template it is not until after
5244 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5245 will be set correctly. */
5246 maybe_push_cleanup_level (type);
5249 /* Handle initialization of references. DECL, TYPE, and INIT have the
5250 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5251 but will be set to a new CLEANUP_STMT if a temporary is created
5252 that must be destroyed subsequently.
5254 Returns an initializer expression to use to initialize DECL, or
5255 NULL if the initialization can be performed statically.
5257 Quotes on semantics can be found in ARM 8.4.3. */
5259 static tree
5260 grok_reference_init (tree decl, tree type, tree init, int flags)
5262 if (init == NULL_TREE)
5264 if ((DECL_LANG_SPECIFIC (decl) == 0
5265 || DECL_IN_AGGR_P (decl) == 0)
5266 && ! DECL_THIS_EXTERN (decl))
5267 error ("%qD declared as reference but not initialized", decl);
5268 return NULL_TREE;
5271 if (TREE_CODE (init) == TREE_LIST)
5272 init = build_x_compound_expr_from_list (init, ELK_INIT,
5273 tf_warning_or_error);
5275 tree ttype = TREE_TYPE (type);
5276 if (TREE_CODE (ttype) != ARRAY_TYPE
5277 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5278 /* Note: default conversion is only called in very special cases. */
5279 init = decay_conversion (init, tf_warning_or_error);
5281 /* check_initializer handles this for non-reference variables, but for
5282 references we need to do it here or the initializer will get the
5283 incomplete array type and confuse later calls to
5284 cp_complete_array_type. */
5285 if (TREE_CODE (ttype) == ARRAY_TYPE
5286 && TYPE_DOMAIN (ttype) == NULL_TREE
5287 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5288 || TREE_CODE (init) == STRING_CST))
5290 cp_complete_array_type (&ttype, init, false);
5291 if (ttype != TREE_TYPE (type))
5292 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5295 /* Convert INIT to the reference type TYPE. This may involve the
5296 creation of a temporary, whose lifetime must be the same as that
5297 of the reference. If so, a DECL_EXPR for the temporary will be
5298 added just after the DECL_EXPR for DECL. That's why we don't set
5299 DECL_INITIAL for local references (instead assigning to them
5300 explicitly); we need to allow the temporary to be initialized
5301 first. */
5302 return initialize_reference (type, init, flags,
5303 tf_warning_or_error);
5306 /* Designated initializers in arrays are not supported in GNU C++.
5307 The parser cannot detect this error since it does not know whether
5308 a given brace-enclosed initializer is for a class type or for an
5309 array. This function checks that CE does not use a designated
5310 initializer. If it does, an error is issued. Returns true if CE
5311 is valid, i.e., does not have a designated initializer. */
5313 bool
5314 check_array_designated_initializer (constructor_elt *ce,
5315 unsigned HOST_WIDE_INT index)
5317 /* Designated initializers for array elements are not supported. */
5318 if (ce->index)
5320 /* The parser only allows identifiers as designated
5321 initializers. */
5322 if (ce->index == error_mark_node)
5324 error ("name used in a GNU-style designated "
5325 "initializer for an array");
5326 return false;
5328 else if (identifier_p (ce->index))
5330 error ("name %qD used in a GNU-style designated "
5331 "initializer for an array", ce->index);
5332 return false;
5335 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5336 ce->index, true);
5337 if (ce_index
5338 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5339 && (TREE_CODE (ce_index = maybe_constant_value (ce_index))
5340 == INTEGER_CST))
5342 /* A C99 designator is OK if it matches the current index. */
5343 if (wi::to_wide (ce_index) == index)
5344 return true;
5345 else
5346 sorry ("non-trivial designated initializers not supported");
5348 else
5349 error ("C99 designator %qE is not an integral constant-expression",
5350 ce->index);
5352 return false;
5355 return true;
5358 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5359 array until we finish parsing the initializer. If that's the
5360 situation we're in, update DECL accordingly. */
5362 static void
5363 maybe_deduce_size_from_array_init (tree decl, tree init)
5365 tree type = TREE_TYPE (decl);
5367 if (TREE_CODE (type) == ARRAY_TYPE
5368 && TYPE_DOMAIN (type) == NULL_TREE
5369 && TREE_CODE (decl) != TYPE_DECL)
5371 /* do_default is really a C-ism to deal with tentative definitions.
5372 But let's leave it here to ease the eventual merge. */
5373 int do_default = !DECL_EXTERNAL (decl);
5374 tree initializer = init ? init : DECL_INITIAL (decl);
5375 int failure = 0;
5377 /* Check that there are no designated initializers in INIT, as
5378 those are not supported in GNU C++, and as the middle-end
5379 will crash if presented with a non-numeric designated
5380 initializer. */
5381 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5383 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5384 constructor_elt *ce;
5385 HOST_WIDE_INT i;
5386 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5387 if (!check_array_designated_initializer (ce, i))
5388 failure = 1;
5391 if (!failure)
5393 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5394 do_default);
5395 if (failure == 1)
5397 error_at (EXPR_LOC_OR_LOC (initializer,
5398 DECL_SOURCE_LOCATION (decl)),
5399 "initializer fails to determine size of %qD", decl);
5401 else if (failure == 2)
5403 if (do_default)
5405 error_at (DECL_SOURCE_LOCATION (decl),
5406 "array size missing in %qD", decl);
5408 /* If a `static' var's size isn't known, make it extern as
5409 well as static, so it does not get allocated. If it's not
5410 `static', then don't mark it extern; finish_incomplete_decl
5411 will give it a default size and it will get allocated. */
5412 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5413 DECL_EXTERNAL (decl) = 1;
5415 else if (failure == 3)
5417 error_at (DECL_SOURCE_LOCATION (decl),
5418 "zero-size array %qD", decl);
5422 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5424 relayout_decl (decl);
5428 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5429 any appropriate error messages regarding the layout. */
5431 static void
5432 layout_var_decl (tree decl)
5434 tree type;
5436 type = TREE_TYPE (decl);
5437 if (type == error_mark_node)
5438 return;
5440 /* If we haven't already laid out this declaration, do so now.
5441 Note that we must not call complete type for an external object
5442 because it's type might involve templates that we are not
5443 supposed to instantiate yet. (And it's perfectly valid to say
5444 `extern X x' for some incomplete type `X'.) */
5445 if (!DECL_EXTERNAL (decl))
5446 complete_type (type);
5447 if (!DECL_SIZE (decl)
5448 && TREE_TYPE (decl) != error_mark_node
5449 && complete_or_array_type_p (type))
5450 layout_decl (decl, 0);
5452 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5454 /* An automatic variable with an incomplete type: that is an error.
5455 Don't talk about array types here, since we took care of that
5456 message in grokdeclarator. */
5457 error_at (DECL_SOURCE_LOCATION (decl),
5458 "storage size of %qD isn%'t known", decl);
5459 TREE_TYPE (decl) = error_mark_node;
5461 #if 0
5462 /* Keep this code around in case we later want to control debug info
5463 based on whether a type is "used". (jason 1999-11-11) */
5465 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5466 /* Let debugger know it should output info for this type. */
5467 note_debug_info_needed (ttype);
5469 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5470 note_debug_info_needed (DECL_CONTEXT (decl));
5471 #endif
5473 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5474 && DECL_SIZE (decl) != NULL_TREE
5475 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5477 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5478 constant_expression_warning (DECL_SIZE (decl));
5479 else
5481 error_at (DECL_SOURCE_LOCATION (decl),
5482 "storage size of %qD isn%'t constant", decl);
5483 TREE_TYPE (decl) = error_mark_node;
5488 /* If a local static variable is declared in an inline function, or if
5489 we have a weak definition, we must endeavor to create only one
5490 instance of the variable at link-time. */
5492 void
5493 maybe_commonize_var (tree decl)
5495 /* Static data in a function with comdat linkage also has comdat
5496 linkage. */
5497 if ((TREE_STATIC (decl)
5498 /* Don't mess with __FUNCTION__. */
5499 && ! DECL_ARTIFICIAL (decl)
5500 && DECL_FUNCTION_SCOPE_P (decl)
5501 && vague_linkage_p (DECL_CONTEXT (decl)))
5502 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5504 if (flag_weak)
5506 /* With weak symbols, we simply make the variable COMDAT;
5507 that will cause copies in multiple translations units to
5508 be merged. */
5509 comdat_linkage (decl);
5511 else
5513 if (DECL_INITIAL (decl) == NULL_TREE
5514 || DECL_INITIAL (decl) == error_mark_node)
5516 /* Without weak symbols, we can use COMMON to merge
5517 uninitialized variables. */
5518 TREE_PUBLIC (decl) = 1;
5519 DECL_COMMON (decl) = 1;
5521 else
5523 /* While for initialized variables, we must use internal
5524 linkage -- which means that multiple copies will not
5525 be merged. */
5526 TREE_PUBLIC (decl) = 0;
5527 DECL_COMMON (decl) = 0;
5528 const char *msg;
5529 if (DECL_INLINE_VAR_P (decl))
5530 msg = G_("sorry: semantics of inline variable "
5531 "%q#D are wrong (you%'ll wind up with "
5532 "multiple copies)");
5533 else
5534 msg = G_("sorry: semantics of inline function "
5535 "static data %q#D are wrong (you%'ll wind "
5536 "up with multiple copies)");
5537 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5538 msg, decl))
5539 inform (DECL_SOURCE_LOCATION (decl),
5540 "you can work around this by removing the initializer");
5546 /* Issue an error message if DECL is an uninitialized const variable. */
5548 static void
5549 check_for_uninitialized_const_var (tree decl)
5551 tree type = strip_array_types (TREE_TYPE (decl));
5553 /* ``Unless explicitly declared extern, a const object does not have
5554 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5555 7.1.6 */
5556 if (VAR_P (decl)
5557 && TREE_CODE (type) != REFERENCE_TYPE
5558 && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5559 && !DECL_INITIAL (decl))
5561 tree field = default_init_uninitialized_part (type);
5562 if (!field)
5563 return;
5565 if (CP_TYPE_CONST_P (type))
5566 permerror (DECL_SOURCE_LOCATION (decl),
5567 "uninitialized const %qD", decl);
5568 else
5570 if (!is_instantiation_of_constexpr (current_function_decl))
5571 error_at (DECL_SOURCE_LOCATION (decl),
5572 "uninitialized variable %qD in %<constexpr%> function",
5573 decl);
5574 cp_function_chain->invalid_constexpr = true;
5577 if (CLASS_TYPE_P (type))
5579 tree defaulted_ctor;
5581 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5582 "%q#T has no user-provided default constructor", type);
5583 defaulted_ctor = in_class_defaulted_default_constructor (type);
5584 if (defaulted_ctor)
5585 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5586 "constructor is not user-provided because it is "
5587 "explicitly defaulted in the class body");
5588 inform (DECL_SOURCE_LOCATION (field),
5589 "and the implicitly-defined constructor does not "
5590 "initialize %q#D", field);
5595 /* Structure holding the current initializer being processed by reshape_init.
5596 CUR is a pointer to the current element being processed, END is a pointer
5597 after the last element present in the initializer. */
5598 struct reshape_iter
5600 constructor_elt *cur;
5601 constructor_elt *end;
5604 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5606 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5607 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5608 initialized. If there are no more such fields, the return value
5609 will be NULL. */
5611 tree
5612 next_initializable_field (tree field)
5614 while (field
5615 && (TREE_CODE (field) != FIELD_DECL
5616 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5617 || (DECL_ARTIFICIAL (field)
5618 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5619 field = DECL_CHAIN (field);
5621 return field;
5624 /* Return true for [dcl.init.list] direct-list-initialization from
5625 single element of enumeration with a fixed underlying type. */
5627 bool
5628 is_direct_enum_init (tree type, tree init)
5630 if (cxx_dialect >= cxx17
5631 && TREE_CODE (type) == ENUMERAL_TYPE
5632 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5633 && TREE_CODE (init) == CONSTRUCTOR
5634 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5635 && CONSTRUCTOR_NELTS (init) == 1)
5636 return true;
5637 return false;
5640 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5641 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5642 INTEGER_CST representing the size of the array minus one (the maximum index),
5643 or NULL_TREE if the array was declared without specifying the size. D is
5644 the iterator within the constructor. */
5646 static tree
5647 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5648 tsubst_flags_t complain)
5650 tree new_init;
5651 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5652 unsigned HOST_WIDE_INT max_index_cst = 0;
5653 unsigned HOST_WIDE_INT index;
5655 /* The initializer for an array is always a CONSTRUCTOR. */
5656 new_init = build_constructor (init_list_type_node, NULL);
5658 if (sized_array_p)
5660 /* Minus 1 is used for zero sized arrays. */
5661 if (integer_all_onesp (max_index))
5662 return new_init;
5664 if (tree_fits_uhwi_p (max_index))
5665 max_index_cst = tree_to_uhwi (max_index);
5666 /* sizetype is sign extended, not zero extended. */
5667 else
5668 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5671 /* Loop until there are no more initializers. */
5672 for (index = 0;
5673 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5674 ++index)
5676 tree elt_init;
5677 constructor_elt *old_cur = d->cur;
5679 check_array_designated_initializer (d->cur, index);
5680 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5681 complain);
5682 if (elt_init == error_mark_node)
5683 return error_mark_node;
5684 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5685 size_int (index), elt_init);
5686 if (!TREE_CONSTANT (elt_init))
5687 TREE_CONSTANT (new_init) = false;
5689 /* This can happen with an invalid initializer (c++/54501). */
5690 if (d->cur == old_cur && !sized_array_p)
5691 break;
5694 return new_init;
5697 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5698 Parameters are the same of reshape_init_r. */
5700 static tree
5701 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5703 tree max_index = NULL_TREE;
5705 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5707 if (TYPE_DOMAIN (type))
5708 max_index = array_type_nelts (type);
5710 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5713 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5714 Parameters are the same of reshape_init_r. */
5716 static tree
5717 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5719 tree max_index = NULL_TREE;
5721 gcc_assert (VECTOR_TYPE_P (type));
5723 if (COMPOUND_LITERAL_P (d->cur->value))
5725 tree value = d->cur->value;
5726 if (!same_type_p (TREE_TYPE (value), type))
5728 if (complain & tf_error)
5729 error ("invalid type %qT as initializer for a vector of type %qT",
5730 TREE_TYPE (d->cur->value), type);
5731 value = error_mark_node;
5733 ++d->cur;
5734 return value;
5737 /* For a vector, we initialize it as an array of the appropriate size. */
5738 if (VECTOR_TYPE_P (type))
5739 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5741 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5744 /* Subroutine of reshape_init_r, processes the initializers for classes
5745 or union. Parameters are the same of reshape_init_r. */
5747 static tree
5748 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5749 tsubst_flags_t complain)
5751 tree field;
5752 tree new_init;
5754 gcc_assert (CLASS_TYPE_P (type));
5756 /* The initializer for a class is always a CONSTRUCTOR. */
5757 new_init = build_constructor (init_list_type_node, NULL);
5758 field = next_initializable_field (TYPE_FIELDS (type));
5760 if (!field)
5762 /* [dcl.init.aggr]
5764 An initializer for an aggregate member that is an
5765 empty class shall have the form of an empty
5766 initializer-list {}. */
5767 if (!first_initializer_p)
5769 if (complain & tf_error)
5770 error ("initializer for %qT must be brace-enclosed", type);
5771 return error_mark_node;
5773 return new_init;
5776 /* Loop through the initializable fields, gathering initializers. */
5777 while (d->cur != d->end)
5779 tree field_init;
5780 constructor_elt *old_cur = d->cur;
5782 /* Handle designated initializers, as an extension. */
5783 if (d->cur->index)
5785 if (d->cur->index == error_mark_node)
5786 return error_mark_node;
5788 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5789 /* We already reshaped this. */
5790 gcc_assert (d->cur->index == field);
5791 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5792 field = get_class_binding (type, d->cur->index, false);
5793 else
5795 if (complain & tf_error)
5796 error ("%<[%E] =%> used in a GNU-style designated initializer"
5797 " for class %qT", d->cur->index, type);
5798 return error_mark_node;
5801 if (!field || TREE_CODE (field) != FIELD_DECL)
5803 if (complain & tf_error)
5804 error ("%qT has no non-static data member named %qD", type,
5805 d->cur->index);
5806 return error_mark_node;
5810 /* If we processed all the member of the class, we are done. */
5811 if (!field)
5812 break;
5814 field_init = reshape_init_r (TREE_TYPE (field), d,
5815 /*first_initializer_p=*/false, complain);
5816 if (field_init == error_mark_node)
5817 return error_mark_node;
5819 if (d->cur == old_cur && d->cur->index)
5821 /* This can happen with an invalid initializer for a flexible
5822 array member (c++/54441). */
5823 if (complain & tf_error)
5824 error ("invalid initializer for %q#D", field);
5825 return error_mark_node;
5828 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5830 /* [dcl.init.aggr]
5832 When a union is initialized with a brace-enclosed
5833 initializer, the braces shall only contain an
5834 initializer for the first member of the union. */
5835 if (TREE_CODE (type) == UNION_TYPE)
5836 break;
5838 field = next_initializable_field (DECL_CHAIN (field));
5841 return new_init;
5844 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5845 designators are not valid; either complain or return true to indicate
5846 that reshape_init_r should return error_mark_node. */
5848 static bool
5849 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5851 if (d->cur->index)
5853 if (complain & tf_error)
5854 error ("C99 designator %qE outside aggregate initializer",
5855 d->cur->index);
5856 else
5857 return true;
5859 return false;
5862 /* Subroutine of reshape_init, which processes a single initializer (part of
5863 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5864 iterator within the CONSTRUCTOR which points to the initializer to process.
5865 FIRST_INITIALIZER_P is true if this is the first initializer of the
5866 outermost CONSTRUCTOR node. */
5868 static tree
5869 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5870 tsubst_flags_t complain)
5872 tree init = d->cur->value;
5874 if (error_operand_p (init))
5875 return error_mark_node;
5877 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5878 && has_designator_problem (d, complain))
5879 return error_mark_node;
5881 if (TREE_CODE (type) == COMPLEX_TYPE)
5883 /* A complex type can be initialized from one or two initializers,
5884 but braces are not elided. */
5885 d->cur++;
5886 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5888 if (CONSTRUCTOR_NELTS (init) > 2)
5890 if (complain & tf_error)
5891 error ("too many initializers for %qT", type);
5892 else
5893 return error_mark_node;
5896 else if (first_initializer_p && d->cur != d->end)
5898 vec<constructor_elt, va_gc> *v = 0;
5899 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5900 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5901 if (has_designator_problem (d, complain))
5902 return error_mark_node;
5903 d->cur++;
5904 init = build_constructor (init_list_type_node, v);
5906 return init;
5909 /* A non-aggregate type is always initialized with a single
5910 initializer. */
5911 if (!CP_AGGREGATE_TYPE_P (type))
5913 /* It is invalid to initialize a non-aggregate type with a
5914 brace-enclosed initializer before C++0x.
5915 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5916 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5917 a CONSTRUCTOR (with a record type). */
5918 if (TREE_CODE (init) == CONSTRUCTOR
5919 /* Don't complain about a capture-init. */
5920 && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5921 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5923 if (SCALAR_TYPE_P (type))
5925 if (cxx_dialect < cxx11
5926 /* Isn't value-initialization. */
5927 || CONSTRUCTOR_NELTS (init) > 0)
5929 if (complain & tf_error)
5930 error ("braces around scalar initializer for type %qT",
5931 type);
5932 init = error_mark_node;
5935 else
5936 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5939 d->cur++;
5940 return init;
5943 /* "If T is a class type and the initializer list has a single element of
5944 type cv U, where U is T or a class derived from T, the object is
5945 initialized from that element." Even if T is an aggregate. */
5946 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5947 && first_initializer_p
5948 && d->end - d->cur == 1
5949 && reference_related_p (type, TREE_TYPE (init)))
5951 d->cur++;
5952 return init;
5955 /* [dcl.init.aggr]
5957 All implicit type conversions (clause _conv_) are considered when
5958 initializing the aggregate member with an initializer from an
5959 initializer-list. If the initializer can initialize a member,
5960 the member is initialized. Otherwise, if the member is itself a
5961 non-empty subaggregate, brace elision is assumed and the
5962 initializer is considered for the initialization of the first
5963 member of the subaggregate. */
5964 if (TREE_CODE (init) != CONSTRUCTOR
5965 /* But don't try this for the first initializer, since that would be
5966 looking through the outermost braces; A a2 = { a1 }; is not a
5967 valid aggregate initialization. */
5968 && !first_initializer_p
5969 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5970 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5971 complain)))
5973 d->cur++;
5974 return init;
5977 /* [dcl.init.string]
5979 A char array (whether plain char, signed char, or unsigned char)
5980 can be initialized by a string-literal (optionally enclosed in
5981 braces); a wchar_t array can be initialized by a wide
5982 string-literal (optionally enclosed in braces). */
5983 if (TREE_CODE (type) == ARRAY_TYPE
5984 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5986 tree str_init = init;
5988 /* Strip one level of braces if and only if they enclose a single
5989 element (as allowed by [dcl.init.string]). */
5990 if (!first_initializer_p
5991 && TREE_CODE (str_init) == CONSTRUCTOR
5992 && CONSTRUCTOR_NELTS (str_init) == 1)
5994 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5997 /* If it's a string literal, then it's the initializer for the array
5998 as a whole. Otherwise, continue with normal initialization for
5999 array types (one value per array element). */
6000 if (TREE_CODE (str_init) == STRING_CST)
6002 if (has_designator_problem (d, complain))
6003 return error_mark_node;
6004 d->cur++;
6005 return str_init;
6009 /* The following cases are about aggregates. If we are not within a full
6010 initializer already, and there is not a CONSTRUCTOR, it means that there
6011 is a missing set of braces (that is, we are processing the case for
6012 which reshape_init exists). */
6013 if (!first_initializer_p)
6015 if (TREE_CODE (init) == CONSTRUCTOR)
6017 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
6018 /* There is no need to reshape pointer-to-member function
6019 initializers, as they are always constructed correctly
6020 by the front end. */
6022 else if (COMPOUND_LITERAL_P (init))
6023 /* For a nested compound literal, there is no need to reshape since
6024 brace elision is not allowed. Even if we decided to allow it,
6025 we should add a call to reshape_init in finish_compound_literal,
6026 before calling digest_init, so changing this code would still
6027 not be necessary. */
6028 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
6029 else
6031 ++d->cur;
6032 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6033 return reshape_init (type, init, complain);
6037 if (complain & tf_warning)
6038 warning (OPT_Wmissing_braces,
6039 "missing braces around initializer for %qT",
6040 type);
6043 /* Dispatch to specialized routines. */
6044 if (CLASS_TYPE_P (type))
6045 return reshape_init_class (type, d, first_initializer_p, complain);
6046 else if (TREE_CODE (type) == ARRAY_TYPE)
6047 return reshape_init_array (type, d, complain);
6048 else if (VECTOR_TYPE_P (type))
6049 return reshape_init_vector (type, d, complain);
6050 else
6051 gcc_unreachable();
6054 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6055 brace-enclosed aggregate initializer.
6057 INIT is the CONSTRUCTOR containing the list of initializers describing
6058 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6059 It may not presently match the shape of the TYPE; for example:
6061 struct S { int a; int b; };
6062 struct S a[] = { 1, 2, 3, 4 };
6064 Here INIT will hold a vector of four elements, rather than a
6065 vector of two elements, each itself a vector of two elements. This
6066 routine transforms INIT from the former form into the latter. The
6067 revised CONSTRUCTOR node is returned. */
6069 tree
6070 reshape_init (tree type, tree init, tsubst_flags_t complain)
6072 vec<constructor_elt, va_gc> *v;
6073 reshape_iter d;
6074 tree new_init;
6076 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6078 v = CONSTRUCTOR_ELTS (init);
6080 /* An empty constructor does not need reshaping, and it is always a valid
6081 initializer. */
6082 if (vec_safe_is_empty (v))
6083 return init;
6085 /* Handle [dcl.init.list] direct-list-initialization from
6086 single element of enumeration with a fixed underlying type. */
6087 if (is_direct_enum_init (type, init))
6089 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6090 type = cv_unqualified (type);
6091 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6093 warning_sentinel w (warn_useless_cast);
6094 return cp_build_c_cast (type, elt, tf_warning_or_error);
6096 else
6097 return error_mark_node;
6100 /* Recurse on this CONSTRUCTOR. */
6101 d.cur = &(*v)[0];
6102 d.end = d.cur + v->length ();
6104 new_init = reshape_init_r (type, &d, true, complain);
6105 if (new_init == error_mark_node)
6106 return error_mark_node;
6108 /* Make sure all the element of the constructor were used. Otherwise,
6109 issue an error about exceeding initializers. */
6110 if (d.cur != d.end)
6112 if (complain & tf_error)
6113 error ("too many initializers for %qT", type);
6114 return error_mark_node;
6117 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6118 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6119 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6121 return new_init;
6124 /* Verify array initializer. Returns true if errors have been reported. */
6126 bool
6127 check_array_initializer (tree decl, tree type, tree init)
6129 tree element_type = TREE_TYPE (type);
6131 /* The array type itself need not be complete, because the
6132 initializer may tell us how many elements are in the array.
6133 But, the elements of the array must be complete. */
6134 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6136 if (decl)
6137 error_at (DECL_SOURCE_LOCATION (decl),
6138 "elements of array %q#D have incomplete type", decl);
6139 else
6140 error ("elements of array %q#T have incomplete type", type);
6141 return true;
6143 /* A compound literal can't have variable size. */
6144 if (init && !decl
6145 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6146 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6148 error ("variable-sized compound literal");
6149 return true;
6151 return false;
6154 /* Subroutine of check_initializer; args are passed down from that function.
6155 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6157 static tree
6158 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6161 gcc_assert (stmts_are_full_exprs_p ());
6162 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6165 /* Verify INIT (the initializer for DECL), and record the
6166 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6167 grok_reference_init.
6169 If the return value is non-NULL, it is an expression that must be
6170 evaluated dynamically to initialize DECL. */
6172 static tree
6173 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6175 tree type = TREE_TYPE (decl);
6176 tree init_code = NULL;
6177 tree core_type;
6179 /* Things that are going to be initialized need to have complete
6180 type. */
6181 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6183 if (DECL_HAS_VALUE_EXPR_P (decl))
6185 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6186 it doesn't have storage to be initialized. */
6187 gcc_assert (init == NULL_TREE);
6188 return NULL_TREE;
6191 if (type == error_mark_node)
6192 /* We will have already complained. */
6193 return NULL_TREE;
6195 if (TREE_CODE (type) == ARRAY_TYPE)
6197 if (check_array_initializer (decl, type, init))
6198 return NULL_TREE;
6200 else if (!COMPLETE_TYPE_P (type))
6202 error_at (DECL_SOURCE_LOCATION (decl),
6203 "%q#D has incomplete type", decl);
6204 TREE_TYPE (decl) = error_mark_node;
6205 return NULL_TREE;
6207 else
6208 /* There is no way to make a variable-sized class type in GNU C++. */
6209 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6211 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6213 int init_len = CONSTRUCTOR_NELTS (init);
6214 if (SCALAR_TYPE_P (type))
6216 if (init_len == 0)
6218 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6219 init = build_zero_init (type, NULL_TREE, false);
6221 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6223 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6224 "scalar object %qD requires one element in "
6225 "initializer", decl);
6226 TREE_TYPE (decl) = error_mark_node;
6227 return NULL_TREE;
6232 if (TREE_CODE (decl) == CONST_DECL)
6234 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
6236 DECL_INITIAL (decl) = init;
6238 gcc_assert (init != NULL_TREE);
6239 init = NULL_TREE;
6241 else if (!init && DECL_REALLY_EXTERN (decl))
6243 else if (init || type_build_ctor_call (type)
6244 || TREE_CODE (type) == REFERENCE_TYPE)
6246 if (TREE_CODE (type) == REFERENCE_TYPE)
6248 init = grok_reference_init (decl, type, init, flags);
6249 flags |= LOOKUP_ALREADY_DIGESTED;
6251 else if (!init)
6252 check_for_uninitialized_const_var (decl);
6253 /* Do not reshape constructors of vectors (they don't need to be
6254 reshaped. */
6255 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6257 if (is_std_init_list (type))
6259 init = perform_implicit_conversion (type, init,
6260 tf_warning_or_error);
6261 flags |= LOOKUP_ALREADY_DIGESTED;
6263 else if (TYPE_NON_AGGREGATE_CLASS (type))
6265 /* Don't reshape if the class has constructors. */
6266 if (cxx_dialect == cxx98)
6267 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6268 "in C++98 %qD must be initialized by "
6269 "constructor, not by %<{...}%>",
6270 decl);
6272 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6274 error ("opaque vector types cannot be initialized");
6275 init = error_mark_node;
6277 else
6279 init = reshape_init (type, init, tf_warning_or_error);
6280 flags |= LOOKUP_NO_NARROWING;
6283 else if (TREE_CODE (init) == TREE_LIST
6284 && TREE_TYPE (init) != unknown_type_node
6285 && !MAYBE_CLASS_TYPE_P (type))
6287 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6289 /* We get here with code like `int a (2);' */
6290 init = build_x_compound_expr_from_list (init, ELK_INIT,
6291 tf_warning_or_error);
6294 /* If DECL has an array type without a specific bound, deduce the
6295 array size from the initializer. */
6296 maybe_deduce_size_from_array_init (decl, init);
6297 type = TREE_TYPE (decl);
6298 if (type == error_mark_node)
6299 return NULL_TREE;
6301 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6302 && !(flags & LOOKUP_ALREADY_DIGESTED)
6303 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6304 && CP_AGGREGATE_TYPE_P (type)
6305 && (CLASS_TYPE_P (type)
6306 || !TYPE_NEEDS_CONSTRUCTING (type)
6307 || type_has_extended_temps (type))))
6308 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6310 init_code = build_aggr_init_full_exprs (decl, init, flags);
6312 /* A constructor call is a non-trivial initializer even if
6313 it isn't explicitly written. */
6314 if (TREE_SIDE_EFFECTS (init_code))
6315 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6317 /* If this is a constexpr initializer, expand_default_init will
6318 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6319 case, pull the initializer back out and pass it down into
6320 store_init_value. */
6321 while (TREE_CODE (init_code) == EXPR_STMT
6322 || TREE_CODE (init_code) == CONVERT_EXPR)
6323 init_code = TREE_OPERAND (init_code, 0);
6324 if (TREE_CODE (init_code) == INIT_EXPR)
6326 init = TREE_OPERAND (init_code, 1);
6327 init_code = NULL_TREE;
6328 /* Don't call digest_init; it's unnecessary and will complain
6329 about aggregate initialization of non-aggregate classes. */
6330 flags |= LOOKUP_ALREADY_DIGESTED;
6332 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6334 /* Declared constexpr, but no suitable initializer; massage
6335 init appropriately so we can pass it into store_init_value
6336 for the error. */
6337 if (CLASS_TYPE_P (type)
6338 && (!init || TREE_CODE (init) == TREE_LIST))
6340 init = build_functional_cast (type, init, tf_none);
6341 if (TREE_CODE (init) == TARGET_EXPR)
6342 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6344 init_code = NULL_TREE;
6346 else
6347 init = NULL_TREE;
6350 if (init && TREE_CODE (init) != TREE_VEC)
6352 /* In aggregate initialization of a variable, each element
6353 initialization is a full-expression because there is no
6354 enclosing expression. */
6355 gcc_assert (stmts_are_full_exprs_p ());
6357 init_code = store_init_value (decl, init, cleanups, flags);
6359 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6360 && DECL_INITIAL (decl)
6361 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6362 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6363 warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl),
6364 DECL_SOURCE_LOCATION (decl)),
6365 0, "array %qD initialized by parenthesized "
6366 "string literal %qE",
6367 decl, DECL_INITIAL (decl));
6368 init = NULL;
6371 else
6373 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6374 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6375 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6376 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6377 /*complain=*/true);
6379 check_for_uninitialized_const_var (decl);
6382 if (init && init != error_mark_node)
6383 init_code = build2 (INIT_EXPR, type, decl, init);
6385 if (init_code)
6387 /* We might have set these in cp_finish_decl. */
6388 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6389 TREE_CONSTANT (decl) = false;
6392 if (init_code
6393 && (DECL_IN_AGGR_P (decl) && !DECL_VAR_DECLARED_INLINE_P (decl)))
6395 static int explained = 0;
6397 if (cxx_dialect < cxx11)
6398 error ("initializer invalid for static member with constructor");
6399 else if (cxx_dialect < cxx17)
6400 error ("non-constant in-class initialization invalid for static "
6401 "member %qD", decl);
6402 else
6403 error ("non-constant in-class initialization invalid for non-inline "
6404 "static member %qD", decl);
6405 if (!explained)
6407 inform (input_location,
6408 "(an out of class initialization is required)");
6409 explained = 1;
6411 return NULL_TREE;
6414 return init_code;
6417 /* If DECL is not a local variable, give it RTL. */
6419 static void
6420 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6422 int toplev = toplevel_bindings_p ();
6423 int defer_p;
6425 /* Set the DECL_ASSEMBLER_NAME for the object. */
6426 if (asmspec)
6428 /* The `register' keyword, when used together with an
6429 asm-specification, indicates that the variable should be
6430 placed in a particular register. */
6431 if (VAR_P (decl) && DECL_REGISTER (decl))
6433 set_user_assembler_name (decl, asmspec);
6434 DECL_HARD_REGISTER (decl) = 1;
6436 else
6438 if (TREE_CODE (decl) == FUNCTION_DECL
6439 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6440 set_builtin_user_assembler_name (decl, asmspec);
6441 set_user_assembler_name (decl, asmspec);
6445 /* Handle non-variables up front. */
6446 if (!VAR_P (decl))
6448 rest_of_decl_compilation (decl, toplev, at_eof);
6449 return;
6452 /* If we see a class member here, it should be a static data
6453 member. */
6454 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6456 gcc_assert (TREE_STATIC (decl));
6457 /* An in-class declaration of a static data member should be
6458 external; it is only a declaration, and not a definition. */
6459 if (init == NULL_TREE)
6460 gcc_assert (DECL_EXTERNAL (decl)
6461 || !TREE_PUBLIC (decl)
6462 || DECL_INLINE_VAR_P (decl));
6465 /* We don't create any RTL for local variables. */
6466 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6467 return;
6469 /* We defer emission of local statics until the corresponding
6470 DECL_EXPR is expanded. But with constexpr its function might never
6471 be expanded, so go ahead and tell cgraph about the variable now. */
6472 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6473 && !var_in_maybe_constexpr_fn (decl))
6474 || DECL_VIRTUAL_P (decl));
6476 /* Defer template instantiations. */
6477 if (DECL_LANG_SPECIFIC (decl)
6478 && DECL_IMPLICIT_INSTANTIATION (decl))
6479 defer_p = 1;
6481 /* If we're not deferring, go ahead and assemble the variable. */
6482 if (!defer_p)
6483 rest_of_decl_compilation (decl, toplev, at_eof);
6486 /* walk_tree helper for wrap_temporary_cleanups, below. */
6488 static tree
6489 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6491 /* Stop at types or full-expression boundaries. */
6492 if (TYPE_P (*stmt_p)
6493 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6495 *walk_subtrees = 0;
6496 return NULL_TREE;
6499 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6501 tree guard = (tree)data;
6502 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6504 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6505 /* Tell honor_protect_cleanup_actions to handle this as a separate
6506 cleanup. */
6507 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6509 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6512 return NULL_TREE;
6515 /* We're initializing a local variable which has a cleanup GUARD. If there
6516 are any temporaries used in the initializer INIT of this variable, we
6517 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6518 variable will be cleaned up properly if one of them throws.
6520 Unfortunately, there's no way to express this properly in terms of
6521 nesting, as the regions for the temporaries overlap the region for the
6522 variable itself; if there are two temporaries, the variable needs to be
6523 the first thing destroyed if either of them throws. However, we only
6524 want to run the variable's cleanup if it actually got constructed. So
6525 we need to guard the temporary cleanups with the variable's cleanup if
6526 they are run on the normal path, but not if they are run on the
6527 exceptional path. We implement this by telling
6528 honor_protect_cleanup_actions to strip the variable cleanup from the
6529 exceptional path. */
6531 static void
6532 wrap_temporary_cleanups (tree init, tree guard)
6534 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6537 /* Generate code to initialize DECL (a local variable). */
6539 static void
6540 initialize_local_var (tree decl, tree init)
6542 tree type = TREE_TYPE (decl);
6543 tree cleanup;
6544 int already_used;
6546 gcc_assert (VAR_P (decl)
6547 || TREE_CODE (decl) == RESULT_DECL);
6548 gcc_assert (!TREE_STATIC (decl));
6550 if (DECL_SIZE (decl) == NULL_TREE)
6552 /* If we used it already as memory, it must stay in memory. */
6553 DECL_INITIAL (decl) = NULL_TREE;
6554 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6555 return;
6558 if (type == error_mark_node)
6559 return;
6561 /* Compute and store the initial value. */
6562 already_used = TREE_USED (decl) || TREE_USED (type);
6563 if (TREE_USED (type))
6564 DECL_READ_P (decl) = 1;
6566 /* Generate a cleanup, if necessary. */
6567 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6569 /* Perform the initialization. */
6570 if (init)
6572 tree rinit = (TREE_CODE (init) == INIT_EXPR
6573 ? TREE_OPERAND (init, 1) : NULL_TREE);
6574 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6576 /* Stick simple initializers in DECL_INITIAL so that
6577 -Wno-init-self works (c++/34772). */
6578 gcc_assert (TREE_OPERAND (init, 0) == decl);
6579 DECL_INITIAL (decl) = rinit;
6581 if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6583 STRIP_NOPS (rinit);
6584 if (rinit == decl)
6585 warning_at (DECL_SOURCE_LOCATION (decl),
6586 OPT_Winit_self,
6587 "reference %qD is initialized with itself", decl);
6590 else
6592 int saved_stmts_are_full_exprs_p;
6594 /* If we're only initializing a single object, guard the
6595 destructors of any temporaries used in its initializer with
6596 its destructor. This isn't right for arrays because each
6597 element initialization is a full-expression. */
6598 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6599 wrap_temporary_cleanups (init, cleanup);
6601 gcc_assert (building_stmt_list_p ());
6602 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6603 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6604 finish_expr_stmt (init);
6605 current_stmt_tree ()->stmts_are_full_exprs_p =
6606 saved_stmts_are_full_exprs_p;
6610 /* Set this to 0 so we can tell whether an aggregate which was
6611 initialized was ever used. Don't do this if it has a
6612 destructor, so we don't complain about the 'resource
6613 allocation is initialization' idiom. Now set
6614 attribute((unused)) on types so decls of that type will be
6615 marked used. (see TREE_USED, above.) */
6616 if (TYPE_NEEDS_CONSTRUCTING (type)
6617 && ! already_used
6618 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6619 && DECL_NAME (decl))
6620 TREE_USED (decl) = 0;
6621 else if (already_used)
6622 TREE_USED (decl) = 1;
6624 if (cleanup)
6625 finish_decl_cleanup (decl, cleanup);
6628 /* DECL is a VAR_DECL for a compiler-generated variable with static
6629 storage duration (like a virtual table) whose initializer is a
6630 compile-time constant. Initialize the variable and provide it to the
6631 back end. */
6633 void
6634 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6636 tree init;
6637 gcc_assert (DECL_ARTIFICIAL (decl));
6638 init = build_constructor (TREE_TYPE (decl), v);
6639 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6640 DECL_INITIAL (decl) = init;
6641 DECL_INITIALIZED_P (decl) = 1;
6642 determine_visibility (decl);
6643 layout_var_decl (decl);
6644 maybe_commonize_var (decl);
6645 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6648 /* INIT is the initializer for a variable, as represented by the
6649 parser. Returns true iff INIT is value-dependent. */
6651 static bool
6652 value_dependent_init_p (tree init)
6654 if (TREE_CODE (init) == TREE_LIST)
6655 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6656 return any_value_dependent_elements_p (init);
6657 else if (TREE_CODE (init) == CONSTRUCTOR)
6658 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6660 if (dependent_type_p (TREE_TYPE (init)))
6661 return true;
6663 vec<constructor_elt, va_gc> *elts;
6664 size_t nelts;
6665 size_t i;
6667 elts = CONSTRUCTOR_ELTS (init);
6668 nelts = vec_safe_length (elts);
6669 for (i = 0; i < nelts; ++i)
6670 if (value_dependent_init_p ((*elts)[i].value))
6671 return true;
6673 else
6674 /* It must be a simple expression, e.g., int i = 3; */
6675 return value_dependent_expression_p (init);
6677 return false;
6680 // Returns true if a DECL is VAR_DECL with the concept specifier.
6681 static inline bool
6682 is_concept_var (tree decl)
6684 return (VAR_P (decl)
6685 // Not all variables have DECL_LANG_SPECIFIC.
6686 && DECL_LANG_SPECIFIC (decl)
6687 && DECL_DECLARED_CONCEPT_P (decl));
6690 /* A helper function to be called via walk_tree. If any label exists
6691 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6693 static tree
6694 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6696 if (TYPE_P (*tp))
6697 *walk_subtrees = 0;
6698 if (TREE_CODE (*tp) == LABEL_DECL)
6699 cfun->has_forced_label_in_static = 1;
6700 return NULL_TREE;
6703 /* Finish processing of a declaration;
6704 install its line number and initial value.
6705 If the length of an array type is not known before,
6706 it must be determined now, from the initial value, or it is an error.
6708 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6709 true, then INIT is an integral constant expression.
6711 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6712 if the (init) syntax was used. */
6714 void
6715 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6716 tree asmspec_tree, int flags)
6718 tree type;
6719 vec<tree, va_gc> *cleanups = NULL;
6720 const char *asmspec = NULL;
6721 int was_readonly = 0;
6722 bool var_definition_p = false;
6723 tree auto_node;
6725 if (decl == error_mark_node)
6726 return;
6727 else if (! decl)
6729 if (init)
6730 error ("assignment (not initialization) in declaration");
6731 return;
6734 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6735 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6736 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6738 type = TREE_TYPE (decl);
6739 if (type == error_mark_node)
6740 return;
6742 /* Warn about register storage specifiers except when in GNU global
6743 or local register variable extension. */
6744 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6746 if (cxx_dialect >= cxx17)
6747 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6748 "ISO C++17 does not allow %<register%> storage "
6749 "class specifier");
6750 else
6751 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6752 "%<register%> storage class specifier used");
6755 /* If a name was specified, get the string. */
6756 if (at_namespace_scope_p ())
6757 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6758 if (asmspec_tree && asmspec_tree != error_mark_node)
6759 asmspec = TREE_STRING_POINTER (asmspec_tree);
6761 if (current_class_type
6762 && CP_DECL_CONTEXT (decl) == current_class_type
6763 && TYPE_BEING_DEFINED (current_class_type)
6764 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6765 && (DECL_INITIAL (decl) || init))
6766 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6768 if (TREE_CODE (decl) != FUNCTION_DECL
6769 && (auto_node = type_uses_auto (type)))
6771 tree d_init;
6772 if (init == NULL_TREE)
6774 if (DECL_LANG_SPECIFIC (decl)
6775 && DECL_TEMPLATE_INSTANTIATION (decl)
6776 && !DECL_TEMPLATE_INSTANTIATED (decl))
6778 /* init is null because we're deferring instantiating the
6779 initializer until we need it. Well, we need it now. */
6780 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6781 return;
6784 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6786 d_init = init;
6787 if (d_init)
6789 if (TREE_CODE (d_init) == TREE_LIST
6790 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6791 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6792 tf_warning_or_error);
6793 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6795 enum auto_deduction_context adc = adc_variable_type;
6796 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6797 adc = adc_decomp_type;
6798 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6799 tf_warning_or_error, adc,
6800 NULL_TREE, flags);
6801 if (type == error_mark_node)
6802 return;
6803 if (TREE_CODE (type) == FUNCTION_TYPE)
6805 error ("initializer for %<decltype(auto) %D%> has function type "
6806 "(did you forget the %<()%> ?)", decl);
6807 TREE_TYPE (decl) = error_mark_node;
6808 return;
6810 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6813 if (ensure_literal_type_for_constexpr_object (decl)
6814 == error_mark_node)
6816 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6817 return;
6820 if (VAR_P (decl)
6821 && DECL_CLASS_SCOPE_P (decl)
6822 && DECL_INITIALIZED_IN_CLASS_P (decl))
6823 check_static_variable_definition (decl, type);
6825 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6827 tree clone;
6828 if (init == ridpointers[(int)RID_DELETE])
6830 /* FIXME check this is 1st decl. */
6831 DECL_DELETED_FN (decl) = 1;
6832 DECL_DECLARED_INLINE_P (decl) = 1;
6833 DECL_INITIAL (decl) = error_mark_node;
6834 FOR_EACH_CLONE (clone, decl)
6836 DECL_DELETED_FN (clone) = 1;
6837 DECL_DECLARED_INLINE_P (clone) = 1;
6838 DECL_INITIAL (clone) = error_mark_node;
6840 init = NULL_TREE;
6842 else if (init == ridpointers[(int)RID_DEFAULT])
6844 if (defaultable_fn_check (decl))
6845 DECL_DEFAULTED_FN (decl) = 1;
6846 else
6847 DECL_INITIAL (decl) = NULL_TREE;
6851 if (init && VAR_P (decl))
6853 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6854 /* If DECL is a reference, then we want to know whether init is a
6855 reference constant; init_const_expr_p as passed tells us whether
6856 it's an rvalue constant. */
6857 if (TREE_CODE (type) == REFERENCE_TYPE)
6858 init_const_expr_p = potential_constant_expression (init);
6859 if (init_const_expr_p)
6861 /* Set these flags now for templates. We'll update the flags in
6862 store_init_value for instantiations. */
6863 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6864 if (decl_maybe_constant_var_p (decl)
6865 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
6866 && TREE_CODE (type) != REFERENCE_TYPE)
6867 TREE_CONSTANT (decl) = 1;
6871 if (processing_template_decl)
6873 bool type_dependent_p;
6875 /* Add this declaration to the statement-tree. */
6876 if (at_function_scope_p ())
6877 add_decl_expr (decl);
6879 type_dependent_p = dependent_type_p (type);
6881 if (check_for_bare_parameter_packs (init))
6883 init = NULL_TREE;
6884 DECL_INITIAL (decl) = NULL_TREE;
6887 /* Generally, initializers in templates are expanded when the
6888 template is instantiated. But, if DECL is a variable constant
6889 then it can be used in future constant expressions, so its value
6890 must be available. */
6892 bool dep_init = false;
6894 if (!VAR_P (decl) || type_dependent_p)
6895 /* We can't do anything if the decl has dependent type. */;
6896 else if (!init && is_concept_var (decl))
6897 error ("variable concept has no initializer");
6898 else if (init
6899 && init_const_expr_p
6900 && TREE_CODE (type) != REFERENCE_TYPE
6901 && decl_maybe_constant_var_p (decl)
6902 && !(dep_init = value_dependent_init_p (init)))
6904 /* This variable seems to be a non-dependent constant, so process
6905 its initializer. If check_initializer returns non-null the
6906 initialization wasn't constant after all. */
6907 tree init_code;
6908 cleanups = make_tree_vector ();
6909 init_code = check_initializer (decl, init, flags, &cleanups);
6910 if (init_code == NULL_TREE)
6911 init = NULL_TREE;
6912 release_tree_vector (cleanups);
6914 else if (!DECL_PRETTY_FUNCTION_P (decl))
6916 /* Deduce array size even if the initializer is dependent. */
6917 maybe_deduce_size_from_array_init (decl, init);
6918 /* And complain about multiple initializers. */
6919 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6920 && !MAYBE_CLASS_TYPE_P (type))
6921 init = build_x_compound_expr_from_list (init, ELK_INIT,
6922 tf_warning_or_error);
6925 if (init)
6926 DECL_INITIAL (decl) = init;
6927 if (dep_init)
6929 retrofit_lang_decl (decl);
6930 SET_DECL_DEPENDENT_INIT_P (decl, true);
6932 return;
6935 /* Just store non-static data member initializers for later. */
6936 if (init && TREE_CODE (decl) == FIELD_DECL)
6937 DECL_INITIAL (decl) = init;
6939 /* Take care of TYPE_DECLs up front. */
6940 if (TREE_CODE (decl) == TYPE_DECL)
6942 if (type != error_mark_node
6943 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6945 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6946 warning (0, "shadowing previous type declaration of %q#D", decl);
6947 set_identifier_type_value (DECL_NAME (decl), decl);
6950 /* If we have installed this as the canonical typedef for this
6951 type, and that type has not been defined yet, delay emitting
6952 the debug information for it, as we will emit it later. */
6953 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6954 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6955 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6957 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6958 at_eof);
6959 return;
6962 /* A reference will be modified here, as it is initialized. */
6963 if (! DECL_EXTERNAL (decl)
6964 && TREE_READONLY (decl)
6965 && TREE_CODE (type) == REFERENCE_TYPE)
6967 was_readonly = 1;
6968 TREE_READONLY (decl) = 0;
6971 if (VAR_P (decl))
6973 /* If this is a local variable that will need a mangled name,
6974 register it now. We must do this before processing the
6975 initializer for the variable, since the initialization might
6976 require a guard variable, and since the mangled name of the
6977 guard variable will depend on the mangled name of this
6978 variable. */
6979 if (DECL_FUNCTION_SCOPE_P (decl)
6980 && TREE_STATIC (decl)
6981 && !DECL_ARTIFICIAL (decl))
6983 push_local_name (decl);
6984 /* Normally has_forced_label_in_static is set during GIMPLE
6985 lowering, but [cd]tors are never actually compiled directly.
6986 We need to set this early so we can deal with the label
6987 address extension. */
6988 if ((DECL_CONSTRUCTOR_P (current_function_decl)
6989 || DECL_DESTRUCTOR_P (current_function_decl))
6990 && init)
6992 walk_tree (&init, notice_forced_label_r, NULL, NULL);
6993 add_local_decl (cfun, decl);
6995 /* And make sure it's in the symbol table for
6996 c_parse_final_cleanups to find. */
6997 varpool_node::get_create (decl);
7000 /* Convert the initializer to the type of DECL, if we have not
7001 already initialized DECL. */
7002 if (!DECL_INITIALIZED_P (decl)
7003 /* If !DECL_EXTERNAL then DECL is being defined. In the
7004 case of a static data member initialized inside the
7005 class-specifier, there can be an initializer even if DECL
7006 is *not* defined. */
7007 && (!DECL_EXTERNAL (decl) || init))
7009 cleanups = make_tree_vector ();
7010 init = check_initializer (decl, init, flags, &cleanups);
7012 /* Handle:
7014 [dcl.init]
7016 The memory occupied by any object of static storage
7017 duration is zero-initialized at program startup before
7018 any other initialization takes place.
7020 We cannot create an appropriate initializer until after
7021 the type of DECL is finalized. If DECL_INITIAL is set,
7022 then the DECL is statically initialized, and any
7023 necessary zero-initialization has already been performed. */
7024 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7025 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7026 /*nelts=*/NULL_TREE,
7027 /*static_storage_p=*/true);
7028 /* Remember that the initialization for this variable has
7029 taken place. */
7030 DECL_INITIALIZED_P (decl) = 1;
7031 /* This declaration is the definition of this variable,
7032 unless we are initializing a static data member within
7033 the class specifier. */
7034 if (!DECL_EXTERNAL (decl))
7035 var_definition_p = true;
7037 /* If the variable has an array type, lay out the type, even if
7038 there is no initializer. It is valid to index through the
7039 array, and we must get TYPE_ALIGN set correctly on the array
7040 type. */
7041 else if (TREE_CODE (type) == ARRAY_TYPE)
7042 layout_type (type);
7044 if (TREE_STATIC (decl)
7045 && !at_function_scope_p ()
7046 && current_function_decl == NULL)
7047 /* So decl is a global variable or a static member of a
7048 non local class. Record the types it uses
7049 so that we can decide later to emit debug info for them. */
7050 record_types_used_by_current_var_decl (decl);
7053 /* Add this declaration to the statement-tree. This needs to happen
7054 after the call to check_initializer so that the DECL_EXPR for a
7055 reference temp is added before the DECL_EXPR for the reference itself. */
7056 if (DECL_FUNCTION_SCOPE_P (decl))
7058 /* If we're building a variable sized type, and we might be
7059 reachable other than via the top of the current binding
7060 level, then create a new BIND_EXPR so that we deallocate
7061 the object at the right time. */
7062 if (VAR_P (decl)
7063 && DECL_SIZE (decl)
7064 && !TREE_CONSTANT (DECL_SIZE (decl))
7065 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7067 tree bind;
7068 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7069 TREE_SIDE_EFFECTS (bind) = 1;
7070 add_stmt (bind);
7071 BIND_EXPR_BODY (bind) = push_stmt_list ();
7073 add_decl_expr (decl);
7076 /* Let the middle end know about variables and functions -- but not
7077 static data members in uninstantiated class templates. */
7078 if (VAR_OR_FUNCTION_DECL_P (decl))
7080 if (VAR_P (decl))
7082 layout_var_decl (decl);
7083 maybe_commonize_var (decl);
7086 /* This needs to happen after the linkage is set. */
7087 determine_visibility (decl);
7089 if (var_definition_p && TREE_STATIC (decl))
7091 /* If a TREE_READONLY variable needs initialization
7092 at runtime, it is no longer readonly and we need to
7093 avoid MEM_READONLY_P being set on RTL created for it. */
7094 if (init)
7096 if (TREE_READONLY (decl))
7097 TREE_READONLY (decl) = 0;
7098 was_readonly = 0;
7100 else if (was_readonly)
7101 TREE_READONLY (decl) = 1;
7103 /* Likewise if it needs destruction. */
7104 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7105 TREE_READONLY (decl) = 0;
7108 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7110 /* Check for abstractness of the type. Notice that there is no
7111 need to strip array types here since the check for those types
7112 is already done within create_array_type_for_decl. */
7113 abstract_virtuals_error (decl, type);
7115 if (TREE_TYPE (decl) == error_mark_node)
7116 /* No initialization required. */
7118 else if (TREE_CODE (decl) == FUNCTION_DECL)
7120 if (init)
7122 if (init == ridpointers[(int)RID_DEFAULT])
7124 /* An out-of-class default definition is defined at
7125 the point where it is explicitly defaulted. */
7126 if (DECL_DELETED_FN (decl))
7127 maybe_explain_implicit_delete (decl);
7128 else if (DECL_INITIAL (decl) == error_mark_node)
7129 synthesize_method (decl);
7131 else
7132 error ("function %q#D is initialized like a variable", decl);
7134 /* else no initialization required. */
7136 else if (DECL_EXTERNAL (decl)
7137 && ! (DECL_LANG_SPECIFIC (decl)
7138 && DECL_NOT_REALLY_EXTERN (decl)))
7140 if (init)
7141 DECL_INITIAL (decl) = init;
7143 /* A variable definition. */
7144 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7145 /* Initialize the local variable. */
7146 initialize_local_var (decl, init);
7148 /* If a variable is defined, and then a subsequent
7149 definition with external linkage is encountered, we will
7150 get here twice for the same variable. We want to avoid
7151 calling expand_static_init more than once. For variables
7152 that are not static data members, we can call
7153 expand_static_init only when we actually process the
7154 initializer. It is not legal to redeclare a static data
7155 member, so this issue does not arise in that case. */
7156 else if (var_definition_p && TREE_STATIC (decl))
7157 expand_static_init (decl, init);
7160 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7161 reference, insert it in the statement-tree now. */
7162 if (cleanups)
7164 unsigned i; tree t;
7165 FOR_EACH_VEC_ELT (*cleanups, i, t)
7166 push_cleanup (decl, t, false);
7167 release_tree_vector (cleanups);
7170 if (was_readonly)
7171 TREE_READONLY (decl) = 1;
7173 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7176 /* For class TYPE return itself or some its bases that contain
7177 any direct non-static data members. Return error_mark_node if an
7178 error has been diagnosed. */
7180 static tree
7181 find_decomp_class_base (location_t loc, tree type, tree ret)
7183 bool member_seen = false;
7184 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7185 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7186 continue;
7187 else if (ret)
7188 return type;
7189 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7191 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7192 error_at (loc, "cannot decompose class type %qT because it has an "
7193 "anonymous struct member", type);
7194 else
7195 error_at (loc, "cannot decompose class type %qT because it has an "
7196 "anonymous union member", type);
7197 inform (DECL_SOURCE_LOCATION (field), "declared here");
7198 return error_mark_node;
7200 else if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
7202 error_at (loc, "cannot decompose non-public member %qD of %qT",
7203 field, type);
7204 inform (DECL_SOURCE_LOCATION (field),
7205 TREE_PRIVATE (field)
7206 ? G_("declared private here")
7207 : G_("declared protected here"));
7208 return error_mark_node;
7210 else
7211 member_seen = true;
7213 tree base_binfo, binfo;
7214 tree orig_ret = ret;
7215 int i;
7216 if (member_seen)
7217 ret = type;
7218 for (binfo = TYPE_BINFO (type), i = 0;
7219 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7221 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7222 if (t == error_mark_node)
7223 return error_mark_node;
7224 if (t != NULL_TREE)
7226 if (ret == type)
7228 error_at (loc, "cannot decompose class type %qT: both it and "
7229 "its base class %qT have non-static data members",
7230 type, t);
7231 return error_mark_node;
7233 else if (orig_ret != NULL_TREE)
7234 return t;
7235 else if (ret == t)
7236 /* OK, found the same base along another path. We'll complain
7237 in convert_to_base if it's ambiguous. */;
7238 else if (ret != NULL_TREE)
7240 error_at (loc, "cannot decompose class type %qT: its base "
7241 "classes %qT and %qT have non-static data "
7242 "members", type, ret, t);
7243 return error_mark_node;
7245 else
7246 ret = t;
7249 return ret;
7252 /* Return std::tuple_size<TYPE>::value. */
7254 static tree
7255 get_tuple_size (tree type)
7257 tree args = make_tree_vec (1);
7258 TREE_VEC_ELT (args, 0) = type;
7259 tree inst = lookup_template_class (get_identifier ("tuple_size"), args,
7260 /*in_decl*/NULL_TREE,
7261 /*context*/std_node,
7262 /*entering_scope*/false, tf_none);
7263 inst = complete_type (inst);
7264 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7265 return NULL_TREE;
7266 tree val = lookup_qualified_name (inst, get_identifier ("value"),
7267 /*type*/false, /*complain*/false);
7268 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7269 val = maybe_constant_value (val);
7270 if (TREE_CODE (val) == INTEGER_CST)
7271 return val;
7272 else
7273 return error_mark_node;
7276 /* Return std::tuple_element<I,TYPE>::type. */
7278 static tree
7279 get_tuple_element_type (tree type, unsigned i)
7281 tree args = make_tree_vec (2);
7282 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7283 TREE_VEC_ELT (args, 1) = type;
7284 tree inst = lookup_template_class (get_identifier ("tuple_element"), args,
7285 /*in_decl*/NULL_TREE,
7286 /*context*/std_node,
7287 /*entering_scope*/false,
7288 tf_warning_or_error);
7289 return make_typename_type (inst, get_identifier ("type"),
7290 none_type, tf_warning_or_error);
7293 /* Return e.get<i>() or get<i>(e). */
7295 static tree
7296 get_tuple_decomp_init (tree decl, unsigned i)
7298 tree get_id = get_identifier ("get");
7299 tree targs = make_tree_vec (1);
7300 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7302 tree etype = TREE_TYPE (decl);
7303 tree e = convert_from_reference (decl);
7305 /* [The id-expression] e is an lvalue if the type of the entity e is an
7306 lvalue reference and an xvalue otherwise. */
7307 if (TREE_CODE (etype) != REFERENCE_TYPE
7308 || TYPE_REF_IS_RVALUE (etype))
7309 e = move (e);
7311 tree fns = lookup_qualified_name (TREE_TYPE (e), get_id,
7312 /*type*/false, /*complain*/false);
7313 if (fns != error_mark_node)
7315 fns = lookup_template_function (fns, targs);
7316 return build_new_method_call (e, fns, /*args*/NULL,
7317 /*path*/NULL_TREE, LOOKUP_NORMAL,
7318 /*fn_p*/NULL, tf_warning_or_error);
7320 else
7322 vec<tree,va_gc> *args = make_tree_vector_single (e);
7323 fns = lookup_template_function (get_id, targs);
7324 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7325 return finish_call_expr (fns, &args, /*novirt*/false,
7326 /*koenig*/true, tf_warning_or_error);
7330 /* It's impossible to recover the decltype of a tuple decomposition variable
7331 based on the actual type of the variable, so store it in a hash table. */
7333 static GTY((cache)) tree_cache_map *decomp_type_table;
7334 static void
7335 store_decomp_type (tree v, tree t)
7337 if (!decomp_type_table)
7338 decomp_type_table = tree_cache_map::create_ggc (13);
7339 decomp_type_table->put (v, t);
7342 tree
7343 lookup_decomp_type (tree v)
7345 return *decomp_type_table->get (v);
7348 /* Mangle a decomposition declaration if needed. Arguments like
7349 in cp_finish_decomp. */
7351 void
7352 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7354 if (!processing_template_decl
7355 && !error_operand_p (decl)
7356 && DECL_NAMESPACE_SCOPE_P (decl))
7358 auto_vec<tree, 16> v;
7359 v.safe_grow (count);
7360 tree d = first;
7361 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7362 v[count - i - 1] = d;
7363 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7367 /* Finish a decomposition declaration. DECL is the underlying declaration
7368 "e", FIRST is the head of a chain of decls for the individual identifiers
7369 chained through DECL_CHAIN in reverse order and COUNT is the number of
7370 those decls. */
7372 void
7373 cp_finish_decomp (tree decl, tree first, unsigned int count)
7375 if (error_operand_p (decl))
7377 error_out:
7378 while (count--)
7380 TREE_TYPE (first) = error_mark_node;
7381 if (DECL_HAS_VALUE_EXPR_P (first))
7383 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7384 DECL_HAS_VALUE_EXPR_P (first) = 0;
7386 first = DECL_CHAIN (first);
7388 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7389 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7390 return;
7393 location_t loc = DECL_SOURCE_LOCATION (decl);
7394 if (type_dependent_expression_p (decl)
7395 /* This happens for range for when not in templates.
7396 Still add the DECL_VALUE_EXPRs for later processing. */
7397 || (!processing_template_decl
7398 && type_uses_auto (TREE_TYPE (decl))))
7400 for (unsigned int i = 0; i < count; i++)
7402 if (!DECL_HAS_VALUE_EXPR_P (first))
7404 tree v = build_nt (ARRAY_REF, decl,
7405 size_int (count - i - 1),
7406 NULL_TREE, NULL_TREE);
7407 SET_DECL_VALUE_EXPR (first, v);
7408 DECL_HAS_VALUE_EXPR_P (first) = 1;
7410 if (processing_template_decl)
7411 fit_decomposition_lang_decl (first, decl);
7412 first = DECL_CHAIN (first);
7414 return;
7417 auto_vec<tree, 16> v;
7418 v.safe_grow (count);
7419 tree d = first;
7420 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7422 v[count - i - 1] = d;
7423 fit_decomposition_lang_decl (d, decl);
7426 tree type = TREE_TYPE (decl);
7427 tree dexp = decl;
7429 if (TREE_CODE (type) == REFERENCE_TYPE)
7431 dexp = convert_from_reference (dexp);
7432 type = complete_type (TREE_TYPE (type));
7433 if (type == error_mark_node)
7434 goto error_out;
7437 tree eltype = NULL_TREE;
7438 unsigned HOST_WIDE_INT eltscnt = 0;
7439 if (TREE_CODE (type) == ARRAY_TYPE)
7441 tree nelts;
7442 nelts = array_type_nelts_top (type);
7443 if (nelts == error_mark_node)
7444 goto error_out;
7445 if (!tree_fits_uhwi_p (nelts))
7447 error_at (loc, "cannot decompose variable length array %qT", type);
7448 goto error_out;
7450 eltscnt = tree_to_uhwi (nelts);
7451 if (count != eltscnt)
7453 cnt_mismatch:
7454 if (count > eltscnt)
7455 error_n (loc, count,
7456 "%u name provided for structured binding",
7457 "%u names provided for structured binding", count);
7458 else
7459 error_n (loc, count,
7460 "only %u name provided for structured binding",
7461 "only %u names provided for structured binding", count);
7462 /* Some languages have special plural rules even for large values,
7463 but it is periodic with period of 10, 100, 1000 etc. */
7464 inform_n (loc, eltscnt > INT_MAX
7465 ? (eltscnt % 1000000) + 1000000 : eltscnt,
7466 "while %qT decomposes into %wu element",
7467 "while %qT decomposes into %wu elements",
7468 type, eltscnt);
7469 goto error_out;
7471 eltype = TREE_TYPE (type);
7472 for (unsigned int i = 0; i < count; i++)
7474 TREE_TYPE (v[i]) = eltype;
7475 layout_decl (v[i], 0);
7476 if (processing_template_decl)
7477 continue;
7478 tree t = unshare_expr (dexp);
7479 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7480 eltype, t, size_int (i), NULL_TREE,
7481 NULL_TREE);
7482 SET_DECL_VALUE_EXPR (v[i], t);
7483 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7486 /* 2 GNU extensions. */
7487 else if (TREE_CODE (type) == COMPLEX_TYPE)
7489 eltscnt = 2;
7490 if (count != eltscnt)
7491 goto cnt_mismatch;
7492 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7493 for (unsigned int i = 0; i < count; i++)
7495 TREE_TYPE (v[i]) = eltype;
7496 layout_decl (v[i], 0);
7497 if (processing_template_decl)
7498 continue;
7499 tree t = unshare_expr (dexp);
7500 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7501 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7503 SET_DECL_VALUE_EXPR (v[i], t);
7504 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7507 else if (TREE_CODE (type) == VECTOR_TYPE)
7509 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7511 error_at (loc, "cannot decompose variable length vector %qT", type);
7512 goto error_out;
7514 if (count != eltscnt)
7515 goto cnt_mismatch;
7516 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7517 for (unsigned int i = 0; i < count; i++)
7519 TREE_TYPE (v[i]) = eltype;
7520 layout_decl (v[i], 0);
7521 if (processing_template_decl)
7522 continue;
7523 tree t = unshare_expr (dexp);
7524 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7525 &t, size_int (i));
7526 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7527 eltype, t, size_int (i), NULL_TREE,
7528 NULL_TREE);
7529 SET_DECL_VALUE_EXPR (v[i], t);
7530 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7533 else if (tree tsize = get_tuple_size (type))
7535 if (tsize == error_mark_node)
7537 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7538 "constant expression", type);
7539 goto error_out;
7541 if (!tree_fits_uhwi_p (tsize))
7543 error_n (loc, count,
7544 "%u name provided for structured binding",
7545 "%u names provided for structured binding", count);
7546 inform (loc, "while %qT decomposes into %E elements",
7547 type, tsize);
7548 goto error_out;
7550 eltscnt = tree_to_uhwi (tsize);
7551 if (count != eltscnt)
7552 goto cnt_mismatch;
7553 int save_read = DECL_READ_P (decl);
7554 for (unsigned i = 0; i < count; ++i)
7556 location_t sloc = input_location;
7557 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7559 input_location = dloc;
7560 tree init = get_tuple_decomp_init (decl, i);
7561 tree eltype = (init == error_mark_node ? error_mark_node
7562 : get_tuple_element_type (type, i));
7563 input_location = sloc;
7565 if (init == error_mark_node || eltype == error_mark_node)
7567 inform (dloc, "in initialization of structured binding "
7568 "variable %qD", v[i]);
7569 goto error_out;
7571 /* Save the decltype away before reference collapse. */
7572 store_decomp_type (v[i], eltype);
7573 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7574 TREE_TYPE (v[i]) = eltype;
7575 layout_decl (v[i], 0);
7576 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7578 /* In this case the names are variables, not just proxies. */
7579 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7580 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7582 if (!processing_template_decl)
7583 cp_finish_decl (v[i], init, /*constexpr*/false,
7584 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7586 /* Ignore reads from the underlying decl performed during initialization
7587 of the individual variables. If those will be read, we'll mark
7588 the underlying decl as read at that point. */
7589 DECL_READ_P (decl) = save_read;
7591 else if (TREE_CODE (type) == UNION_TYPE)
7593 error_at (loc, "cannot decompose union type %qT", type);
7594 goto error_out;
7596 else if (!CLASS_TYPE_P (type))
7598 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7599 goto error_out;
7601 else if (LAMBDA_TYPE_P (type))
7603 error_at (loc, "cannot decompose lambda closure type %qT", type);
7604 goto error_out;
7606 else
7608 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7609 if (btype == error_mark_node)
7610 goto error_out;
7611 else if (btype == NULL_TREE)
7613 error_at (loc, "cannot decompose class type %qT without non-static "
7614 "data members", type);
7615 goto error_out;
7617 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7618 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7619 continue;
7620 else
7621 eltscnt++;
7622 if (count != eltscnt)
7623 goto cnt_mismatch;
7624 tree t = dexp;
7625 if (type != btype)
7627 t = convert_to_base (t, btype, /*check_access*/true,
7628 /*nonnull*/false, tf_warning_or_error);
7629 type = btype;
7631 unsigned int i = 0;
7632 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7633 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7634 continue;
7635 else
7637 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7638 NULL_TREE);
7639 if (REFERENCE_REF_P (tt))
7640 tt = TREE_OPERAND (tt, 0);
7641 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7642 layout_decl (v[i], 0);
7643 if (!processing_template_decl)
7645 SET_DECL_VALUE_EXPR (v[i], tt);
7646 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7648 i++;
7651 if (processing_template_decl)
7653 for (unsigned int i = 0; i < count; i++)
7654 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7656 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7657 NULL_TREE, NULL_TREE);
7658 SET_DECL_VALUE_EXPR (v[i], a);
7659 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7664 /* Returns a declaration for a VAR_DECL as if:
7666 extern "C" TYPE NAME;
7668 had been seen. Used to create compiler-generated global
7669 variables. */
7671 static tree
7672 declare_global_var (tree name, tree type)
7674 tree decl;
7676 push_to_top_level ();
7677 decl = build_decl (input_location, VAR_DECL, name, type);
7678 TREE_PUBLIC (decl) = 1;
7679 DECL_EXTERNAL (decl) = 1;
7680 DECL_ARTIFICIAL (decl) = 1;
7681 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7682 /* If the user has explicitly declared this variable (perhaps
7683 because the code we are compiling is part of a low-level runtime
7684 library), then it is possible that our declaration will be merged
7685 with theirs by pushdecl. */
7686 decl = pushdecl (decl);
7687 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7688 pop_from_top_level ();
7690 return decl;
7693 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7694 if "__cxa_atexit" is not being used) corresponding to the function
7695 to be called when the program exits. */
7697 static tree
7698 get_atexit_fn_ptr_type (void)
7700 tree fn_type;
7702 if (!atexit_fn_ptr_type_node)
7704 tree arg_type;
7705 if (flag_use_cxa_atexit
7706 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7707 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7708 arg_type = ptr_type_node;
7709 else
7710 /* The parameter to "atexit" is "void (*)(void)". */
7711 arg_type = NULL_TREE;
7713 fn_type = build_function_type_list (void_type_node,
7714 arg_type, NULL_TREE);
7715 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7718 return atexit_fn_ptr_type_node;
7721 /* Returns a pointer to the `atexit' function. Note that if
7722 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7723 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7725 static tree
7726 get_atexit_node (void)
7728 tree atexit_fndecl;
7729 tree fn_type;
7730 tree fn_ptr_type;
7731 const char *name;
7732 bool use_aeabi_atexit;
7734 if (atexit_node)
7735 return atexit_node;
7737 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7739 /* The declaration for `__cxa_atexit' is:
7741 int __cxa_atexit (void (*)(void *), void *, void *)
7743 We build up the argument types and then the function type
7744 itself. */
7745 tree argtype0, argtype1, argtype2;
7747 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7748 /* First, build the pointer-to-function type for the first
7749 argument. */
7750 fn_ptr_type = get_atexit_fn_ptr_type ();
7751 /* Then, build the rest of the argument types. */
7752 argtype2 = ptr_type_node;
7753 if (use_aeabi_atexit)
7755 argtype1 = fn_ptr_type;
7756 argtype0 = ptr_type_node;
7758 else
7760 argtype1 = ptr_type_node;
7761 argtype0 = fn_ptr_type;
7763 /* And the final __cxa_atexit type. */
7764 fn_type = build_function_type_list (integer_type_node,
7765 argtype0, argtype1, argtype2,
7766 NULL_TREE);
7767 if (use_aeabi_atexit)
7768 name = "__aeabi_atexit";
7769 else
7770 name = "__cxa_atexit";
7772 else
7774 /* The declaration for `atexit' is:
7776 int atexit (void (*)());
7778 We build up the argument types and then the function type
7779 itself. */
7780 fn_ptr_type = get_atexit_fn_ptr_type ();
7781 /* Build the final atexit type. */
7782 fn_type = build_function_type_list (integer_type_node,
7783 fn_ptr_type, NULL_TREE);
7784 name = "atexit";
7787 /* Now, build the function declaration. */
7788 push_lang_context (lang_name_c);
7789 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7790 mark_used (atexit_fndecl);
7791 pop_lang_context ();
7792 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7794 return atexit_node;
7797 /* Like get_atexit_node, but for thread-local cleanups. */
7799 static tree
7800 get_thread_atexit_node (void)
7802 /* The declaration for `__cxa_thread_atexit' is:
7804 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
7805 tree fn_type = build_function_type_list (integer_type_node,
7806 get_atexit_fn_ptr_type (),
7807 ptr_type_node, ptr_type_node,
7808 NULL_TREE);
7810 /* Now, build the function declaration. */
7811 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
7812 ECF_LEAF | ECF_NOTHROW);
7813 return decay_conversion (atexit_fndecl, tf_warning_or_error);
7816 /* Returns the __dso_handle VAR_DECL. */
7818 static tree
7819 get_dso_handle_node (void)
7821 if (dso_handle_node)
7822 return dso_handle_node;
7824 /* Declare the variable. */
7825 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
7826 ptr_type_node);
7828 #ifdef HAVE_GAS_HIDDEN
7829 if (dso_handle_node != error_mark_node)
7831 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
7832 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
7834 #endif
7836 return dso_handle_node;
7839 /* Begin a new function with internal linkage whose job will be simply
7840 to destroy some particular variable. */
7842 static GTY(()) int start_cleanup_cnt;
7844 static tree
7845 start_cleanup_fn (void)
7847 char name[32];
7848 tree fntype;
7849 tree fndecl;
7850 bool use_cxa_atexit = flag_use_cxa_atexit
7851 && !targetm.cxx.use_atexit_for_cxa_atexit ();
7853 push_to_top_level ();
7855 /* No need to mangle this. */
7856 push_lang_context (lang_name_c);
7858 /* Build the name of the function. */
7859 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
7860 /* Build the function declaration. */
7861 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
7862 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
7863 /* It's a function with internal linkage, generated by the
7864 compiler. */
7865 TREE_PUBLIC (fndecl) = 0;
7866 DECL_ARTIFICIAL (fndecl) = 1;
7867 /* Make the function `inline' so that it is only emitted if it is
7868 actually needed. It is unlikely that it will be inlined, since
7869 it is only called via a function pointer, but we avoid unnecessary
7870 emissions this way. */
7871 DECL_DECLARED_INLINE_P (fndecl) = 1;
7872 DECL_INTERFACE_KNOWN (fndecl) = 1;
7873 /* Build the parameter. */
7874 if (use_cxa_atexit)
7876 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
7877 TREE_USED (parmdecl) = 1;
7878 DECL_READ_P (parmdecl) = 1;
7879 DECL_ARGUMENTS (fndecl) = parmdecl;
7882 pushdecl (fndecl);
7883 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7885 pop_lang_context ();
7887 return current_function_decl;
7890 /* Finish the cleanup function begun by start_cleanup_fn. */
7892 static void
7893 end_cleanup_fn (void)
7895 expand_or_defer_fn (finish_function (/*inline_p=*/false));
7897 pop_from_top_level ();
7900 /* Generate code to handle the destruction of DECL, an object with
7901 static storage duration. */
7903 tree
7904 register_dtor_fn (tree decl)
7906 tree cleanup;
7907 tree addr;
7908 tree compound_stmt;
7909 tree fcall;
7910 tree type;
7911 bool ob_parm, dso_parm, use_dtor;
7912 tree arg0, arg1, arg2;
7913 tree atex_node;
7915 type = TREE_TYPE (decl);
7916 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7917 return void_node;
7919 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7920 "__aeabi_atexit"), and DECL is a class object, we can just pass the
7921 destructor to "__cxa_atexit"; we don't have to build a temporary
7922 function to do the cleanup. */
7923 dso_parm = (flag_use_cxa_atexit
7924 && !targetm.cxx.use_atexit_for_cxa_atexit ());
7925 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
7926 use_dtor = ob_parm && CLASS_TYPE_P (type);
7927 if (use_dtor)
7929 cleanup = get_class_binding (type, complete_dtor_identifier);
7931 /* Make sure it is accessible. */
7932 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7933 tf_warning_or_error);
7935 else
7937 /* Call build_cleanup before we enter the anonymous function so
7938 that any access checks will be done relative to the current
7939 scope, rather than the scope of the anonymous function. */
7940 build_cleanup (decl);
7942 /* Now start the function. */
7943 cleanup = start_cleanup_fn ();
7945 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
7946 to the original function, rather than the anonymous one. That
7947 will make the back end think that nested functions are in use,
7948 which causes confusion. */
7949 push_deferring_access_checks (dk_no_check);
7950 fcall = build_cleanup (decl);
7951 pop_deferring_access_checks ();
7953 /* Create the body of the anonymous function. */
7954 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7955 finish_expr_stmt (fcall);
7956 finish_compound_stmt (compound_stmt);
7957 end_cleanup_fn ();
7960 /* Call atexit with the cleanup function. */
7961 mark_used (cleanup);
7962 cleanup = build_address (cleanup);
7964 if (CP_DECL_THREAD_LOCAL_P (decl))
7965 atex_node = get_thread_atexit_node ();
7966 else
7967 atex_node = get_atexit_node ();
7969 if (use_dtor)
7971 /* We must convert CLEANUP to the type that "__cxa_atexit"
7972 expects. */
7973 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
7974 /* "__cxa_atexit" will pass the address of DECL to the
7975 cleanup function. */
7976 mark_used (decl);
7977 addr = build_address (decl);
7978 /* The declared type of the parameter to "__cxa_atexit" is
7979 "void *". For plain "T*", we could just let the
7980 machinery in cp_build_function_call convert it -- but if the
7981 type is "cv-qualified T *", then we need to convert it
7982 before passing it in, to avoid spurious errors. */
7983 addr = build_nop (ptr_type_node, addr);
7985 else
7986 /* Since the cleanup functions we build ignore the address
7987 they're given, there's no reason to pass the actual address
7988 in, and, in general, it's cheaper to pass NULL than any
7989 other value. */
7990 addr = null_pointer_node;
7992 if (dso_parm)
7993 arg2 = cp_build_addr_expr (get_dso_handle_node (),
7994 tf_warning_or_error);
7995 else if (ob_parm)
7996 /* Just pass NULL to the dso handle parm if we don't actually
7997 have a DSO handle on this target. */
7998 arg2 = null_pointer_node;
7999 else
8000 arg2 = NULL_TREE;
8002 if (ob_parm)
8004 if (!CP_DECL_THREAD_LOCAL_P (decl)
8005 && targetm.cxx.use_aeabi_atexit ())
8007 arg1 = cleanup;
8008 arg0 = addr;
8010 else
8012 arg1 = addr;
8013 arg0 = cleanup;
8016 else
8018 arg0 = cleanup;
8019 arg1 = NULL_TREE;
8021 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8022 arg0, arg1, arg2, NULL_TREE);
8025 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8026 is its initializer. Generate code to handle the construction
8027 and destruction of DECL. */
8029 static void
8030 expand_static_init (tree decl, tree init)
8032 gcc_assert (VAR_P (decl));
8033 gcc_assert (TREE_STATIC (decl));
8035 /* Some variables require no dynamic initialization. */
8036 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8038 /* Make sure the destructor is callable. */
8039 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8040 if (!init)
8041 return;
8044 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8045 && !DECL_FUNCTION_SCOPE_P (decl))
8047 if (init)
8048 error ("non-local variable %qD declared %<__thread%> "
8049 "needs dynamic initialization", decl);
8050 else
8051 error ("non-local variable %qD declared %<__thread%> "
8052 "has a non-trivial destructor", decl);
8053 static bool informed;
8054 if (!informed)
8056 inform (DECL_SOURCE_LOCATION (decl),
8057 "C++11 %<thread_local%> allows dynamic initialization "
8058 "and destruction");
8059 informed = true;
8061 return;
8064 if (DECL_FUNCTION_SCOPE_P (decl))
8066 /* Emit code to perform this initialization but once. */
8067 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8068 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8069 tree guard, guard_addr;
8070 tree flag, begin;
8071 /* We don't need thread-safety code for thread-local vars. */
8072 bool thread_guard = (flag_threadsafe_statics
8073 && !CP_DECL_THREAD_LOCAL_P (decl));
8075 /* Emit code to perform this initialization but once. This code
8076 looks like:
8078 static <type> guard;
8079 if (!__atomic_load (guard.first_byte)) {
8080 if (__cxa_guard_acquire (&guard)) {
8081 bool flag = false;
8082 try {
8083 // Do initialization.
8084 flag = true; __cxa_guard_release (&guard);
8085 // Register variable for destruction at end of program.
8086 } catch {
8087 if (!flag) __cxa_guard_abort (&guard);
8092 Note that the `flag' variable is only set to 1 *after* the
8093 initialization is complete. This ensures that an exception,
8094 thrown during the construction, will cause the variable to
8095 reinitialized when we pass through this code again, as per:
8097 [stmt.dcl]
8099 If the initialization exits by throwing an exception, the
8100 initialization is not complete, so it will be tried again
8101 the next time control enters the declaration.
8103 This process should be thread-safe, too; multiple threads
8104 should not be able to initialize the variable more than
8105 once. */
8107 /* Create the guard variable. */
8108 guard = get_guard (decl);
8110 /* Begin the conditional initialization. */
8111 if_stmt = begin_if_stmt ();
8113 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8114 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8116 if (thread_guard)
8118 tree vfntype = NULL_TREE;
8119 tree acquire_name, release_name, abort_name;
8120 tree acquire_fn, release_fn, abort_fn;
8121 guard_addr = build_address (guard);
8123 acquire_name = get_identifier ("__cxa_guard_acquire");
8124 release_name = get_identifier ("__cxa_guard_release");
8125 abort_name = get_identifier ("__cxa_guard_abort");
8126 acquire_fn = get_global_binding (acquire_name);
8127 release_fn = get_global_binding (release_name);
8128 abort_fn = get_global_binding (abort_name);
8129 if (!acquire_fn)
8130 acquire_fn = push_library_fn
8131 (acquire_name, build_function_type_list (integer_type_node,
8132 TREE_TYPE (guard_addr),
8133 NULL_TREE),
8134 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8135 if (!release_fn || !abort_fn)
8136 vfntype = build_function_type_list (void_type_node,
8137 TREE_TYPE (guard_addr),
8138 NULL_TREE);
8139 if (!release_fn)
8140 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8141 ECF_NOTHROW | ECF_LEAF);
8142 if (!abort_fn)
8143 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8144 ECF_NOTHROW | ECF_LEAF);
8146 inner_if_stmt = begin_if_stmt ();
8147 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8148 inner_if_stmt);
8150 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8151 begin = get_target_expr (boolean_false_node);
8152 flag = TARGET_EXPR_SLOT (begin);
8154 TARGET_EXPR_CLEANUP (begin)
8155 = build3 (COND_EXPR, void_type_node, flag,
8156 void_node,
8157 build_call_n (abort_fn, 1, guard_addr));
8158 CLEANUP_EH_ONLY (begin) = 1;
8160 /* Do the initialization itself. */
8161 init = add_stmt_to_compound (begin, init);
8162 init = add_stmt_to_compound
8163 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8164 init = add_stmt_to_compound
8165 (init, build_call_n (release_fn, 1, guard_addr));
8167 else
8168 init = add_stmt_to_compound (init, set_guard (guard));
8170 /* Use atexit to register a function for destroying this static
8171 variable. */
8172 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8174 finish_expr_stmt (init);
8176 if (thread_guard)
8178 finish_compound_stmt (inner_then_clause);
8179 finish_then_clause (inner_if_stmt);
8180 finish_if_stmt (inner_if_stmt);
8183 finish_compound_stmt (then_clause);
8184 finish_then_clause (if_stmt);
8185 finish_if_stmt (if_stmt);
8187 else if (CP_DECL_THREAD_LOCAL_P (decl))
8188 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8189 else
8190 static_aggregates = tree_cons (init, decl, static_aggregates);
8194 /* Make TYPE a complete type based on INITIAL_VALUE.
8195 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8196 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8197 3 if the initializer list is empty (in pedantic mode). */
8200 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8202 int failure;
8203 tree type, elt_type;
8205 /* Don't get confused by a CONSTRUCTOR for some other type. */
8206 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8207 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8208 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8209 return 1;
8211 if (initial_value)
8213 unsigned HOST_WIDE_INT i;
8214 tree value;
8216 /* An array of character type can be initialized from a
8217 brace-enclosed string constant.
8219 FIXME: this code is duplicated from reshape_init. Probably
8220 we should just call reshape_init here? */
8221 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8222 && TREE_CODE (initial_value) == CONSTRUCTOR
8223 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8225 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8226 tree value = (*v)[0].value;
8228 if (TREE_CODE (value) == STRING_CST
8229 && v->length () == 1)
8230 initial_value = value;
8233 /* If any of the elements are parameter packs, we can't actually
8234 complete this type now because the array size is dependent. */
8235 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8237 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8238 i, value)
8240 if (PACK_EXPANSION_P (value))
8241 return 0;
8246 failure = complete_array_type (ptype, initial_value, do_default);
8248 /* We can create the array before the element type is complete, which
8249 means that we didn't have these two bits set in the original type
8250 either. In completing the type, we are expected to propagate these
8251 bits. See also complete_type which does the same thing for arrays
8252 of fixed size. */
8253 type = *ptype;
8254 if (TYPE_DOMAIN (type))
8256 elt_type = TREE_TYPE (type);
8257 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8258 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8259 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8262 return failure;
8265 /* As above, but either give an error or reject zero-size arrays, depending
8266 on COMPLAIN. */
8269 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8270 bool do_default, tsubst_flags_t complain)
8272 int failure;
8273 bool sfinae = !(complain & tf_error);
8274 /* In SFINAE context we can't be lenient about zero-size arrays. */
8275 if (sfinae)
8276 ++pedantic;
8277 failure = cp_complete_array_type (ptype, initial_value, do_default);
8278 if (sfinae)
8279 --pedantic;
8280 if (failure)
8282 if (sfinae)
8283 /* Not an error. */;
8284 else if (failure == 1)
8285 error ("initializer fails to determine size of %qT", *ptype);
8286 else if (failure == 2)
8288 if (do_default)
8289 error ("array size missing in %qT", *ptype);
8291 else if (failure == 3)
8292 error ("zero-size array %qT", *ptype);
8293 *ptype = error_mark_node;
8295 return failure;
8298 /* Return zero if something is declared to be a member of type
8299 CTYPE when in the context of CUR_TYPE. STRING is the error
8300 message to print in that case. Otherwise, quietly return 1. */
8302 static int
8303 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8305 if (ctype && ctype != cur_type)
8307 if (flags == DTOR_FLAG)
8308 error ("destructor for alien class %qT cannot be a member", ctype);
8309 else
8310 error ("constructor for alien class %qT cannot be a member", ctype);
8311 return 0;
8313 return 1;
8316 /* Subroutine of `grokdeclarator'. */
8318 /* Generate errors possibly applicable for a given set of specifiers.
8319 This is for ARM $7.1.2. */
8321 static void
8322 bad_specifiers (tree object,
8323 enum bad_spec_place type,
8324 int virtualp,
8325 int quals,
8326 int inlinep,
8327 int friendp,
8328 int raises)
8330 switch (type)
8332 case BSP_VAR:
8333 if (virtualp)
8334 error ("%qD declared as a %<virtual%> variable", object);
8335 if (quals)
8336 error ("%<const%> and %<volatile%> function specifiers on "
8337 "%qD invalid in variable declaration", object);
8338 break;
8339 case BSP_PARM:
8340 if (virtualp)
8341 error ("%qD declared as a %<virtual%> parameter", object);
8342 if (inlinep)
8343 error ("%qD declared as an %<inline%> parameter", object);
8344 if (quals)
8345 error ("%<const%> and %<volatile%> function specifiers on "
8346 "%qD invalid in parameter declaration", object);
8347 break;
8348 case BSP_TYPE:
8349 if (virtualp)
8350 error ("%qD declared as a %<virtual%> type", object);
8351 if (inlinep)
8352 error ("%qD declared as an %<inline%> type", object);
8353 if (quals)
8354 error ("%<const%> and %<volatile%> function specifiers on "
8355 "%qD invalid in type declaration", object);
8356 break;
8357 case BSP_FIELD:
8358 if (virtualp)
8359 error ("%qD declared as a %<virtual%> field", object);
8360 if (inlinep)
8361 error ("%qD declared as an %<inline%> field", object);
8362 if (quals)
8363 error ("%<const%> and %<volatile%> function specifiers on "
8364 "%qD invalid in field declaration", object);
8365 break;
8366 default:
8367 gcc_unreachable();
8369 if (friendp)
8370 error ("%q+D declared as a friend", object);
8371 if (raises
8372 && !flag_noexcept_type
8373 && (TREE_CODE (object) == TYPE_DECL
8374 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8375 && !TYPE_REFFN_P (TREE_TYPE (object))
8376 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8377 error ("%q+D declared with an exception specification", object);
8380 /* DECL is a member function or static data member and is presently
8381 being defined. Check that the definition is taking place in a
8382 valid namespace. */
8384 static void
8385 check_class_member_definition_namespace (tree decl)
8387 /* These checks only apply to member functions and static data
8388 members. */
8389 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8390 /* We check for problems with specializations in pt.c in
8391 check_specialization_namespace, where we can issue better
8392 diagnostics. */
8393 if (processing_specialization)
8394 return;
8395 /* We check this in check_explicit_instantiation_namespace. */
8396 if (processing_explicit_instantiation)
8397 return;
8398 /* [class.mfct]
8400 A member function definition that appears outside of the
8401 class definition shall appear in a namespace scope enclosing
8402 the class definition.
8404 [class.static.data]
8406 The definition for a static data member shall appear in a
8407 namespace scope enclosing the member's class definition. */
8408 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8409 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8410 decl, DECL_CONTEXT (decl));
8413 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8414 METHOD_TYPE for a non-static member function; QUALS are the
8415 cv-qualifiers that apply to the function. */
8417 tree
8418 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8420 tree this_type;
8421 tree qual_type;
8422 tree parm;
8423 cp_cv_quals this_quals;
8425 if (CLASS_TYPE_P (type))
8427 this_type
8428 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8429 this_type = build_pointer_type (this_type);
8431 else
8432 this_type = type_of_this_parm (type);
8433 /* The `this' parameter is implicitly `const'; it cannot be
8434 assigned to. */
8435 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8436 qual_type = cp_build_qualified_type (this_type, this_quals);
8437 parm = build_artificial_parm (fn, this_identifier, qual_type);
8438 cp_apply_type_quals_to_decl (this_quals, parm);
8439 return parm;
8442 /* DECL is a static member function. Complain if it was declared
8443 with function-cv-quals. */
8445 static void
8446 check_static_quals (tree decl, cp_cv_quals quals)
8448 if (quals != TYPE_UNQUALIFIED)
8449 error ("static member function %q#D declared with type qualifiers",
8450 decl);
8453 // Check that FN takes no arguments and returns bool.
8454 static void
8455 check_concept_fn (tree fn)
8457 // A constraint is nullary.
8458 if (DECL_ARGUMENTS (fn))
8459 error ("concept %q#D declared with function parameters", fn);
8461 // The declared return type of the concept shall be bool, and
8462 // it shall not be deduced from it definition.
8463 tree type = TREE_TYPE (TREE_TYPE (fn));
8464 if (is_auto (type))
8465 error ("concept %q#D declared with a deduced return type", fn);
8466 else if (type != boolean_type_node)
8467 error ("concept %q#D with non-%<bool%> return type %qT", fn, type);
8470 /* Helper function. Replace the temporary this parameter injected
8471 during cp_finish_omp_declare_simd with the real this parameter. */
8473 static tree
8474 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8476 tree this_parm = (tree) data;
8477 if (TREE_CODE (*tp) == PARM_DECL
8478 && DECL_NAME (*tp) == this_identifier
8479 && *tp != this_parm)
8480 *tp = this_parm;
8481 else if (TYPE_P (*tp))
8482 *walk_subtrees = 0;
8483 return NULL_TREE;
8486 /* CTYPE is class type, or null if non-class.
8487 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8488 or METHOD_TYPE.
8489 DECLARATOR is the function's name.
8490 PARMS is a chain of PARM_DECLs for the function.
8491 VIRTUALP is truthvalue of whether the function is virtual or not.
8492 FLAGS are to be passed through to `grokclassfn'.
8493 QUALS are qualifiers indicating whether the function is `const'
8494 or `volatile'.
8495 RAISES is a list of exceptions that this function can raise.
8496 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8497 not look, and -1 if we should not call `grokclassfn' at all.
8499 SFK is the kind of special function (if any) for the new function.
8501 Returns `NULL_TREE' if something goes wrong, after issuing
8502 applicable error messages. */
8504 static tree
8505 grokfndecl (tree ctype,
8506 tree type,
8507 tree declarator,
8508 tree parms,
8509 tree orig_declarator,
8510 tree decl_reqs,
8511 int virtualp,
8512 enum overload_flags flags,
8513 cp_cv_quals quals,
8514 cp_ref_qualifier rqual,
8515 tree raises,
8516 int check,
8517 int friendp,
8518 int publicp,
8519 int inlinep,
8520 bool deletedp,
8521 special_function_kind sfk,
8522 bool funcdef_flag,
8523 int template_count,
8524 tree in_namespace,
8525 tree* attrlist,
8526 location_t location)
8528 tree decl;
8529 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8530 tree t;
8532 // Was the concept specifier present?
8533 bool concept_p = inlinep & 4;
8535 // Concept declarations must have a corresponding definition.
8536 if (concept_p && !funcdef_flag)
8538 error ("concept %qD has no definition", declarator);
8539 return NULL_TREE;
8542 if (rqual)
8543 type = build_ref_qualified_type (type, rqual);
8544 if (raises)
8545 type = build_exception_variant (type, raises);
8547 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8549 /* Set the constraints on the declaration. */
8550 if (flag_concepts)
8552 tree tmpl_reqs = NULL_TREE;
8553 if (processing_template_decl > template_class_depth (ctype))
8554 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8556 /* Adjust the required expression into a constraint. */
8557 if (decl_reqs)
8558 decl_reqs = normalize_expression (decl_reqs);
8560 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8561 set_constraints (decl, ci);
8564 /* If we have an explicit location, use it, otherwise use whatever
8565 build_lang_decl used (probably input_location). */
8566 if (location != UNKNOWN_LOCATION)
8567 DECL_SOURCE_LOCATION (decl) = location;
8569 if (TREE_CODE (type) == METHOD_TYPE)
8571 tree parm = build_this_parm (decl, type, quals);
8572 DECL_CHAIN (parm) = parms;
8573 parms = parm;
8575 /* Allocate space to hold the vptr bit if needed. */
8576 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8579 DECL_ARGUMENTS (decl) = parms;
8580 for (t = parms; t; t = DECL_CHAIN (t))
8581 DECL_CONTEXT (t) = decl;
8583 /* Propagate volatile out from type to decl. */
8584 if (TYPE_VOLATILE (type))
8585 TREE_THIS_VOLATILE (decl) = 1;
8587 /* Setup decl according to sfk. */
8588 switch (sfk)
8590 case sfk_constructor:
8591 case sfk_copy_constructor:
8592 case sfk_move_constructor:
8593 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8594 DECL_NAME (decl) = ctor_identifier;
8595 break;
8596 case sfk_destructor:
8597 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8598 DECL_NAME (decl) = dtor_identifier;
8599 break;
8600 default:
8601 break;
8604 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8606 if (funcdef_flag)
8607 error ("defining explicit specialization %qD in friend declaration",
8608 orig_declarator);
8609 else
8611 tree fns = TREE_OPERAND (orig_declarator, 0);
8612 tree args = TREE_OPERAND (orig_declarator, 1);
8614 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8616 /* Something like `template <class T> friend void f<T>()'. */
8617 error ("invalid use of template-id %qD in declaration "
8618 "of primary template",
8619 orig_declarator);
8620 return NULL_TREE;
8624 /* A friend declaration of the form friend void f<>(). Record
8625 the information in the TEMPLATE_ID_EXPR. */
8626 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8628 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8629 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8631 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8632 if (TREE_PURPOSE (t)
8633 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8635 error ("default arguments are not allowed in declaration "
8636 "of friend template specialization %qD",
8637 decl);
8638 return NULL_TREE;
8641 if (inlinep & 1)
8643 error ("%<inline%> is not allowed in declaration of friend "
8644 "template specialization %qD",
8645 decl);
8646 return NULL_TREE;
8651 /* If this decl has namespace scope, set that up. */
8652 if (in_namespace)
8653 set_decl_namespace (decl, in_namespace, friendp);
8654 else if (!ctype)
8655 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8657 /* `main' and builtins have implicit 'C' linkage. */
8658 if (ctype == NULL_TREE
8659 && DECL_FILE_SCOPE_P (decl)
8660 && current_lang_name == lang_name_cplusplus
8661 && (MAIN_NAME_P (declarator)
8662 || (IDENTIFIER_LENGTH (declarator) > 10
8663 && IDENTIFIER_POINTER (declarator)[0] == '_'
8664 && IDENTIFIER_POINTER (declarator)[1] == '_'
8665 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8666 "builtin_", 8) == 0)
8667 || (targetcm.cxx_implicit_extern_c
8668 && (targetcm.cxx_implicit_extern_c
8669 (IDENTIFIER_POINTER (declarator))))))
8670 SET_DECL_LANGUAGE (decl, lang_c);
8672 /* Should probably propagate const out from type to decl I bet (mrs). */
8673 if (staticp)
8675 DECL_STATIC_FUNCTION_P (decl) = 1;
8676 DECL_CONTEXT (decl) = ctype;
8679 if (deletedp)
8680 DECL_DELETED_FN (decl) = 1;
8682 if (ctype)
8684 DECL_CONTEXT (decl) = ctype;
8685 if (funcdef_flag)
8686 check_class_member_definition_namespace (decl);
8689 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8691 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8692 error ("cannot declare %<::main%> to be a template");
8693 if (inlinep & 1)
8694 error ("cannot declare %<::main%> to be inline");
8695 if (inlinep & 2)
8696 error ("cannot declare %<::main%> to be %<constexpr%>");
8697 if (!publicp)
8698 error ("cannot declare %<::main%> to be static");
8699 inlinep = 0;
8700 publicp = 1;
8703 /* Members of anonymous types and local classes have no linkage; make
8704 them internal. If a typedef is made later, this will be changed. */
8705 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8706 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8707 publicp = 0;
8709 if (publicp && cxx_dialect == cxx98)
8711 /* [basic.link]: A name with no linkage (notably, the name of a class
8712 or enumeration declared in a local scope) shall not be used to
8713 declare an entity with linkage.
8715 DR 757 relaxes this restriction for C++0x. */
8716 no_linkage_error (decl);
8719 TREE_PUBLIC (decl) = publicp;
8720 if (! publicp)
8722 DECL_INTERFACE_KNOWN (decl) = 1;
8723 DECL_NOT_REALLY_EXTERN (decl) = 1;
8726 /* If the declaration was declared inline, mark it as such. */
8727 if (inlinep)
8729 DECL_DECLARED_INLINE_P (decl) = 1;
8730 if (publicp)
8731 DECL_COMDAT (decl) = 1;
8733 if (inlinep & 2)
8734 DECL_DECLARED_CONSTEXPR_P (decl) = true;
8736 // If the concept declaration specifier was found, check
8737 // that the declaration satisfies the necessary requirements.
8738 if (concept_p)
8740 DECL_DECLARED_CONCEPT_P (decl) = true;
8741 check_concept_fn (decl);
8744 DECL_EXTERNAL (decl) = 1;
8745 if (TREE_CODE (type) == FUNCTION_TYPE)
8747 if (quals || rqual)
8748 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8749 TYPE_UNQUALIFIED,
8750 REF_QUAL_NONE);
8752 if (quals)
8754 error (ctype
8755 ? G_("static member function %qD cannot have cv-qualifier")
8756 : G_("non-member function %qD cannot have cv-qualifier"),
8757 decl);
8758 quals = TYPE_UNQUALIFIED;
8761 if (rqual)
8763 error (ctype
8764 ? G_("static member function %qD cannot have ref-qualifier")
8765 : G_("non-member function %qD cannot have ref-qualifier"),
8766 decl);
8767 rqual = REF_QUAL_NONE;
8771 if (deduction_guide_p (decl))
8773 if (!DECL_NAMESPACE_SCOPE_P (decl))
8775 error_at (location, "deduction guide %qD must be declared at "
8776 "namespace scope", decl);
8777 return NULL_TREE;
8779 if (funcdef_flag)
8780 error_at (location,
8781 "deduction guide %qD must not have a function body", decl);
8783 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
8784 && !grok_op_properties (decl, /*complain=*/true))
8785 return NULL_TREE;
8786 else if (UDLIT_OPER_P (DECL_NAME (decl)))
8788 bool long_long_unsigned_p;
8789 bool long_double_p;
8790 const char *suffix = NULL;
8791 /* [over.literal]/6: Literal operators shall not have C linkage. */
8792 if (DECL_LANGUAGE (decl) == lang_c)
8794 error ("literal operator with C linkage");
8795 maybe_show_extern_c_location ();
8796 return NULL_TREE;
8799 if (DECL_NAMESPACE_SCOPE_P (decl))
8801 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8802 &long_double_p))
8804 error ("%qD has invalid argument list", decl);
8805 return NULL_TREE;
8808 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
8809 if (long_long_unsigned_p)
8811 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
8812 warning (0, "integer suffix %qs"
8813 " shadowed by implementation", suffix);
8815 else if (long_double_p)
8817 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
8818 warning (0, "floating point suffix %qs"
8819 " shadowed by implementation", suffix);
8822 else
8824 error ("%qD must be a non-member function", decl);
8825 return NULL_TREE;
8829 if (funcdef_flag)
8830 /* Make the init_value nonzero so pushdecl knows this is not
8831 tentative. error_mark_node is replaced later with the BLOCK. */
8832 DECL_INITIAL (decl) = error_mark_node;
8834 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8835 TREE_NOTHROW (decl) = 1;
8837 if (flag_openmp || flag_openmp_simd)
8839 /* Adjust "omp declare simd" attributes. */
8840 tree ods = lookup_attribute ("omp declare simd", *attrlist);
8841 if (ods)
8843 tree attr;
8844 for (attr = ods; attr;
8845 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
8847 if (TREE_CODE (type) == METHOD_TYPE)
8848 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
8849 DECL_ARGUMENTS (decl), NULL);
8850 if (TREE_VALUE (attr) != NULL_TREE)
8852 tree cl = TREE_VALUE (TREE_VALUE (attr));
8853 cl = c_omp_declare_simd_clauses_to_numbers
8854 (DECL_ARGUMENTS (decl), cl);
8855 if (cl)
8856 TREE_VALUE (TREE_VALUE (attr)) = cl;
8857 else
8858 TREE_VALUE (attr) = NULL_TREE;
8864 /* Caller will do the rest of this. */
8865 if (check < 0)
8866 return decl;
8868 if (ctype != NULL_TREE)
8869 grokclassfn (ctype, decl, flags);
8871 /* 12.4/3 */
8872 if (cxx_dialect >= cxx11
8873 && DECL_DESTRUCTOR_P (decl)
8874 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
8875 && !processing_template_decl)
8876 deduce_noexcept_on_destructor (decl);
8878 decl = check_explicit_specialization (orig_declarator, decl,
8879 template_count,
8880 2 * funcdef_flag +
8881 4 * (friendp != 0) +
8882 8 * concept_p);
8883 if (decl == error_mark_node)
8884 return NULL_TREE;
8886 if (DECL_STATIC_FUNCTION_P (decl))
8887 check_static_quals (decl, quals);
8889 if (attrlist)
8891 cplus_decl_attributes (&decl, *attrlist, 0);
8892 *attrlist = NULL_TREE;
8895 /* Check main's type after attributes have been applied. */
8896 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8898 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8899 integer_type_node))
8901 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
8902 tree newtype;
8903 error ("%<::main%> must return %<int%>");
8904 newtype = build_function_type (integer_type_node, oldtypeargs);
8905 TREE_TYPE (decl) = newtype;
8907 if (warn_main)
8908 check_main_parameter_types (decl);
8911 if (ctype != NULL_TREE && check)
8913 tree old_decl = check_classfn (ctype, decl,
8914 (processing_template_decl
8915 > template_class_depth (ctype))
8916 ? current_template_parms
8917 : NULL_TREE);
8919 if (old_decl == error_mark_node)
8920 return NULL_TREE;
8922 if (old_decl)
8924 tree ok;
8925 tree pushed_scope;
8927 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8928 /* Because grokfndecl is always supposed to return a
8929 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8930 here. We depend on our callers to figure out that its
8931 really a template that's being returned. */
8932 old_decl = DECL_TEMPLATE_RESULT (old_decl);
8934 if (DECL_STATIC_FUNCTION_P (old_decl)
8935 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8937 /* Remove the `this' parm added by grokclassfn. */
8938 revert_static_member_fn (decl);
8939 check_static_quals (decl, quals);
8941 if (DECL_ARTIFICIAL (old_decl))
8943 error ("definition of implicitly-declared %qD", old_decl);
8944 return NULL_TREE;
8946 else if (DECL_DEFAULTED_FN (old_decl))
8948 error ("definition of explicitly-defaulted %q+D", decl);
8949 inform (DECL_SOURCE_LOCATION (old_decl),
8950 "%q#D explicitly defaulted here", old_decl);
8951 return NULL_TREE;
8954 /* Since we've smashed OLD_DECL to its
8955 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8956 if (TREE_CODE (decl) == TEMPLATE_DECL)
8957 decl = DECL_TEMPLATE_RESULT (decl);
8959 /* Attempt to merge the declarations. This can fail, in
8960 the case of some invalid specialization declarations. */
8961 pushed_scope = push_scope (ctype);
8962 ok = duplicate_decls (decl, old_decl, friendp);
8963 if (pushed_scope)
8964 pop_scope (pushed_scope);
8965 if (!ok)
8967 error ("no %q#D member function declared in class %qT",
8968 decl, ctype);
8969 return NULL_TREE;
8971 if (ok == error_mark_node)
8972 return NULL_TREE;
8973 return old_decl;
8977 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8978 return NULL_TREE;
8980 if (ctype == NULL_TREE || check)
8981 return decl;
8983 if (virtualp)
8984 DECL_VIRTUAL_P (decl) = 1;
8986 return decl;
8989 /* decl is a FUNCTION_DECL.
8990 specifiers are the parsed virt-specifiers.
8992 Set flags to reflect the virt-specifiers.
8994 Returns decl. */
8996 static tree
8997 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
8999 if (decl == NULL_TREE)
9000 return decl;
9001 if (specifiers & VIRT_SPEC_OVERRIDE)
9002 DECL_OVERRIDE_P (decl) = 1;
9003 if (specifiers & VIRT_SPEC_FINAL)
9004 DECL_FINAL_P (decl) = 1;
9005 return decl;
9008 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
9009 the linkage that DECL will receive in the object file. */
9011 static void
9012 set_linkage_for_static_data_member (tree decl)
9014 /* A static data member always has static storage duration and
9015 external linkage. Note that static data members are forbidden in
9016 local classes -- the only situation in which a class has
9017 non-external linkage. */
9018 TREE_PUBLIC (decl) = 1;
9019 TREE_STATIC (decl) = 1;
9020 /* For non-template classes, static data members are always put
9021 out in exactly those files where they are defined, just as
9022 with ordinary namespace-scope variables. */
9023 if (!processing_template_decl)
9024 DECL_INTERFACE_KNOWN (decl) = 1;
9027 /* Create a VAR_DECL named NAME with the indicated TYPE.
9029 If SCOPE is non-NULL, it is the class type or namespace containing
9030 the variable. If SCOPE is NULL, the variable should is created in
9031 the innermost enclosing scope. */
9033 static tree
9034 grokvardecl (tree type,
9035 tree name,
9036 tree orig_declarator,
9037 const cp_decl_specifier_seq *declspecs,
9038 int initialized,
9039 int type_quals,
9040 int inlinep,
9041 bool conceptp,
9042 int template_count,
9043 tree scope)
9045 tree decl;
9046 tree explicit_scope;
9048 gcc_assert (!name || identifier_p (name));
9050 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9051 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9053 /* Compute the scope in which to place the variable, but remember
9054 whether or not that scope was explicitly specified by the user. */
9055 explicit_scope = scope;
9056 if (!scope)
9058 /* An explicit "extern" specifier indicates a namespace-scope
9059 variable. */
9060 if (declspecs->storage_class == sc_extern)
9061 scope = current_decl_namespace ();
9062 else if (!at_function_scope_p ())
9063 scope = current_scope ();
9066 if (scope
9067 && (/* If the variable is a namespace-scope variable declared in a
9068 template, we need DECL_LANG_SPECIFIC. */
9069 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9070 /* Similarly for namespace-scope variables with language linkage
9071 other than C++. */
9072 || (TREE_CODE (scope) == NAMESPACE_DECL
9073 && current_lang_name != lang_name_cplusplus)
9074 /* Similarly for static data members. */
9075 || TYPE_P (scope)
9076 /* Similarly for explicit specializations. */
9077 || (orig_declarator
9078 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9079 decl = build_lang_decl (VAR_DECL, name, type);
9080 else
9081 decl = build_decl (input_location, VAR_DECL, name, type);
9083 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9084 set_decl_namespace (decl, explicit_scope, 0);
9085 else
9086 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9088 if (declspecs->storage_class == sc_extern)
9090 DECL_THIS_EXTERN (decl) = 1;
9091 DECL_EXTERNAL (decl) = !initialized;
9094 if (DECL_CLASS_SCOPE_P (decl))
9096 set_linkage_for_static_data_member (decl);
9097 /* This function is only called with out-of-class definitions. */
9098 DECL_EXTERNAL (decl) = 0;
9099 check_class_member_definition_namespace (decl);
9101 /* At top level, either `static' or no s.c. makes a definition
9102 (perhaps tentative), and absence of `static' makes it public. */
9103 else if (toplevel_bindings_p ())
9105 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9106 && (DECL_THIS_EXTERN (decl)
9107 || ! constp
9108 || volatilep
9109 || inlinep));
9110 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9112 /* Not at top level, only `static' makes a static definition. */
9113 else
9115 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9116 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9119 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9121 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9123 CP_DECL_THREAD_LOCAL_P (decl) = true;
9124 if (!processing_template_decl)
9125 set_decl_tls_model (decl, decl_default_tls_model (decl));
9127 if (declspecs->gnu_thread_keyword_p)
9128 SET_DECL_GNU_TLS_P (decl);
9131 /* If the type of the decl has no linkage, make sure that we'll
9132 notice that in mark_used. */
9133 if (cxx_dialect > cxx98
9134 && decl_linkage (decl) != lk_none
9135 && DECL_LANG_SPECIFIC (decl) == NULL
9136 && !DECL_EXTERN_C_P (decl)
9137 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9138 retrofit_lang_decl (decl);
9140 if (TREE_PUBLIC (decl))
9142 /* [basic.link]: A name with no linkage (notably, the name of a class
9143 or enumeration declared in a local scope) shall not be used to
9144 declare an entity with linkage.
9146 DR 757 relaxes this restriction for C++0x. */
9147 if (cxx_dialect < cxx11)
9148 no_linkage_error (decl);
9150 else
9151 DECL_INTERFACE_KNOWN (decl) = 1;
9153 if (DECL_NAME (decl)
9154 && MAIN_NAME_P (DECL_NAME (decl))
9155 && scope == global_namespace)
9156 error ("cannot declare %<::main%> to be a global variable");
9158 /* Check that the variable can be safely declared as a concept.
9159 Note that this also forbids explicit specializations. */
9160 if (conceptp)
9162 if (!processing_template_decl)
9164 error ("a non-template variable cannot be %<concept%>");
9165 return NULL_TREE;
9167 else
9168 DECL_DECLARED_CONCEPT_P (decl) = true;
9169 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9170 error_at (declspecs->locations[ds_type_spec],
9171 "concept must have type %<bool%>");
9173 else if (flag_concepts
9174 && processing_template_decl > template_class_depth (scope))
9176 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9177 tree ci = build_constraints (reqs, NULL_TREE);
9178 set_constraints (decl, ci);
9181 // Handle explicit specializations and instantiations of variable templates.
9182 if (orig_declarator)
9183 decl = check_explicit_specialization (orig_declarator, decl,
9184 template_count, conceptp * 8);
9186 return decl != error_mark_node ? decl : NULL_TREE;
9189 /* Create and return a canonical pointer to member function type, for
9190 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9192 tree
9193 build_ptrmemfunc_type (tree type)
9195 tree field, fields;
9196 tree t;
9198 if (type == error_mark_node)
9199 return type;
9201 /* Make sure that we always have the unqualified pointer-to-member
9202 type first. */
9203 if (cp_cv_quals quals = cp_type_quals (type))
9205 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9206 return cp_build_qualified_type (unqual, quals);
9209 /* If a canonical type already exists for this type, use it. We use
9210 this method instead of type_hash_canon, because it only does a
9211 simple equality check on the list of field members. */
9213 t = TYPE_PTRMEMFUNC_TYPE (type);
9214 if (t)
9215 return t;
9217 t = make_node (RECORD_TYPE);
9219 /* Let the front end know this is a pointer to member function. */
9220 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9222 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9223 fields = field;
9225 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9226 delta_type_node);
9227 DECL_CHAIN (field) = fields;
9228 fields = field;
9230 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9232 /* Zap out the name so that the back end will give us the debugging
9233 information for this anonymous RECORD_TYPE. */
9234 TYPE_NAME (t) = NULL_TREE;
9236 /* Cache this pointer-to-member type so that we can find it again
9237 later. */
9238 TYPE_PTRMEMFUNC_TYPE (type) = t;
9240 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9241 SET_TYPE_STRUCTURAL_EQUALITY (t);
9242 else if (TYPE_CANONICAL (type) != type)
9243 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9245 return t;
9248 /* Create and return a pointer to data member type. */
9250 tree
9251 build_ptrmem_type (tree class_type, tree member_type)
9253 if (TREE_CODE (member_type) == METHOD_TYPE)
9255 cp_cv_quals quals = type_memfn_quals (member_type);
9256 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9257 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9258 return build_ptrmemfunc_type (build_pointer_type (member_type));
9260 else
9262 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9263 return build_offset_type (class_type, member_type);
9267 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9268 Check to see that the definition is valid. Issue appropriate error
9269 messages. Return 1 if the definition is particularly bad, or 0
9270 otherwise. */
9272 static int
9273 check_static_variable_definition (tree decl, tree type)
9275 /* Avoid redundant diagnostics on out-of-class definitions. */
9276 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9277 return 0;
9278 /* Can't check yet if we don't know the type. */
9279 if (dependent_type_p (type))
9280 return 0;
9281 /* If DECL is declared constexpr, we'll do the appropriate checks
9282 in check_initializer. Similarly for inline static data members. */
9283 if (DECL_P (decl)
9284 && (DECL_DECLARED_CONSTEXPR_P (decl)
9285 || DECL_VAR_DECLARED_INLINE_P (decl)))
9286 return 0;
9287 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9289 if (!COMPLETE_TYPE_P (type))
9290 error_at (DECL_SOURCE_LOCATION (decl),
9291 "in-class initialization of static data member %q#D of "
9292 "incomplete type", decl);
9293 else if (literal_type_p (type))
9294 permerror (DECL_SOURCE_LOCATION (decl),
9295 "%<constexpr%> needed for in-class initialization of "
9296 "static data member %q#D of non-integral type", decl);
9297 else
9298 error_at (DECL_SOURCE_LOCATION (decl),
9299 "in-class initialization of static data member %q#D of "
9300 "non-literal type", decl);
9301 return 1;
9304 /* Motion 10 at San Diego: If a static const integral data member is
9305 initialized with an integral constant expression, the initializer
9306 may appear either in the declaration (within the class), or in
9307 the definition, but not both. If it appears in the class, the
9308 member is a member constant. The file-scope definition is always
9309 required. */
9310 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9312 error_at (DECL_SOURCE_LOCATION (decl),
9313 "invalid in-class initialization of static data member "
9314 "of non-integral type %qT",
9315 type);
9316 return 1;
9318 else if (!CP_TYPE_CONST_P (type))
9319 error_at (DECL_SOURCE_LOCATION (decl),
9320 "ISO C++ forbids in-class initialization of non-const "
9321 "static member %qD",
9322 decl);
9323 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9324 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9325 "ISO C++ forbids initialization of member constant "
9326 "%qD of non-integral type %qT", decl, type);
9328 return 0;
9331 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9332 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9333 expressions out into temporary variables so that walk_tree doesn't
9334 step into them (c++/15764). */
9336 static tree
9337 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9339 hash_set<tree> *pset = (hash_set<tree> *)data;
9340 tree expr = *expr_p;
9341 if (TREE_CODE (expr) == SAVE_EXPR)
9343 tree op = TREE_OPERAND (expr, 0);
9344 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9345 if (TREE_SIDE_EFFECTS (op))
9346 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9347 *walk_subtrees = 0;
9349 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9350 *walk_subtrees = 0;
9351 return NULL;
9354 /* Entry point for the above. */
9356 static void
9357 stabilize_vla_size (tree size)
9359 hash_set<tree> pset;
9360 /* Break out any function calls into temporary variables. */
9361 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9364 /* Reduce a SIZEOF_EXPR to its value. */
9366 tree
9367 fold_sizeof_expr (tree t)
9369 tree r;
9370 if (SIZEOF_EXPR_TYPE_P (t))
9371 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9372 SIZEOF_EXPR, false);
9373 else if (TYPE_P (TREE_OPERAND (t, 0)))
9374 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9375 false);
9376 else
9377 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9378 false);
9379 if (r == error_mark_node)
9380 r = size_one_node;
9381 return r;
9384 /* Given the SIZE (i.e., number of elements) in an array, compute
9385 an appropriate index type for the array. If non-NULL, NAME is
9386 the name of the entity being declared. */
9388 tree
9389 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9391 tree itype;
9392 tree osize = size;
9394 if (error_operand_p (size))
9395 return error_mark_node;
9397 if (!type_dependent_expression_p (size))
9399 tree type = TREE_TYPE (size);
9401 size = mark_rvalue_use (size);
9403 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9404 && TREE_SIDE_EFFECTS (size))
9405 /* In C++98, we mark a non-constant array bound with a magic
9406 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9407 else
9409 size = instantiate_non_dependent_expr_sfinae (size, complain);
9411 if (CLASS_TYPE_P (type)
9412 && CLASSTYPE_LITERAL_P (type))
9414 size = build_expr_type_conversion (WANT_INT, size, true);
9415 if (!size)
9417 if (!(complain & tf_error))
9418 return error_mark_node;
9419 if (name)
9420 error ("size of array %qD has non-integral type %qT",
9421 name, type);
9422 else
9423 error ("size of array has non-integral type %qT", type);
9424 size = integer_one_node;
9426 if (size == error_mark_node)
9427 return error_mark_node;
9428 type = TREE_TYPE (size);
9431 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9432 size = maybe_constant_value (size);
9434 if (!TREE_CONSTANT (size))
9435 size = osize;
9438 if (error_operand_p (size))
9439 return error_mark_node;
9441 /* The array bound must be an integer type. */
9442 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9444 if (!(complain & tf_error))
9445 return error_mark_node;
9446 if (name)
9447 error ("size of array %qD has non-integral type %qT", name, type);
9448 else
9449 error ("size of array has non-integral type %qT", type);
9450 size = integer_one_node;
9451 type = TREE_TYPE (size);
9455 /* A type is dependent if it is...an array type constructed from any
9456 dependent type or whose size is specified by a constant expression
9457 that is value-dependent. */
9458 /* We can only call value_dependent_expression_p on integral constant
9459 expressions; treat non-constant expressions as dependent, too. */
9460 if (processing_template_decl
9461 && (type_dependent_expression_p (size)
9462 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9464 /* We cannot do any checking for a SIZE that isn't known to be
9465 constant. Just build the index type and mark that it requires
9466 structural equality checks. */
9467 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9468 size, size_one_node));
9469 TYPE_DEPENDENT_P (itype) = 1;
9470 TYPE_DEPENDENT_P_VALID (itype) = 1;
9471 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9472 return itype;
9475 if (TREE_CODE (size) != INTEGER_CST)
9477 tree folded = cp_fully_fold (size);
9478 if (TREE_CODE (folded) == INTEGER_CST)
9479 pedwarn (location_of (size), OPT_Wpedantic,
9480 "size of array is not an integral constant-expression");
9481 /* Use the folded result for VLAs, too; it will have resolved
9482 SIZEOF_EXPR. */
9483 size = folded;
9486 /* Normally, the array-bound will be a constant. */
9487 if (TREE_CODE (size) == INTEGER_CST)
9489 /* Check to see if the array bound overflowed. Make that an
9490 error, no matter how generous we're being. */
9491 constant_expression_error (size);
9493 /* An array must have a positive number of elements. */
9494 if (tree_int_cst_lt (size, integer_zero_node))
9496 if (!(complain & tf_error))
9497 return error_mark_node;
9498 if (name)
9499 error ("size of array %qD is negative", name);
9500 else
9501 error ("size of array is negative");
9502 size = integer_one_node;
9504 /* As an extension we allow zero-sized arrays. */
9505 else if (integer_zerop (size))
9507 if (!(complain & tf_error))
9508 /* We must fail if performing argument deduction (as
9509 indicated by the state of complain), so that
9510 another substitution can be found. */
9511 return error_mark_node;
9512 else if (in_system_header_at (input_location))
9513 /* Allow them in system headers because glibc uses them. */;
9514 else if (name)
9515 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9516 else
9517 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9520 else if (TREE_CONSTANT (size)
9521 /* We don't allow VLAs at non-function scopes, or during
9522 tentative template substitution. */
9523 || !at_function_scope_p ()
9524 || !(complain & tf_error))
9526 if (!(complain & tf_error))
9527 return error_mark_node;
9528 /* `(int) &fn' is not a valid array bound. */
9529 if (name)
9530 error ("size of array %qD is not an integral constant-expression",
9531 name);
9532 else
9533 error ("size of array is not an integral constant-expression");
9534 size = integer_one_node;
9536 else if (pedantic && warn_vla != 0)
9538 if (name)
9539 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9540 else
9541 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9543 else if (warn_vla > 0)
9545 if (name)
9546 warning (OPT_Wvla,
9547 "variable length array %qD is used", name);
9548 else
9549 warning (OPT_Wvla,
9550 "variable length array is used");
9553 if (processing_template_decl && !TREE_CONSTANT (size))
9554 /* A variable sized array. */
9555 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9556 else
9558 /* Compute the index of the largest element in the array. It is
9559 one less than the number of elements in the array. We save
9560 and restore PROCESSING_TEMPLATE_DECL so that computations in
9561 cp_build_binary_op will be appropriately folded. */
9563 processing_template_decl_sentinel s;
9564 itype = cp_build_binary_op (input_location,
9565 MINUS_EXPR,
9566 cp_convert (ssizetype, size, complain),
9567 cp_convert (ssizetype, integer_one_node,
9568 complain),
9569 complain);
9570 itype = maybe_constant_value (itype);
9573 if (!TREE_CONSTANT (itype))
9575 /* A variable sized array. */
9576 itype = variable_size (itype);
9578 stabilize_vla_size (itype);
9580 if (sanitize_flags_p (SANITIZE_VLA)
9581 && current_function_decl != NULL_TREE)
9583 /* We have to add 1 -- in the ubsan routine we generate
9584 LE_EXPR rather than LT_EXPR. */
9585 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9586 build_one_cst (TREE_TYPE (itype)));
9587 t = ubsan_instrument_vla (input_location, t);
9588 finish_expr_stmt (t);
9591 /* Make sure that there was no overflow when creating to a signed
9592 index type. (For example, on a 32-bit machine, an array with
9593 size 2^32 - 1 is too big.) */
9594 else if (TREE_CODE (itype) == INTEGER_CST
9595 && TREE_OVERFLOW (itype))
9597 if (!(complain & tf_error))
9598 return error_mark_node;
9599 error ("overflow in array dimension");
9600 TREE_OVERFLOW (itype) = 0;
9604 /* Create and return the appropriate index type. */
9605 itype = build_index_type (itype);
9607 /* If the index type were dependent, we would have returned early, so
9608 remember that it isn't. */
9609 TYPE_DEPENDENT_P (itype) = 0;
9610 TYPE_DEPENDENT_P_VALID (itype) = 1;
9611 return itype;
9614 /* Returns the scope (if any) in which the entity declared by
9615 DECLARATOR will be located. If the entity was declared with an
9616 unqualified name, NULL_TREE is returned. */
9618 tree
9619 get_scope_of_declarator (const cp_declarator *declarator)
9621 while (declarator && declarator->kind != cdk_id)
9622 declarator = declarator->declarator;
9624 /* If the declarator-id is a SCOPE_REF, the scope in which the
9625 declaration occurs is the first operand. */
9626 if (declarator
9627 && declarator->u.id.qualifying_scope)
9628 return declarator->u.id.qualifying_scope;
9630 /* Otherwise, the declarator is not a qualified name; the entity will
9631 be declared in the current scope. */
9632 return NULL_TREE;
9635 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9636 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9637 with this type. */
9639 static tree
9640 create_array_type_for_decl (tree name, tree type, tree size)
9642 tree itype = NULL_TREE;
9644 /* If things have already gone awry, bail now. */
9645 if (type == error_mark_node || size == error_mark_node)
9646 return error_mark_node;
9648 /* 8.3.4/1: If the type of the identifier of D contains the auto
9649 type-specifier, the program is ill-formed. */
9650 if (type_uses_auto (type))
9652 error ("%qD declared as array of %qT", name, type);
9653 return error_mark_node;
9656 /* If there are some types which cannot be array elements,
9657 issue an error-message and return. */
9658 switch (TREE_CODE (type))
9660 case VOID_TYPE:
9661 if (name)
9662 error ("declaration of %qD as array of void", name);
9663 else
9664 error ("creating array of void");
9665 return error_mark_node;
9667 case FUNCTION_TYPE:
9668 if (name)
9669 error ("declaration of %qD as array of functions", name);
9670 else
9671 error ("creating array of functions");
9672 return error_mark_node;
9674 case REFERENCE_TYPE:
9675 if (name)
9676 error ("declaration of %qD as array of references", name);
9677 else
9678 error ("creating array of references");
9679 return error_mark_node;
9681 case METHOD_TYPE:
9682 if (name)
9683 error ("declaration of %qD as array of function members", name);
9684 else
9685 error ("creating array of function members");
9686 return error_mark_node;
9688 default:
9689 break;
9692 /* [dcl.array]
9694 The constant expressions that specify the bounds of the arrays
9695 can be omitted only for the first member of the sequence. */
9696 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9698 if (name)
9699 error ("declaration of %qD as multidimensional array must "
9700 "have bounds for all dimensions except the first",
9701 name);
9702 else
9703 error ("multidimensional array must have bounds for all "
9704 "dimensions except the first");
9706 return error_mark_node;
9709 /* Figure out the index type for the array. */
9710 if (size)
9711 itype = compute_array_index_type (name, size, tf_warning_or_error);
9713 /* [dcl.array]
9714 T is called the array element type; this type shall not be [...] an
9715 abstract class type. */
9716 abstract_virtuals_error (name, type);
9718 return build_cplus_array_type (type, itype);
9721 /* Returns the smallest location != UNKNOWN_LOCATION among the
9722 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9723 and LOCATIONS[ds_restrict]. */
9725 static location_t
9726 smallest_type_quals_location (int type_quals, const location_t* locations)
9728 location_t loc = UNKNOWN_LOCATION;
9730 if (type_quals & TYPE_QUAL_CONST)
9731 loc = locations[ds_const];
9733 if ((type_quals & TYPE_QUAL_VOLATILE)
9734 && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc))
9735 loc = locations[ds_volatile];
9737 if ((type_quals & TYPE_QUAL_RESTRICT)
9738 && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc))
9739 loc = locations[ds_restrict];
9741 return loc;
9744 /* Check that it's OK to declare a function with the indicated TYPE
9745 and TYPE_QUALS. SFK indicates the kind of special function (if any)
9746 that this function is. OPTYPE is the type given in a conversion
9747 operator declaration, or the class type for a constructor/destructor.
9748 Returns the actual return type of the function; that may be different
9749 than TYPE if an error occurs, or for certain special functions. */
9751 static tree
9752 check_special_function_return_type (special_function_kind sfk,
9753 tree type,
9754 tree optype,
9755 int type_quals,
9756 const location_t* locations)
9758 switch (sfk)
9760 case sfk_constructor:
9761 if (type)
9762 error ("return type specification for constructor invalid");
9763 else if (type_quals != TYPE_UNQUALIFIED)
9764 error_at (smallest_type_quals_location (type_quals, locations),
9765 "qualifiers are not allowed on constructor declaration");
9767 if (targetm.cxx.cdtor_returns_this ())
9768 type = build_pointer_type (optype);
9769 else
9770 type = void_type_node;
9771 break;
9773 case sfk_destructor:
9774 if (type)
9775 error ("return type specification for destructor invalid");
9776 else if (type_quals != TYPE_UNQUALIFIED)
9777 error_at (smallest_type_quals_location (type_quals, locations),
9778 "qualifiers are not allowed on destructor declaration");
9780 /* We can't use the proper return type here because we run into
9781 problems with ambiguous bases and covariant returns. */
9782 if (targetm.cxx.cdtor_returns_this ())
9783 type = build_pointer_type (void_type_node);
9784 else
9785 type = void_type_node;
9786 break;
9788 case sfk_conversion:
9789 if (type)
9790 error ("return type specified for %<operator %T%>", optype);
9791 else if (type_quals != TYPE_UNQUALIFIED)
9792 error_at (smallest_type_quals_location (type_quals, locations),
9793 "qualifiers are not allowed on declaration of "
9794 "%<operator %T%>", optype);
9796 type = optype;
9797 break;
9799 case sfk_deduction_guide:
9800 if (type)
9801 error ("return type specified for deduction guide");
9802 else if (type_quals != TYPE_UNQUALIFIED)
9803 error_at (smallest_type_quals_location (type_quals, locations),
9804 "qualifiers are not allowed on declaration of "
9805 "deduction guide");
9806 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
9807 for (int i = 0; i < ds_last; ++i)
9808 if (i != ds_explicit && locations[i])
9809 error_at (locations[i],
9810 "decl-specifier in declaration of deduction guide");
9811 break;
9813 default:
9814 gcc_unreachable ();
9817 return type;
9820 /* A variable or data member (whose unqualified name is IDENTIFIER)
9821 has been declared with the indicated TYPE. If the TYPE is not
9822 acceptable, issue an error message and return a type to use for
9823 error-recovery purposes. */
9825 tree
9826 check_var_type (tree identifier, tree type)
9828 if (VOID_TYPE_P (type))
9830 if (!identifier)
9831 error ("unnamed variable or field declared void");
9832 else if (identifier_p (identifier))
9834 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
9835 error ("variable or field %qE declared void", identifier);
9837 else
9838 error ("variable or field declared void");
9839 type = error_mark_node;
9842 return type;
9845 /* Handle declaring DECL as an inline variable. */
9847 static void
9848 mark_inline_variable (tree decl)
9850 bool inlinep = true;
9851 if (! toplevel_bindings_p ())
9853 error ("%<inline%> specifier invalid for variable "
9854 "%qD declared at block scope", decl);
9855 inlinep = false;
9857 else if (cxx_dialect < cxx17)
9858 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
9859 "inline variables are only available "
9860 "with -std=c++17 or -std=gnu++17");
9861 if (inlinep)
9863 retrofit_lang_decl (decl);
9864 SET_DECL_VAR_DECLARED_INLINE_P (decl);
9869 /* Assign a typedef-given name to a class or enumeration type declared
9870 as anonymous at first. This was split out of grokdeclarator
9871 because it is also used in libcc1. */
9873 void
9874 name_unnamed_type (tree type, tree decl)
9876 gcc_assert (TYPE_UNNAMED_P (type));
9878 /* Replace the anonymous name with the real name everywhere. */
9879 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9881 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
9882 /* We do not rename the debug info representing the
9883 unnamed tagged type because the standard says in
9884 [dcl.typedef] that the naming applies only for
9885 linkage purposes. */
9886 /*debug_hooks->set_name (t, decl);*/
9887 TYPE_NAME (t) = decl;
9890 if (TYPE_LANG_SPECIFIC (type))
9891 TYPE_WAS_UNNAMED (type) = 1;
9893 /* If this is a typedef within a template class, the nested
9894 type is a (non-primary) template. The name for the
9895 template needs updating as well. */
9896 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9897 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9898 = TYPE_IDENTIFIER (type);
9900 /* Adjust linkage now that we aren't unnamed anymore. */
9901 reset_type_linkage (type);
9903 /* FIXME remangle member functions; member functions of a
9904 type with external linkage have external linkage. */
9906 /* Check that our job is done, and that it would fail if we
9907 attempted to do it again. */
9908 gcc_assert (!TYPE_UNNAMED_P (type));
9911 /* Given declspecs and a declarator (abstract or otherwise), determine
9912 the name and type of the object declared and construct a DECL node
9913 for it.
9915 DECLSPECS points to the representation of declaration-specifier
9916 sequence that precedes declarator.
9918 DECL_CONTEXT says which syntactic context this declaration is in:
9919 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9920 FUNCDEF for a function definition. Like NORMAL but a few different
9921 error messages in each case. Return value may be zero meaning
9922 this definition is too screwy to try to parse.
9923 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9924 handle member functions (which have FIELD context).
9925 Return value may be zero meaning this definition is too screwy to
9926 try to parse.
9927 PARM for a parameter declaration (either within a function prototype
9928 or before a function body). Make a PARM_DECL, or return void_type_node.
9929 TPARM for a template parameter declaration.
9930 CATCHPARM for a parameter declaration before a catch clause.
9931 TYPENAME if for a typename (in a cast or sizeof).
9932 Don't make a DECL node; just return the ..._TYPE node.
9933 FIELD for a struct or union field; make a FIELD_DECL.
9934 BITFIELD for a field with specified width.
9936 INITIALIZED is as for start_decl.
9938 ATTRLIST is a pointer to the list of attributes, which may be NULL
9939 if there are none; *ATTRLIST may be modified if attributes from inside
9940 the declarator should be applied to the declaration.
9942 When this function is called, scoping variables (such as
9943 CURRENT_CLASS_TYPE) should reflect the scope in which the
9944 declaration occurs, not the scope in which the new declaration will
9945 be placed. For example, on:
9947 void S::f() { ... }
9949 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
9950 should not be `S'.
9952 Returns a DECL (if a declarator is present), a TYPE (if there is no
9953 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
9954 error occurs. */
9956 tree
9957 grokdeclarator (const cp_declarator *declarator,
9958 cp_decl_specifier_seq *declspecs,
9959 enum decl_context decl_context,
9960 int initialized,
9961 tree* attrlist)
9963 tree type = NULL_TREE;
9964 int longlong = 0;
9965 int explicit_intN = 0;
9966 int virtualp, explicitp, friendp, inlinep, staticp;
9967 int explicit_int = 0;
9968 int explicit_char = 0;
9969 int defaulted_int = 0;
9971 tree typedef_decl = NULL_TREE;
9972 const char *name = NULL;
9973 tree typedef_type = NULL_TREE;
9974 /* True if this declarator is a function definition. */
9975 bool funcdef_flag = false;
9976 cp_declarator_kind innermost_code = cdk_error;
9977 int bitfield = 0;
9978 #if 0
9979 /* See the code below that used this. */
9980 tree decl_attr = NULL_TREE;
9981 #endif
9983 /* Keep track of what sort of function is being processed
9984 so that we can warn about default return values, or explicit
9985 return values which do not match prescribed defaults. */
9986 special_function_kind sfk = sfk_none;
9988 tree dname = NULL_TREE;
9989 tree ctor_return_type = NULL_TREE;
9990 enum overload_flags flags = NO_SPECIAL;
9991 /* cv-qualifiers that apply to the declarator, for a declaration of
9992 a member function. */
9993 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
9994 /* virt-specifiers that apply to the declarator, for a declaration of
9995 a member function. */
9996 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
9997 /* ref-qualifier that applies to the declarator, for a declaration of
9998 a member function. */
9999 cp_ref_qualifier rqual = REF_QUAL_NONE;
10000 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
10001 int type_quals = TYPE_UNQUALIFIED;
10002 tree raises = NULL_TREE;
10003 int template_count = 0;
10004 tree returned_attrs = NULL_TREE;
10005 tree parms = NULL_TREE;
10006 const cp_declarator *id_declarator;
10007 /* The unqualified name of the declarator; either an
10008 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
10009 tree unqualified_id;
10010 /* The class type, if any, in which this entity is located,
10011 or NULL_TREE if none. Note that this value may be different from
10012 the current class type; for example if an attempt is made to declare
10013 "A::f" inside "B", this value will be "A". */
10014 tree ctype = current_class_type;
10015 /* The NAMESPACE_DECL for the namespace in which this entity is
10016 located. If an unqualified name is used to declare the entity,
10017 this value will be NULL_TREE, even if the entity is located at
10018 namespace scope. */
10019 tree in_namespace = NULL_TREE;
10020 cp_storage_class storage_class;
10021 bool unsigned_p, signed_p, short_p, long_p, thread_p;
10022 bool type_was_error_mark_node = false;
10023 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10024 bool template_type_arg = false;
10025 bool template_parm_flag = false;
10026 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10027 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10028 bool late_return_type_p = false;
10029 bool array_parameter_p = false;
10030 source_location saved_loc = input_location;
10031 tree reqs = NULL_TREE;
10033 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10034 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10035 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10036 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10037 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10038 explicit_intN = declspecs->explicit_intN_p;
10039 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10041 // Was concept_p specified? Note that ds_concept
10042 // implies ds_constexpr!
10043 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10044 if (concept_p)
10045 constexpr_p = true;
10047 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10048 type_quals |= TYPE_QUAL_CONST;
10049 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10050 type_quals |= TYPE_QUAL_VOLATILE;
10051 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10052 type_quals |= TYPE_QUAL_RESTRICT;
10054 if (decl_context == FUNCDEF)
10055 funcdef_flag = true, decl_context = NORMAL;
10056 else if (decl_context == MEMFUNCDEF)
10057 funcdef_flag = true, decl_context = FIELD;
10058 else if (decl_context == BITFIELD)
10059 bitfield = 1, decl_context = FIELD;
10060 else if (decl_context == TEMPLATE_TYPE_ARG)
10061 template_type_arg = true, decl_context = TYPENAME;
10062 else if (decl_context == TPARM)
10063 template_parm_flag = true, decl_context = PARM;
10065 if (initialized > 1)
10066 funcdef_flag = true;
10068 location_t typespec_loc = smallest_type_quals_location (type_quals,
10069 declspecs->locations);
10070 if (typespec_loc == UNKNOWN_LOCATION)
10071 typespec_loc = declspecs->locations[ds_type_spec];
10072 if (typespec_loc == UNKNOWN_LOCATION)
10073 typespec_loc = input_location;
10075 /* Look inside a declarator for the name being declared
10076 and get it as a string, for an error message. */
10077 for (id_declarator = declarator;
10078 id_declarator;
10079 id_declarator = id_declarator->declarator)
10081 if (id_declarator->kind != cdk_id)
10082 innermost_code = id_declarator->kind;
10084 switch (id_declarator->kind)
10086 case cdk_function:
10087 if (id_declarator->declarator
10088 && id_declarator->declarator->kind == cdk_id)
10090 sfk = id_declarator->declarator->u.id.sfk;
10091 if (sfk == sfk_destructor)
10092 flags = DTOR_FLAG;
10094 break;
10096 case cdk_id:
10098 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10099 tree decl = id_declarator->u.id.unqualified_name;
10100 if (!decl)
10101 break;
10102 if (qualifying_scope)
10104 if (at_function_scope_p ())
10106 /* [dcl.meaning]
10108 A declarator-id shall not be qualified except
10109 for ...
10111 None of the cases are permitted in block
10112 scope. */
10113 if (qualifying_scope == global_namespace)
10114 error ("invalid use of qualified-name %<::%D%>",
10115 decl);
10116 else if (TYPE_P (qualifying_scope))
10117 error ("invalid use of qualified-name %<%T::%D%>",
10118 qualifying_scope, decl);
10119 else
10120 error ("invalid use of qualified-name %<%D::%D%>",
10121 qualifying_scope, decl);
10122 return error_mark_node;
10124 else if (TYPE_P (qualifying_scope))
10126 ctype = qualifying_scope;
10127 if (!MAYBE_CLASS_TYPE_P (ctype))
10129 error ("%q#T is not a class or a namespace", ctype);
10130 ctype = NULL_TREE;
10132 else if (innermost_code != cdk_function
10133 && current_class_type
10134 && !uniquely_derived_from_p (ctype,
10135 current_class_type))
10137 error ("invalid use of qualified-name %<%T::%D%>",
10138 qualifying_scope, decl);
10139 return error_mark_node;
10142 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10143 in_namespace = qualifying_scope;
10145 switch (TREE_CODE (decl))
10147 case BIT_NOT_EXPR:
10149 if (innermost_code != cdk_function)
10151 error ("declaration of %qD as non-function", decl);
10152 return error_mark_node;
10154 else if (!qualifying_scope
10155 && !(current_class_type && at_class_scope_p ()))
10157 error ("declaration of %qD as non-member", decl);
10158 return error_mark_node;
10161 tree type = TREE_OPERAND (decl, 0);
10162 if (TYPE_P (type))
10163 type = constructor_name (type);
10164 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10165 dname = decl;
10167 break;
10169 case TEMPLATE_ID_EXPR:
10171 tree fns = TREE_OPERAND (decl, 0);
10173 dname = fns;
10174 if (!identifier_p (dname))
10175 dname = OVL_NAME (dname);
10177 /* Fall through. */
10179 case IDENTIFIER_NODE:
10180 if (identifier_p (decl))
10181 dname = decl;
10183 if (IDENTIFIER_KEYWORD_P (dname))
10185 error ("declarator-id missing; using reserved word %qD",
10186 dname);
10187 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10189 else if (!IDENTIFIER_CONV_OP_P (dname))
10190 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10191 else
10193 gcc_assert (flags == NO_SPECIAL);
10194 flags = TYPENAME_FLAG;
10195 sfk = sfk_conversion;
10196 tree glob = get_global_binding (dname);
10197 if (glob && TREE_CODE (glob) == TYPE_DECL)
10198 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10199 else
10200 name = "<invalid operator>";
10202 break;
10204 default:
10205 gcc_unreachable ();
10207 break;
10210 case cdk_array:
10211 case cdk_pointer:
10212 case cdk_reference:
10213 case cdk_ptrmem:
10214 break;
10216 case cdk_decomp:
10217 name = "structured binding";
10218 break;
10220 case cdk_error:
10221 return error_mark_node;
10223 default:
10224 gcc_unreachable ();
10226 if (id_declarator->kind == cdk_id)
10227 break;
10230 /* [dcl.fct.edf]
10232 The declarator in a function-definition shall have the form
10233 D1 ( parameter-declaration-clause) ... */
10234 if (funcdef_flag && innermost_code != cdk_function)
10236 error ("function definition does not declare parameters");
10237 return error_mark_node;
10240 if (flags == TYPENAME_FLAG
10241 && innermost_code != cdk_function
10242 && ! (ctype && !declspecs->any_specifiers_p))
10244 error ("declaration of %qD as non-function", dname);
10245 return error_mark_node;
10248 if (dname && identifier_p (dname))
10250 if (UDLIT_OPER_P (dname)
10251 && innermost_code != cdk_function)
10253 error ("declaration of %qD as non-function", dname);
10254 return error_mark_node;
10257 if (IDENTIFIER_ANY_OP_P (dname))
10259 if (typedef_p)
10261 error ("declaration of %qD as %<typedef%>", dname);
10262 return error_mark_node;
10264 else if (decl_context == PARM || decl_context == CATCHPARM)
10266 error ("declaration of %qD as parameter", dname);
10267 return error_mark_node;
10272 /* Anything declared one level down from the top level
10273 must be one of the parameters of a function
10274 (because the body is at least two levels down). */
10276 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10277 by not allowing C++ class definitions to specify their parameters
10278 with xdecls (must be spec.d in the parmlist).
10280 Since we now wait to push a class scope until we are sure that
10281 we are in a legitimate method context, we must set oldcname
10282 explicitly (since current_class_name is not yet alive).
10284 We also want to avoid calling this a PARM if it is in a namespace. */
10286 if (decl_context == NORMAL && !toplevel_bindings_p ())
10288 cp_binding_level *b = current_binding_level;
10289 current_binding_level = b->level_chain;
10290 if (current_binding_level != 0 && toplevel_bindings_p ())
10291 decl_context = PARM;
10292 current_binding_level = b;
10295 if (name == NULL)
10296 name = decl_context == PARM ? "parameter" : "type name";
10298 if (concept_p && typedef_p)
10300 error ("%<concept%> cannot appear in a typedef declaration");
10301 return error_mark_node;
10304 if (constexpr_p && typedef_p)
10306 error ("%<constexpr%> cannot appear in a typedef declaration");
10307 return error_mark_node;
10310 /* If there were multiple types specified in the decl-specifier-seq,
10311 issue an error message. */
10312 if (declspecs->multiple_types_p)
10314 error ("two or more data types in declaration of %qs", name);
10315 return error_mark_node;
10318 if (declspecs->conflicting_specifiers_p)
10320 error ("conflicting specifiers in declaration of %qs", name);
10321 return error_mark_node;
10324 /* Extract the basic type from the decl-specifier-seq. */
10325 type = declspecs->type;
10326 if (type == error_mark_node)
10328 type = NULL_TREE;
10329 type_was_error_mark_node = true;
10331 /* If the entire declaration is itself tagged as deprecated then
10332 suppress reports of deprecated items. */
10333 if (type && TREE_DEPRECATED (type)
10334 && deprecated_state != DEPRECATED_SUPPRESS)
10335 warn_deprecated_use (type, NULL_TREE);
10336 if (type && TREE_CODE (type) == TYPE_DECL)
10338 typedef_decl = type;
10339 type = TREE_TYPE (typedef_decl);
10340 if (TREE_DEPRECATED (type)
10341 && DECL_ARTIFICIAL (typedef_decl)
10342 && deprecated_state != DEPRECATED_SUPPRESS)
10343 warn_deprecated_use (type, NULL_TREE);
10345 /* No type at all: default to `int', and set DEFAULTED_INT
10346 because it was not a user-defined typedef. */
10347 if (type == NULL_TREE)
10349 if (signed_p || unsigned_p || long_p || short_p)
10351 /* These imply 'int'. */
10352 type = integer_type_node;
10353 defaulted_int = 1;
10355 /* If we just have "complex", it is equivalent to "complex double". */
10356 else if (!longlong && !explicit_intN
10357 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10359 type = double_type_node;
10360 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10361 "ISO C++ does not support plain %<complex%> meaning "
10362 "%<double complex%>");
10365 /* Gather flags. */
10366 explicit_int = declspecs->explicit_int_p;
10367 explicit_char = declspecs->explicit_char_p;
10369 #if 0
10370 /* See the code below that used this. */
10371 if (typedef_decl)
10372 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10373 #endif
10374 typedef_type = type;
10376 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10377 ctor_return_type = TREE_TYPE (dname);
10378 else
10379 ctor_return_type = ctype;
10381 if (sfk != sfk_none)
10383 type = check_special_function_return_type (sfk, type,
10384 ctor_return_type,
10385 type_quals,
10386 declspecs->locations);
10387 type_quals = TYPE_UNQUALIFIED;
10389 else if (type == NULL_TREE)
10391 int is_main;
10393 explicit_int = -1;
10395 /* We handle `main' specially here, because 'main () { }' is so
10396 common. With no options, it is allowed. With -Wreturn-type,
10397 it is a warning. It is only an error with -pedantic-errors. */
10398 is_main = (funcdef_flag
10399 && dname && identifier_p (dname)
10400 && MAIN_NAME_P (dname)
10401 && ctype == NULL_TREE
10402 && in_namespace == NULL_TREE
10403 && current_namespace == global_namespace);
10405 if (type_was_error_mark_node)
10406 /* We've already issued an error, don't complain more. */;
10407 else if (in_system_header_at (input_location) || flag_ms_extensions)
10408 /* Allow it, sigh. */;
10409 else if (! is_main)
10410 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10411 else if (pedantic)
10412 pedwarn (input_location, OPT_Wpedantic,
10413 "ISO C++ forbids declaration of %qs with no type", name);
10414 else
10415 warning (OPT_Wreturn_type,
10416 "ISO C++ forbids declaration of %qs with no type", name);
10418 if (type_was_error_mark_node && template_parm_flag)
10419 /* FIXME we should be able to propagate the error_mark_node as is
10420 for other contexts too. */
10421 type = error_mark_node;
10422 else
10423 type = integer_type_node;
10426 ctype = NULL_TREE;
10428 if (explicit_intN)
10430 if (! int_n_enabled_p[declspecs->int_n_idx])
10432 error ("%<__int%d%> is not supported by this target",
10433 int_n_data[declspecs->int_n_idx].bitsize);
10434 explicit_intN = false;
10436 else if (pedantic && ! in_system_header_at (input_location))
10437 pedwarn (input_location, OPT_Wpedantic,
10438 "ISO C++ does not support %<__int%d%> for %qs",
10439 int_n_data[declspecs->int_n_idx].bitsize, name);
10442 /* Now process the modifiers that were specified
10443 and check for invalid combinations. */
10445 /* Long double is a special combination. */
10446 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10448 long_p = false;
10449 type = cp_build_qualified_type (long_double_type_node,
10450 cp_type_quals (type));
10453 /* Check all other uses of type modifiers. */
10455 if (unsigned_p || signed_p || long_p || short_p)
10457 int ok = 0;
10459 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
10460 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10461 else if (signed_p && unsigned_p)
10462 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
10463 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
10464 error ("%<long long%> invalid for %qs", name);
10465 else if (long_p && TREE_CODE (type) == REAL_TYPE)
10466 error ("%<long%> invalid for %qs", name);
10467 else if (short_p && TREE_CODE (type) == REAL_TYPE)
10468 error ("%<short%> invalid for %qs", name);
10469 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
10470 error ("%<long%> or %<short%> invalid for %qs", name);
10471 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
10472 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
10473 else if ((long_p || short_p) && explicit_char)
10474 error ("%<long%> or %<short%> specified with char for %qs", name);
10475 else if (long_p && short_p)
10476 error ("%<long%> and %<short%> specified together for %qs", name);
10477 else if (type == char16_type_node || type == char32_type_node)
10479 if (signed_p || unsigned_p)
10480 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10481 else if (short_p || long_p)
10482 error ("%<short%> or %<long%> invalid for %qs", name);
10484 else
10486 ok = 1;
10487 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
10489 pedwarn (input_location, OPT_Wpedantic,
10490 "long, short, signed or unsigned used invalidly for %qs",
10491 name);
10492 if (flag_pedantic_errors)
10493 ok = 0;
10497 /* Discard the type modifiers if they are invalid. */
10498 if (! ok)
10500 unsigned_p = false;
10501 signed_p = false;
10502 long_p = false;
10503 short_p = false;
10504 longlong = 0;
10508 /* Decide whether an integer type is signed or not.
10509 Optionally treat bitfields as signed by default. */
10510 if (unsigned_p
10511 /* [class.bit]
10513 It is implementation-defined whether a plain (neither
10514 explicitly signed or unsigned) char, short, int, or long
10515 bit-field is signed or unsigned.
10517 Naturally, we extend this to long long as well. Note that
10518 this does not include wchar_t. */
10519 || (bitfield && !flag_signed_bitfields
10520 && !signed_p
10521 /* A typedef for plain `int' without `signed' can be
10522 controlled just like plain `int', but a typedef for
10523 `signed int' cannot be so controlled. */
10524 && !(typedef_decl
10525 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10526 && TREE_CODE (type) == INTEGER_TYPE
10527 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10529 if (explicit_intN)
10530 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10531 else if (longlong)
10532 type = long_long_unsigned_type_node;
10533 else if (long_p)
10534 type = long_unsigned_type_node;
10535 else if (short_p)
10536 type = short_unsigned_type_node;
10537 else if (type == char_type_node)
10538 type = unsigned_char_type_node;
10539 else if (typedef_decl)
10540 type = unsigned_type_for (type);
10541 else
10542 type = unsigned_type_node;
10544 else if (signed_p && type == char_type_node)
10545 type = signed_char_type_node;
10546 else if (explicit_intN)
10547 type = int_n_trees[declspecs->int_n_idx].signed_type;
10548 else if (longlong)
10549 type = long_long_integer_type_node;
10550 else if (long_p)
10551 type = long_integer_type_node;
10552 else if (short_p)
10553 type = short_integer_type_node;
10555 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10557 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10558 error ("complex invalid for %qs", name);
10559 /* If a modifier is specified, the resulting complex is the complex
10560 form of TYPE. E.g, "complex short" is "complex short int". */
10561 else if (type == integer_type_node)
10562 type = complex_integer_type_node;
10563 else if (type == float_type_node)
10564 type = complex_float_type_node;
10565 else if (type == double_type_node)
10566 type = complex_double_type_node;
10567 else if (type == long_double_type_node)
10568 type = complex_long_double_type_node;
10569 else
10570 type = build_complex_type (type);
10573 /* If we're using the injected-class-name to form a compound type or a
10574 declaration, replace it with the underlying class so we don't get
10575 redundant typedefs in the debug output. But if we are returning the
10576 type unchanged, leave it alone so that it's available to
10577 maybe_get_template_decl_from_type_decl. */
10578 if (CLASS_TYPE_P (type)
10579 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10580 && type == TREE_TYPE (TYPE_NAME (type))
10581 && (declarator || type_quals))
10582 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10584 type_quals |= cp_type_quals (type);
10585 type = cp_build_qualified_type_real
10586 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10587 || declspecs->decltype_p)
10588 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10589 /* We might have ignored or rejected some of the qualifiers. */
10590 type_quals = cp_type_quals (type);
10592 if (cxx_dialect >= cxx17 && type && is_auto (type)
10593 && innermost_code != cdk_function
10594 && id_declarator && declarator != id_declarator)
10595 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10597 error_at (typespec_loc, "template placeholder type %qT must be followed "
10598 "by a simple declarator-id", type);
10599 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10602 staticp = 0;
10603 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10604 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10605 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10607 storage_class = declspecs->storage_class;
10608 if (storage_class == sc_static)
10609 staticp = 1 + (decl_context == FIELD);
10611 if (virtualp)
10613 if (staticp == 2)
10615 error ("member %qD cannot be declared both %<virtual%> "
10616 "and %<static%>", dname);
10617 storage_class = sc_none;
10618 staticp = 0;
10620 if (constexpr_p)
10621 error ("member %qD cannot be declared both %<virtual%> "
10622 "and %<constexpr%>", dname);
10624 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10626 /* Issue errors about use of storage classes for parameters. */
10627 if (decl_context == PARM)
10629 if (typedef_p)
10631 error ("typedef declaration invalid in parameter declaration");
10632 return error_mark_node;
10634 else if (template_parm_flag && storage_class != sc_none)
10636 error ("storage class specified for template parameter %qs", name);
10637 return error_mark_node;
10639 else if (storage_class == sc_static
10640 || storage_class == sc_extern
10641 || thread_p)
10642 error ("storage class specifiers invalid in parameter declarations");
10644 /* Function parameters cannot be concept. */
10645 if (concept_p)
10646 error ("a parameter cannot be declared %<concept%>");
10647 /* Function parameters cannot be constexpr. If we saw one, moan
10648 and pretend it wasn't there. */
10649 else if (constexpr_p)
10651 error ("a parameter cannot be declared %<constexpr%>");
10652 constexpr_p = 0;
10656 /* Give error if `virtual' is used outside of class declaration. */
10657 if (virtualp
10658 && (current_class_name == NULL_TREE || decl_context != FIELD))
10660 error_at (declspecs->locations[ds_virtual],
10661 "%<virtual%> outside class declaration");
10662 virtualp = 0;
10665 if (innermost_code == cdk_decomp)
10667 location_t loc = (declarator->kind == cdk_reference
10668 ? declarator->declarator->id_loc : declarator->id_loc);
10669 if (inlinep)
10670 error_at (declspecs->locations[ds_inline],
10671 "structured binding declaration cannot be %<inline%>");
10672 if (typedef_p)
10673 error_at (declspecs->locations[ds_typedef],
10674 "structured binding declaration cannot be %<typedef%>");
10675 if (constexpr_p)
10676 error_at (declspecs->locations[ds_constexpr], "structured "
10677 "binding declaration cannot be %<constexpr%>");
10678 if (thread_p)
10679 error_at (declspecs->locations[ds_thread],
10680 "structured binding declaration cannot be %qs",
10681 declspecs->gnu_thread_keyword_p
10682 ? "__thread" : "thread_local");
10683 if (concept_p)
10684 error_at (declspecs->locations[ds_concept],
10685 "structured binding declaration cannot be %<concept%>");
10686 switch (storage_class)
10688 case sc_none:
10689 break;
10690 case sc_register:
10691 error_at (loc, "structured binding declaration cannot be "
10692 "%<register%>");
10693 break;
10694 case sc_static:
10695 error_at (loc, "structured binding declaration cannot be "
10696 "%<static%>");
10697 break;
10698 case sc_extern:
10699 error_at (loc, "structured binding declaration cannot be "
10700 "%<extern%>");
10701 break;
10702 case sc_mutable:
10703 error_at (loc, "structured binding declaration cannot be "
10704 "%<mutable%>");
10705 break;
10706 case sc_auto:
10707 error_at (loc, "structured binding declaration cannot be "
10708 "C++98 %<auto%>");
10709 break;
10710 default:
10711 gcc_unreachable ();
10713 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
10714 || TYPE_IDENTIFIER (type) != auto_identifier)
10716 if (type != error_mark_node)
10718 error_at (loc, "structured binding declaration cannot have "
10719 "type %qT", type);
10720 inform (loc,
10721 "type must be cv-qualified %<auto%> or reference to "
10722 "cv-qualified %<auto%>");
10724 type = build_qualified_type (make_auto (), type_quals);
10725 declspecs->type = type;
10727 inlinep = 0;
10728 typedef_p = 0;
10729 constexpr_p = 0;
10730 thread_p = 0;
10731 concept_p = 0;
10732 storage_class = sc_none;
10733 staticp = 0;
10734 declspecs->storage_class = sc_none;
10735 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
10738 /* Static anonymous unions are dealt with here. */
10739 if (staticp && decl_context == TYPENAME
10740 && declspecs->type
10741 && ANON_AGGR_TYPE_P (declspecs->type))
10742 decl_context = FIELD;
10744 /* Warn about storage classes that are invalid for certain
10745 kinds of declarations (parameters, typenames, etc.). */
10746 if (thread_p
10747 && ((storage_class
10748 && storage_class != sc_extern
10749 && storage_class != sc_static)
10750 || typedef_p))
10752 error ("multiple storage classes in declaration of %qs", name);
10753 thread_p = false;
10755 if (decl_context != NORMAL
10756 && ((storage_class != sc_none
10757 && storage_class != sc_mutable)
10758 || thread_p))
10760 if ((decl_context == PARM || decl_context == CATCHPARM)
10761 && (storage_class == sc_register
10762 || storage_class == sc_auto))
10764 else if (typedef_p)
10766 else if (decl_context == FIELD
10767 /* C++ allows static class elements. */
10768 && storage_class == sc_static)
10769 /* C++ also allows inlines and signed and unsigned elements,
10770 but in those cases we don't come in here. */
10772 else
10774 if (decl_context == FIELD)
10775 error ("storage class specified for %qs", name);
10776 else
10778 if (decl_context == PARM || decl_context == CATCHPARM)
10779 error ("storage class specified for parameter %qs", name);
10780 else
10781 error ("storage class specified for typename");
10783 if (storage_class == sc_register
10784 || storage_class == sc_auto
10785 || storage_class == sc_extern
10786 || thread_p)
10787 storage_class = sc_none;
10790 else if (storage_class == sc_extern && funcdef_flag
10791 && ! toplevel_bindings_p ())
10792 error ("nested function %qs declared %<extern%>", name);
10793 else if (toplevel_bindings_p ())
10795 if (storage_class == sc_auto)
10796 error ("top-level declaration of %qs specifies %<auto%>", name);
10798 else if (thread_p
10799 && storage_class != sc_extern
10800 && storage_class != sc_static)
10802 if (declspecs->gnu_thread_keyword_p)
10803 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
10804 "declared %<__thread%>", name);
10806 /* When thread_local is applied to a variable of block scope the
10807 storage-class-specifier static is implied if it does not appear
10808 explicitly. */
10809 storage_class = declspecs->storage_class = sc_static;
10810 staticp = 1;
10813 if (storage_class && friendp)
10815 error ("storage class specifiers invalid in friend function declarations");
10816 storage_class = sc_none;
10817 staticp = 0;
10820 if (!id_declarator)
10821 unqualified_id = NULL_TREE;
10822 else
10824 unqualified_id = id_declarator->u.id.unqualified_name;
10825 switch (TREE_CODE (unqualified_id))
10827 case BIT_NOT_EXPR:
10828 unqualified_id = TREE_OPERAND (unqualified_id, 0);
10829 if (TYPE_P (unqualified_id))
10830 unqualified_id = constructor_name (unqualified_id);
10831 break;
10833 case IDENTIFIER_NODE:
10834 case TEMPLATE_ID_EXPR:
10835 break;
10837 default:
10838 gcc_unreachable ();
10842 if (declspecs->std_attributes)
10844 /* Apply the c++11 attributes to the type preceding them. */
10845 input_location = declspecs->locations[ds_std_attribute];
10846 decl_attributes (&type, declspecs->std_attributes, 0);
10847 input_location = saved_loc;
10850 /* Determine the type of the entity declared by recurring on the
10851 declarator. */
10852 for (; declarator; declarator = declarator->declarator)
10854 const cp_declarator *inner_declarator;
10855 tree attrs;
10857 if (type == error_mark_node)
10858 return error_mark_node;
10860 attrs = declarator->attributes;
10861 if (attrs)
10863 int attr_flags;
10865 attr_flags = 0;
10866 if (declarator == NULL || declarator->kind == cdk_id)
10867 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
10868 if (declarator->kind == cdk_function)
10869 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
10870 if (declarator->kind == cdk_array)
10871 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
10872 returned_attrs = decl_attributes (&type,
10873 chainon (returned_attrs, attrs),
10874 attr_flags);
10877 inner_declarator = declarator->declarator;
10879 /* We don't want to warn in parameter context because we don't
10880 yet know if the parse will succeed, and this might turn out
10881 to be a constructor call. */
10882 if (decl_context != PARM
10883 && decl_context != TYPENAME
10884 && declarator->parenthesized != UNKNOWN_LOCATION
10885 /* If the type is class-like and the inner name used a
10886 global namespace qualifier, we need the parens.
10887 Unfortunately all we can tell is whether a qualified name
10888 was used or not. */
10889 && !(inner_declarator
10890 && inner_declarator->kind == cdk_id
10891 && inner_declarator->u.id.qualifying_scope
10892 && (MAYBE_CLASS_TYPE_P (type)
10893 || TREE_CODE (type) == ENUMERAL_TYPE)))
10894 warning_at (declarator->parenthesized, OPT_Wparentheses,
10895 "unnecessary parentheses in declaration of %qs", name);
10896 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
10897 break;
10899 switch (declarator->kind)
10901 case cdk_array:
10902 type = create_array_type_for_decl (dname, type,
10903 declarator->u.array.bounds);
10904 if (!valid_array_size_p (input_location, type, dname))
10905 type = error_mark_node;
10907 if (declarator->std_attributes)
10908 /* [dcl.array]/1:
10910 The optional attribute-specifier-seq appertains to the
10911 array. */
10912 returned_attrs = chainon (returned_attrs,
10913 declarator->std_attributes);
10914 break;
10916 case cdk_function:
10918 tree arg_types;
10919 int funcdecl_p;
10921 /* Declaring a function type. */
10923 input_location = declspecs->locations[ds_type_spec];
10924 abstract_virtuals_error (ACU_RETURN, type);
10925 input_location = saved_loc;
10927 /* Pick up type qualifiers which should be applied to `this'. */
10928 memfn_quals = declarator->u.function.qualifiers;
10929 /* Pick up virt-specifiers. */
10930 virt_specifiers = declarator->u.function.virt_specifiers;
10931 /* And ref-qualifier, too */
10932 rqual = declarator->u.function.ref_qualifier;
10933 /* And tx-qualifier. */
10934 tree tx_qual = declarator->u.function.tx_qualifier;
10935 /* Pick up the exception specifications. */
10936 raises = declarator->u.function.exception_specification;
10937 /* If the exception-specification is ill-formed, let's pretend
10938 there wasn't one. */
10939 if (raises == error_mark_node)
10940 raises = NULL_TREE;
10942 if (reqs)
10943 error_at (location_of (reqs), "requires-clause on return type");
10944 reqs = declarator->u.function.requires_clause;
10946 /* Say it's a definition only for the CALL_EXPR
10947 closest to the identifier. */
10948 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
10950 /* Handle a late-specified return type. */
10951 tree late_return_type = declarator->u.function.late_return_type;
10952 if (funcdecl_p)
10954 if (tree auto_node = type_uses_auto (type))
10956 if (!late_return_type)
10958 if (current_class_type
10959 && LAMBDA_TYPE_P (current_class_type))
10960 /* OK for C++11 lambdas. */;
10961 else if (cxx_dialect < cxx14)
10963 error ("%qs function uses "
10964 "%<auto%> type specifier without trailing "
10965 "return type", name);
10966 inform (input_location, "deduced return type "
10967 "only available with -std=c++14 or "
10968 "-std=gnu++14");
10970 else if (virtualp)
10972 error ("virtual function cannot "
10973 "have deduced return type");
10974 virtualp = false;
10977 else if (!is_auto (type) && sfk != sfk_conversion)
10979 error ("%qs function with trailing return type has"
10980 " %qT as its type rather than plain %<auto%>",
10981 name, type);
10982 return error_mark_node;
10984 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
10986 if (!late_return_type)
10988 if (dguide_name_p (unqualified_id))
10989 error_at (declarator->id_loc, "deduction guide "
10990 "for %qT must have trailing return "
10991 "type", TREE_TYPE (tmpl));
10992 else
10993 error_at (declarator->id_loc, "deduced class "
10994 "type %qT in function return type",
10995 type);
10996 inform (DECL_SOURCE_LOCATION (tmpl),
10997 "%qD declared here", tmpl);
10999 else if (CLASS_TYPE_P (late_return_type)
11000 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11001 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11002 == tmpl))
11003 /* OK */;
11004 else
11005 error ("trailing return type %qT of deduction guide "
11006 "is not a specialization of %qT",
11007 late_return_type, TREE_TYPE (tmpl));
11010 else if (late_return_type
11011 && sfk != sfk_conversion)
11013 if (cxx_dialect < cxx11)
11014 /* Not using maybe_warn_cpp0x because this should
11015 always be an error. */
11016 error ("trailing return type only available with "
11017 "-std=c++11 or -std=gnu++11");
11018 else
11019 error ("%qs function with trailing return type not "
11020 "declared with %<auto%> type specifier", name);
11021 return error_mark_node;
11024 type = splice_late_return_type (type, late_return_type);
11025 if (type == error_mark_node)
11026 return error_mark_node;
11028 if (late_return_type)
11030 late_return_type_p = true;
11031 type_quals = cp_type_quals (type);
11034 if (type_quals != TYPE_UNQUALIFIED)
11036 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11037 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11038 "qualifiers ignored on function return type");
11039 /* We now know that the TYPE_QUALS don't apply to the
11040 decl, but to its return type. */
11041 type_quals = TYPE_UNQUALIFIED;
11044 /* Error about some types functions can't return. */
11046 if (TREE_CODE (type) == FUNCTION_TYPE)
11048 error_at (typespec_loc, "%qs declared as function returning "
11049 "a function", name);
11050 return error_mark_node;
11052 if (TREE_CODE (type) == ARRAY_TYPE)
11054 error_at (typespec_loc, "%qs declared as function returning "
11055 "an array", name);
11056 return error_mark_node;
11059 if (ctype == NULL_TREE
11060 && decl_context == FIELD
11061 && funcdecl_p
11062 && friendp == 0)
11063 ctype = current_class_type;
11065 if (ctype && (sfk == sfk_constructor
11066 || sfk == sfk_destructor))
11068 /* We are within a class's scope. If our declarator name
11069 is the same as the class name, and we are defining
11070 a function, then it is a constructor/destructor, and
11071 therefore returns a void type. */
11073 /* ISO C++ 12.4/2. A destructor may not be declared
11074 const or volatile. A destructor may not be static.
11075 A destructor may not be declared with ref-qualifier.
11077 ISO C++ 12.1. A constructor may not be declared
11078 const or volatile. A constructor may not be
11079 virtual. A constructor may not be static.
11080 A constructor may not be declared with ref-qualifier. */
11081 if (staticp == 2)
11082 error ((flags == DTOR_FLAG)
11083 ? G_("destructor cannot be static member function")
11084 : G_("constructor cannot be static member function"));
11085 if (memfn_quals)
11087 error ((flags == DTOR_FLAG)
11088 ? G_("destructors may not be cv-qualified")
11089 : G_("constructors may not be cv-qualified"));
11090 memfn_quals = TYPE_UNQUALIFIED;
11093 if (rqual)
11095 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11096 error ((flags == DTOR_FLAG)
11097 ? G_("destructors may not be ref-qualified")
11098 : G_("constructors may not be ref-qualified"));
11099 rqual = REF_QUAL_NONE;
11102 if (decl_context == FIELD
11103 && !member_function_or_else (ctype,
11104 current_class_type,
11105 flags))
11106 return error_mark_node;
11108 if (flags != DTOR_FLAG)
11110 /* It's a constructor. */
11111 if (explicitp == 1)
11112 explicitp = 2;
11113 if (virtualp)
11115 permerror (input_location,
11116 "constructors cannot be declared %<virtual%>");
11117 virtualp = 0;
11119 if (decl_context == FIELD
11120 && sfk != sfk_constructor)
11121 return error_mark_node;
11123 if (decl_context == FIELD)
11124 staticp = 0;
11126 else if (friendp)
11128 if (virtualp)
11130 /* Cannot be both friend and virtual. */
11131 error ("virtual functions cannot be friends");
11132 friendp = 0;
11134 if (decl_context == NORMAL)
11135 error ("friend declaration not in class definition");
11136 if (current_function_decl && funcdef_flag)
11137 error ("can%'t define friend function %qs in a local "
11138 "class definition",
11139 name);
11141 else if (ctype && sfk == sfk_conversion)
11143 if (explicitp == 1)
11145 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11146 explicitp = 2;
11148 if (late_return_type_p)
11149 error ("a conversion function cannot have a trailing return type");
11151 else if (sfk == sfk_deduction_guide)
11153 if (explicitp == 1)
11154 explicitp = 2;
11157 arg_types = grokparms (declarator->u.function.parameters,
11158 &parms);
11160 if (inner_declarator
11161 && inner_declarator->kind == cdk_id
11162 && inner_declarator->u.id.sfk == sfk_destructor
11163 && arg_types != void_list_node)
11165 error ("destructors may not have parameters");
11166 arg_types = void_list_node;
11167 parms = NULL_TREE;
11170 type = build_function_type (type, arg_types);
11172 tree attrs = declarator->std_attributes;
11173 if (tx_qual)
11175 tree att = build_tree_list (tx_qual, NULL_TREE);
11176 /* transaction_safe applies to the type, but
11177 transaction_safe_dynamic applies to the function. */
11178 if (is_attribute_p ("transaction_safe", tx_qual))
11179 attrs = chainon (attrs, att);
11180 else
11181 returned_attrs = chainon (returned_attrs, att);
11183 if (attrs)
11184 /* [dcl.fct]/2:
11186 The optional attribute-specifier-seq appertains to
11187 the function type. */
11188 decl_attributes (&type, attrs, 0);
11190 if (raises)
11191 type = build_exception_variant (type, raises);
11193 break;
11195 case cdk_pointer:
11196 case cdk_reference:
11197 case cdk_ptrmem:
11198 /* Filter out pointers-to-references and references-to-references.
11199 We can get these if a TYPE_DECL is used. */
11201 if (TREE_CODE (type) == REFERENCE_TYPE)
11203 if (declarator->kind != cdk_reference)
11205 error ("cannot declare pointer to %q#T", type);
11206 type = TREE_TYPE (type);
11209 /* In C++0x, we allow reference to reference declarations
11210 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11211 and template type arguments [14.3.1/4 temp.arg.type]. The
11212 check for direct reference to reference declarations, which
11213 are still forbidden, occurs below. Reasoning behind the change
11214 can be found in DR106, DR540, and the rvalue reference
11215 proposals. */
11216 else if (cxx_dialect == cxx98)
11218 error ("cannot declare reference to %q#T", type);
11219 type = TREE_TYPE (type);
11222 else if (VOID_TYPE_P (type))
11224 if (declarator->kind == cdk_reference)
11225 error ("cannot declare reference to %q#T", type);
11226 else if (declarator->kind == cdk_ptrmem)
11227 error ("cannot declare pointer to %q#T member", type);
11230 /* We now know that the TYPE_QUALS don't apply to the decl,
11231 but to the target of the pointer. */
11232 type_quals = TYPE_UNQUALIFIED;
11234 /* This code used to handle METHOD_TYPE, but I don't think it's
11235 possible to get it here anymore. */
11236 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11237 if (declarator->kind == cdk_ptrmem
11238 && TREE_CODE (type) == FUNCTION_TYPE)
11240 memfn_quals |= type_memfn_quals (type);
11241 type = build_memfn_type (type,
11242 declarator->u.pointer.class_type,
11243 memfn_quals,
11244 rqual);
11245 if (type == error_mark_node)
11246 return error_mark_node;
11248 rqual = REF_QUAL_NONE;
11249 memfn_quals = TYPE_UNQUALIFIED;
11252 if (TREE_CODE (type) == FUNCTION_TYPE
11253 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11254 || type_memfn_rqual (type) != REF_QUAL_NONE))
11255 error (declarator->kind == cdk_reference
11256 ? G_("cannot declare reference to qualified function type %qT")
11257 : G_("cannot declare pointer to qualified function type %qT"),
11258 type);
11260 /* When the pointed-to type involves components of variable size,
11261 care must be taken to ensure that the size evaluation code is
11262 emitted early enough to dominate all the possible later uses
11263 and late enough for the variables on which it depends to have
11264 been assigned.
11266 This is expected to happen automatically when the pointed-to
11267 type has a name/declaration of it's own, but special attention
11268 is required if the type is anonymous.
11270 We handle the NORMAL and FIELD contexts here by inserting a
11271 dummy statement that just evaluates the size at a safe point
11272 and ensures it is not deferred until e.g. within a deeper
11273 conditional context (c++/43555).
11275 We expect nothing to be needed here for PARM or TYPENAME.
11276 Evaluating the size at this point for TYPENAME would
11277 actually be incorrect, as we might be in the middle of an
11278 expression with side effects on the pointed-to type size
11279 "arguments" prior to the pointer declaration point and the
11280 size evaluation could end up prior to the side effects. */
11282 if (!TYPE_NAME (type)
11283 && (decl_context == NORMAL || decl_context == FIELD)
11284 && at_function_scope_p ()
11285 && variably_modified_type_p (type, NULL_TREE))
11287 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11288 NULL_TREE, type);
11289 add_decl_expr (TYPE_NAME (type));
11292 if (declarator->kind == cdk_reference)
11294 /* In C++0x, the type we are creating a reference to might be
11295 a typedef which is itself a reference type. In that case,
11296 we follow the reference collapsing rules in
11297 [7.1.3/8 dcl.typedef] to create the final reference type:
11299 "If a typedef TD names a type that is a reference to a type
11300 T, an attempt to create the type 'lvalue reference to cv TD'
11301 creates the type 'lvalue reference to T,' while an attempt
11302 to create the type "rvalue reference to cv TD' creates the
11303 type TD."
11305 if (VOID_TYPE_P (type))
11306 /* We already gave an error. */;
11307 else if (TREE_CODE (type) == REFERENCE_TYPE)
11309 if (declarator->u.reference.rvalue_ref)
11310 /* Leave type alone. */;
11311 else
11312 type = cp_build_reference_type (TREE_TYPE (type), false);
11314 else
11315 type = cp_build_reference_type
11316 (type, declarator->u.reference.rvalue_ref);
11318 /* In C++0x, we need this check for direct reference to
11319 reference declarations, which are forbidden by
11320 [8.3.2/5 dcl.ref]. Reference to reference declarations
11321 are only allowed indirectly through typedefs and template
11322 type arguments. Example:
11324 void foo(int & &); // invalid ref-to-ref decl
11326 typedef int & int_ref;
11327 void foo(int_ref &); // valid ref-to-ref decl
11329 if (inner_declarator && inner_declarator->kind == cdk_reference)
11330 error ("cannot declare reference to %q#T, which is not "
11331 "a typedef or a template type argument", type);
11333 else if (TREE_CODE (type) == METHOD_TYPE)
11334 type = build_ptrmemfunc_type (build_pointer_type (type));
11335 else if (declarator->kind == cdk_ptrmem)
11337 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11338 != NAMESPACE_DECL);
11339 if (declarator->u.pointer.class_type == error_mark_node)
11340 /* We will already have complained. */
11341 type = error_mark_node;
11342 else
11343 type = build_ptrmem_type (declarator->u.pointer.class_type,
11344 type);
11346 else
11347 type = build_pointer_type (type);
11349 /* Process a list of type modifier keywords (such as
11350 const or volatile) that were given inside the `*' or `&'. */
11352 if (declarator->u.pointer.qualifiers)
11354 type
11355 = cp_build_qualified_type (type,
11356 declarator->u.pointer.qualifiers);
11357 type_quals = cp_type_quals (type);
11360 /* Apply C++11 attributes to the pointer, and not to the
11361 type pointed to. This is unlike what is done for GNU
11362 attributes above. It is to comply with [dcl.ptr]/1:
11364 [the optional attribute-specifier-seq (7.6.1) appertains
11365 to the pointer and not to the object pointed to]. */
11366 if (declarator->std_attributes)
11367 decl_attributes (&type, declarator->std_attributes,
11370 ctype = NULL_TREE;
11371 break;
11373 case cdk_error:
11374 break;
11376 default:
11377 gcc_unreachable ();
11381 /* A `constexpr' specifier used in an object declaration declares
11382 the object as `const'. */
11383 if (constexpr_p && innermost_code != cdk_function)
11385 /* DR1688 says that a `constexpr' specifier in combination with
11386 `volatile' is valid. */
11388 if (TREE_CODE (type) != REFERENCE_TYPE)
11390 type_quals |= TYPE_QUAL_CONST;
11391 type = cp_build_qualified_type (type, type_quals);
11395 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11396 && TREE_CODE (type) != FUNCTION_TYPE
11397 && TREE_CODE (type) != METHOD_TYPE
11398 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11400 error ("template-id %qD used as a declarator",
11401 unqualified_id);
11402 unqualified_id = dname;
11405 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11406 qualified with a class-name, turn it into a METHOD_TYPE, unless
11407 we know that the function is static. We take advantage of this
11408 opportunity to do other processing that pertains to entities
11409 explicitly declared to be class members. Note that if DECLARATOR
11410 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11411 would not have exited the loop above. */
11412 if (declarator
11413 && declarator->kind == cdk_id
11414 && declarator->u.id.qualifying_scope
11415 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11417 ctype = declarator->u.id.qualifying_scope;
11418 ctype = TYPE_MAIN_VARIANT (ctype);
11419 template_count = num_template_headers_for_class (ctype);
11421 if (ctype == current_class_type)
11423 if (friendp)
11425 permerror (input_location, "member functions are implicitly "
11426 "friends of their class");
11427 friendp = 0;
11429 else
11430 permerror (declarator->id_loc,
11431 "extra qualification %<%T::%> on member %qs",
11432 ctype, name);
11434 else if (/* If the qualifying type is already complete, then we
11435 can skip the following checks. */
11436 !COMPLETE_TYPE_P (ctype)
11437 && (/* If the function is being defined, then
11438 qualifying type must certainly be complete. */
11439 funcdef_flag
11440 /* A friend declaration of "T::f" is OK, even if
11441 "T" is a template parameter. But, if this
11442 function is not a friend, the qualifying type
11443 must be a class. */
11444 || (!friendp && !CLASS_TYPE_P (ctype))
11445 /* For a declaration, the type need not be
11446 complete, if either it is dependent (since there
11447 is no meaningful definition of complete in that
11448 case) or the qualifying class is currently being
11449 defined. */
11450 || !(dependent_type_p (ctype)
11451 || currently_open_class (ctype)))
11452 /* Check that the qualifying type is complete. */
11453 && !complete_type_or_else (ctype, NULL_TREE))
11454 return error_mark_node;
11455 else if (TREE_CODE (type) == FUNCTION_TYPE)
11457 if (current_class_type
11458 && (!friendp || funcdef_flag || initialized))
11460 error (funcdef_flag || initialized
11461 ? G_("cannot define member function %<%T::%s%> "
11462 "within %qT")
11463 : G_("cannot declare member function %<%T::%s%> "
11464 "within %qT"),
11465 ctype, name, current_class_type);
11466 return error_mark_node;
11469 else if (typedef_p && current_class_type)
11471 error ("cannot declare member %<%T::%s%> within %qT",
11472 ctype, name, current_class_type);
11473 return error_mark_node;
11477 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11478 ctype = current_class_type;
11480 /* Now TYPE has the actual type. */
11482 if (returned_attrs)
11484 if (attrlist)
11485 *attrlist = chainon (returned_attrs, *attrlist);
11486 else
11487 attrlist = &returned_attrs;
11490 if (declarator
11491 && declarator->kind == cdk_id
11492 && declarator->std_attributes
11493 && attrlist != NULL)
11494 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11495 a declarator-id appertains to the entity that is declared. */
11496 *attrlist = chainon (*attrlist, declarator->std_attributes);
11498 /* Handle parameter packs. */
11499 if (parameter_pack_p)
11501 if (decl_context == PARM)
11502 /* Turn the type into a pack expansion.*/
11503 type = make_pack_expansion (type);
11504 else
11505 error ("non-parameter %qs cannot be a parameter pack", name);
11508 if ((decl_context == FIELD || decl_context == PARM)
11509 && !processing_template_decl
11510 && variably_modified_type_p (type, NULL_TREE))
11512 if (decl_context == FIELD)
11513 error ("data member may not have variably modified type %qT", type);
11514 else
11515 error ("parameter may not have variably modified type %qT", type);
11516 type = error_mark_node;
11519 if (explicitp == 1 || (explicitp && friendp))
11521 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11522 in the declaration of a constructor or conversion function within
11523 a class definition. */
11524 if (!current_class_type)
11525 error_at (declspecs->locations[ds_explicit],
11526 "%<explicit%> outside class declaration");
11527 else if (friendp)
11528 error_at (declspecs->locations[ds_explicit],
11529 "%<explicit%> in friend declaration");
11530 else
11531 error_at (declspecs->locations[ds_explicit],
11532 "only declarations of constructors and conversion operators "
11533 "can be %<explicit%>");
11534 explicitp = 0;
11537 if (storage_class == sc_mutable)
11539 if (decl_context != FIELD || friendp)
11541 error ("non-member %qs cannot be declared %<mutable%>", name);
11542 storage_class = sc_none;
11544 else if (decl_context == TYPENAME || typedef_p)
11546 error ("non-object member %qs cannot be declared %<mutable%>", name);
11547 storage_class = sc_none;
11549 else if (TREE_CODE (type) == FUNCTION_TYPE
11550 || TREE_CODE (type) == METHOD_TYPE)
11552 error ("function %qs cannot be declared %<mutable%>", name);
11553 storage_class = sc_none;
11555 else if (staticp)
11557 error ("static %qs cannot be declared %<mutable%>", name);
11558 storage_class = sc_none;
11560 else if (type_quals & TYPE_QUAL_CONST)
11562 error ("const %qs cannot be declared %<mutable%>", name);
11563 storage_class = sc_none;
11565 else if (TREE_CODE (type) == REFERENCE_TYPE)
11567 permerror (input_location, "reference %qs cannot be declared "
11568 "%<mutable%>", name);
11569 storage_class = sc_none;
11573 /* If this is declaring a typedef name, return a TYPE_DECL. */
11574 if (typedef_p && decl_context != TYPENAME)
11576 tree decl;
11578 /* This declaration:
11580 typedef void f(int) const;
11582 declares a function type which is not a member of any
11583 particular class, but which is cv-qualified; for
11584 example "f S::*" declares a pointer to a const-qualified
11585 member function of S. We record the cv-qualification in the
11586 function type. */
11587 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11589 type = apply_memfn_quals (type, memfn_quals, rqual);
11591 /* We have now dealt with these qualifiers. */
11592 memfn_quals = TYPE_UNQUALIFIED;
11593 rqual = REF_QUAL_NONE;
11596 if (type_uses_auto (type))
11598 error ("typedef declared %<auto%>");
11599 type = error_mark_node;
11602 if (reqs)
11603 error_at (location_of (reqs), "requires-clause on typedef");
11605 if (decl_context == FIELD)
11606 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11607 else
11608 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11609 if (id_declarator && declarator->u.id.qualifying_scope) {
11610 error_at (DECL_SOURCE_LOCATION (decl),
11611 "typedef name may not be a nested-name-specifier");
11612 TREE_TYPE (decl) = error_mark_node;
11615 if (decl_context != FIELD)
11617 if (!current_function_decl)
11618 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11619 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
11620 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11621 (current_function_decl)))
11622 /* The TYPE_DECL is "abstract" because there will be
11623 clones of this constructor/destructor, and there will
11624 be copies of this TYPE_DECL generated in those
11625 clones. The decloning optimization (for space) may
11626 revert this subsequently if it determines that
11627 the clones should share a common implementation. */
11628 DECL_ABSTRACT_P (decl) = true;
11630 else if (current_class_type
11631 && constructor_name_p (unqualified_id, current_class_type))
11632 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11633 "as enclosing class",
11634 unqualified_id);
11636 /* If the user declares "typedef struct {...} foo" then the
11637 struct will have an anonymous name. Fill that name in now.
11638 Nothing can refer to it, so nothing needs know about the name
11639 change. */
11640 if (type != error_mark_node
11641 && unqualified_id
11642 && TYPE_NAME (type)
11643 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11644 && TYPE_UNNAMED_P (type)
11645 && declspecs->type_definition_p
11646 && attributes_naming_typedef_ok (*attrlist)
11647 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11648 name_unnamed_type (type, decl);
11650 if (signed_p
11651 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11652 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11654 bad_specifiers (decl, BSP_TYPE, virtualp,
11655 memfn_quals != TYPE_UNQUALIFIED,
11656 inlinep, friendp, raises != NULL_TREE);
11658 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11659 /* Acknowledge that this was written:
11660 `using analias = atype;'. */
11661 TYPE_DECL_ALIAS_P (decl) = 1;
11663 return decl;
11666 /* Detect the case of an array type of unspecified size
11667 which came, as such, direct from a typedef name.
11668 We must copy the type, so that the array's domain can be
11669 individually set by the object's initializer. */
11671 if (type && typedef_type
11672 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11673 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11674 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11676 /* Detect where we're using a typedef of function type to declare a
11677 function. PARMS will not be set, so we must create it now. */
11679 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11681 tree decls = NULL_TREE;
11682 tree args;
11684 for (args = TYPE_ARG_TYPES (type);
11685 args && args != void_list_node;
11686 args = TREE_CHAIN (args))
11688 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
11689 TREE_VALUE (args));
11691 DECL_CHAIN (decl) = decls;
11692 decls = decl;
11695 parms = nreverse (decls);
11697 if (decl_context != TYPENAME)
11699 /* The qualifiers on the function type become the qualifiers on
11700 the non-static member function. */
11701 memfn_quals |= type_memfn_quals (type);
11702 rqual = type_memfn_rqual (type);
11703 type_quals = TYPE_UNQUALIFIED;
11707 /* If this is a type name (such as, in a cast or sizeof),
11708 compute the type and return it now. */
11710 if (decl_context == TYPENAME)
11712 /* Note that here we don't care about type_quals. */
11714 /* Special case: "friend class foo" looks like a TYPENAME context. */
11715 if (friendp)
11717 if (inlinep)
11719 error ("%<inline%> specified for friend class declaration");
11720 inlinep = 0;
11723 if (!current_aggr)
11725 /* Don't allow friend declaration without a class-key. */
11726 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11727 permerror (input_location, "template parameters cannot be friends");
11728 else if (TREE_CODE (type) == TYPENAME_TYPE)
11729 permerror (input_location, "friend declaration requires class-key, "
11730 "i.e. %<friend class %T::%D%>",
11731 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11732 else
11733 permerror (input_location, "friend declaration requires class-key, "
11734 "i.e. %<friend %#T%>",
11735 type);
11738 /* Only try to do this stuff if we didn't already give up. */
11739 if (type != integer_type_node)
11741 /* A friendly class? */
11742 if (current_class_type)
11743 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11744 /*complain=*/true);
11745 else
11746 error ("trying to make class %qT a friend of global scope",
11747 type);
11749 type = void_type_node;
11752 else if (memfn_quals || rqual)
11754 if (ctype == NULL_TREE
11755 && TREE_CODE (type) == METHOD_TYPE)
11756 ctype = TYPE_METHOD_BASETYPE (type);
11758 if (ctype)
11759 type = build_memfn_type (type, ctype, memfn_quals, rqual);
11760 /* Core issue #547: need to allow this in template type args.
11761 Allow it in general in C++11 for alias-declarations. */
11762 else if ((template_type_arg || cxx_dialect >= cxx11)
11763 && TREE_CODE (type) == FUNCTION_TYPE)
11764 type = apply_memfn_quals (type, memfn_quals, rqual);
11765 else
11766 error ("invalid qualifiers on non-member function type");
11769 if (reqs)
11770 error_at (location_of (reqs), "requires-clause on type-id");
11772 return type;
11774 else if (unqualified_id == NULL_TREE && decl_context != PARM
11775 && decl_context != CATCHPARM
11776 && TREE_CODE (type) != UNION_TYPE
11777 && ! bitfield
11778 && innermost_code != cdk_decomp)
11780 error ("abstract declarator %qT used as declaration", type);
11781 return error_mark_node;
11784 if (!FUNC_OR_METHOD_TYPE_P (type))
11786 /* Only functions may be declared using an operator-function-id. */
11787 if (dname && IDENTIFIER_ANY_OP_P (dname))
11789 error ("declaration of %qD as non-function", dname);
11790 return error_mark_node;
11793 if (reqs)
11794 error_at (location_of (reqs),
11795 "requires-clause on declaration of non-function type %qT",
11796 type);
11799 /* We don't check parameter types here because we can emit a better
11800 error message later. */
11801 if (decl_context != PARM)
11803 type = check_var_type (unqualified_id, type);
11804 if (type == error_mark_node)
11805 return error_mark_node;
11808 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11809 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11811 if (decl_context == PARM || decl_context == CATCHPARM)
11813 if (ctype || in_namespace)
11814 error ("cannot use %<::%> in parameter declaration");
11816 if (type_uses_auto (type)
11817 && !(cxx_dialect >= cxx17 && template_parm_flag))
11819 if (cxx_dialect >= cxx14)
11820 error ("%<auto%> parameter not permitted in this context");
11821 else
11822 error ("parameter declared %<auto%>");
11823 type = error_mark_node;
11826 /* A parameter declared as an array of T is really a pointer to T.
11827 One declared as a function is really a pointer to a function.
11828 One declared as a member is really a pointer to member. */
11830 if (TREE_CODE (type) == ARRAY_TYPE)
11832 /* Transfer const-ness of array into that of type pointed to. */
11833 type = build_pointer_type (TREE_TYPE (type));
11834 type_quals = TYPE_UNQUALIFIED;
11835 array_parameter_p = true;
11837 else if (TREE_CODE (type) == FUNCTION_TYPE)
11838 type = build_pointer_type (type);
11841 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
11842 && !(identifier_p (unqualified_id)
11843 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
11845 cp_cv_quals real_quals = memfn_quals;
11846 if (cxx_dialect < cxx14 && constexpr_p
11847 && sfk != sfk_constructor && sfk != sfk_destructor)
11848 real_quals |= TYPE_QUAL_CONST;
11849 type = build_memfn_type (type, ctype, real_quals, rqual);
11853 tree decl = NULL_TREE;
11855 if (decl_context == PARM)
11857 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
11858 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
11860 bad_specifiers (decl, BSP_PARM, virtualp,
11861 memfn_quals != TYPE_UNQUALIFIED,
11862 inlinep, friendp, raises != NULL_TREE);
11864 else if (decl_context == FIELD)
11866 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
11867 if (tree auto_node = type_uses_auto (type))
11869 location_t loc = declspecs->locations[ds_type_spec];
11870 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
11871 error_at (loc, "invalid use of template-name %qE without an "
11872 "argument list",
11873 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
11874 else
11875 error_at (loc, "non-static data member declared with "
11876 "placeholder %qT", auto_node);
11877 type = error_mark_node;
11880 /* The C99 flexible array extension. */
11881 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
11882 && TYPE_DOMAIN (type) == NULL_TREE)
11884 if (ctype
11885 && (TREE_CODE (ctype) == UNION_TYPE
11886 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
11888 error ("flexible array member in union");
11889 type = error_mark_node;
11891 else
11893 /* Array is a flexible member. */
11894 if (in_system_header_at (input_location))
11895 /* Do not warn on flexible array members in system
11896 headers because glibc uses them. */;
11897 else if (name)
11898 pedwarn (input_location, OPT_Wpedantic,
11899 "ISO C++ forbids flexible array member %qs", name);
11900 else
11901 pedwarn (input_location, OPT_Wpedantic,
11902 "ISO C++ forbids flexible array members");
11904 /* Flexible array member has a null domain. */
11905 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11909 if (type == error_mark_node)
11911 /* Happens when declaring arrays of sizes which
11912 are error_mark_node, for example. */
11913 decl = NULL_TREE;
11915 else if (in_namespace && !friendp)
11917 /* Something like struct S { int N::j; }; */
11918 error ("invalid use of %<::%>");
11919 return error_mark_node;
11921 else if (TREE_CODE (type) == FUNCTION_TYPE
11922 || TREE_CODE (type) == METHOD_TYPE)
11924 int publicp = 0;
11925 tree function_context;
11927 if (friendp == 0)
11929 /* This should never happen in pure C++ (the check
11930 could be an assert). It could happen in
11931 Objective-C++ if someone writes invalid code that
11932 uses a function declaration for an instance
11933 variable or property (instance variables and
11934 properties are parsed as FIELD_DECLs, but they are
11935 part of an Objective-C class, not a C++ class).
11936 That code is invalid and is caught by this
11937 check. */
11938 if (!ctype)
11940 error ("declaration of function %qD in invalid context",
11941 unqualified_id);
11942 return error_mark_node;
11945 /* ``A union may [ ... ] not [ have ] virtual functions.''
11946 ARM 9.5 */
11947 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11949 error ("function %qD declared %<virtual%> inside a union",
11950 unqualified_id);
11951 return error_mark_node;
11954 if (virtualp
11955 && identifier_p (unqualified_id)
11956 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
11958 error ("%qD cannot be declared %<virtual%>, since it "
11959 "is always static", unqualified_id);
11960 virtualp = 0;
11964 /* Check that the name used for a destructor makes sense. */
11965 if (sfk == sfk_destructor)
11967 tree uqname = id_declarator->u.id.unqualified_name;
11969 if (!ctype)
11971 gcc_assert (friendp);
11972 error ("expected qualified name in friend declaration "
11973 "for destructor %qD", uqname);
11974 return error_mark_node;
11977 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
11979 error ("declaration of %qD as member of %qT",
11980 uqname, ctype);
11981 return error_mark_node;
11983 if (concept_p)
11985 error ("a destructor cannot be %<concept%>");
11986 return error_mark_node;
11988 if (constexpr_p)
11990 error ("a destructor cannot be %<constexpr%>");
11991 return error_mark_node;
11994 else if (sfk == sfk_constructor && friendp && !ctype)
11996 error ("expected qualified name in friend declaration "
11997 "for constructor %qD",
11998 id_declarator->u.id.unqualified_name);
11999 return error_mark_node;
12001 if (sfk == sfk_constructor)
12002 if (concept_p)
12004 error ("a constructor cannot be %<concept%>");
12005 return error_mark_node;
12007 if (concept_p)
12009 error ("a concept cannot be a member function");
12010 concept_p = false;
12013 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12015 tree tmpl = TREE_OPERAND (unqualified_id, 0);
12016 if (variable_template_p (tmpl))
12018 error ("specialization of variable template %qD "
12019 "declared as function", tmpl);
12020 inform (DECL_SOURCE_LOCATION (tmpl),
12021 "variable template declared here");
12022 return error_mark_node;
12026 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12027 function_context = (ctype != NULL_TREE) ?
12028 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12029 publicp = (! friendp || ! staticp)
12030 && function_context == NULL_TREE;
12032 if (late_return_type_p)
12033 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12035 decl = grokfndecl (ctype, type,
12036 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12037 ? unqualified_id : dname,
12038 parms,
12039 unqualified_id,
12040 reqs,
12041 virtualp, flags, memfn_quals, rqual, raises,
12042 friendp ? -1 : 0, friendp, publicp,
12043 inlinep | (2 * constexpr_p) | (4 * concept_p),
12044 initialized == SD_DELETED, sfk,
12045 funcdef_flag, template_count, in_namespace,
12046 attrlist, declarator->id_loc);
12047 decl = set_virt_specifiers (decl, virt_specifiers);
12048 if (decl == NULL_TREE)
12049 return error_mark_node;
12050 #if 0
12051 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12052 /* The decl and setting of decl_attr is also turned off. */
12053 decl = build_decl_attribute_variant (decl, decl_attr);
12054 #endif
12056 /* [class.conv.ctor]
12058 A constructor declared without the function-specifier
12059 explicit that can be called with a single parameter
12060 specifies a conversion from the type of its first
12061 parameter to the type of its class. Such a constructor
12062 is called a converting constructor. */
12063 if (explicitp == 2)
12064 DECL_NONCONVERTING_P (decl) = 1;
12066 else if (!staticp && !dependent_type_p (type)
12067 && !COMPLETE_TYPE_P (complete_type (type))
12068 && (!complete_or_array_type_p (type)
12069 || initialized == 0))
12071 if (TREE_CODE (type) != ARRAY_TYPE
12072 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12074 if (unqualified_id)
12076 error ("field %qD has incomplete type %qT",
12077 unqualified_id, type);
12078 cxx_incomplete_type_inform (strip_array_types (type));
12080 else
12081 error ("name %qT has incomplete type", type);
12083 type = error_mark_node;
12084 decl = NULL_TREE;
12087 else
12089 if (friendp)
12091 error ("%qE is neither function nor member function; "
12092 "cannot be declared friend", unqualified_id);
12093 friendp = 0;
12095 decl = NULL_TREE;
12098 if (friendp)
12100 /* Friends are treated specially. */
12101 if (ctype == current_class_type)
12102 ; /* We already issued a permerror. */
12103 else if (decl && DECL_NAME (decl))
12105 if (template_class_depth (current_class_type) == 0)
12107 decl = check_explicit_specialization
12108 (unqualified_id, decl, template_count,
12109 2 * funcdef_flag + 4);
12110 if (decl == error_mark_node)
12111 return error_mark_node;
12114 decl = do_friend (ctype, unqualified_id, decl,
12115 *attrlist, flags,
12116 funcdef_flag);
12117 return decl;
12119 else
12120 return error_mark_node;
12123 /* Structure field. It may not be a function, except for C++. */
12125 if (decl == NULL_TREE)
12127 if (staticp)
12129 /* C++ allows static class members. All other work
12130 for this is done by grokfield. */
12131 decl = build_lang_decl_loc (declarator
12132 ? declarator->id_loc
12133 : input_location,
12134 VAR_DECL, unqualified_id, type);
12135 set_linkage_for_static_data_member (decl);
12136 if (concept_p)
12137 error ("static data member %qE declared %<concept%>",
12138 unqualified_id);
12139 else if (constexpr_p && !initialized)
12141 error ("%<constexpr%> static data member %qD must have an "
12142 "initializer", decl);
12143 constexpr_p = false;
12146 if (inlinep)
12147 mark_inline_variable (decl);
12149 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12150 && !(cxx_dialect >= cxx17 && constexpr_p))
12151 /* Even if there is an in-class initialization, DECL
12152 is considered undefined until an out-of-class
12153 definition is provided, unless this is an inline
12154 variable. */
12155 DECL_EXTERNAL (decl) = 1;
12157 if (thread_p)
12159 CP_DECL_THREAD_LOCAL_P (decl) = true;
12160 if (!processing_template_decl)
12161 set_decl_tls_model (decl, decl_default_tls_model (decl));
12162 if (declspecs->gnu_thread_keyword_p)
12163 SET_DECL_GNU_TLS_P (decl);
12166 else
12168 if (concept_p)
12169 error ("non-static data member %qE declared %<concept%>",
12170 unqualified_id);
12171 else if (constexpr_p)
12173 error ("non-static data member %qE declared %<constexpr%>",
12174 unqualified_id);
12175 constexpr_p = false;
12177 decl = build_decl (input_location,
12178 FIELD_DECL, unqualified_id, type);
12179 DECL_NONADDRESSABLE_P (decl) = bitfield;
12180 if (bitfield && !unqualified_id)
12182 TREE_NO_WARNING (decl) = 1;
12183 DECL_PADDING_P (decl) = 1;
12186 if (storage_class == sc_mutable)
12188 DECL_MUTABLE_P (decl) = 1;
12189 storage_class = sc_none;
12192 if (initialized)
12194 /* An attempt is being made to initialize a non-static
12195 member. This is new in C++11. */
12196 maybe_warn_cpp0x (CPP0X_NSDMI);
12198 /* If this has been parsed with static storage class, but
12199 errors forced staticp to be cleared, ensure NSDMI is
12200 not present. */
12201 if (declspecs->storage_class == sc_static)
12202 DECL_INITIAL (decl) = error_mark_node;
12206 bad_specifiers (decl, BSP_FIELD, virtualp,
12207 memfn_quals != TYPE_UNQUALIFIED,
12208 staticp ? false : inlinep, friendp,
12209 raises != NULL_TREE);
12212 else if (TREE_CODE (type) == FUNCTION_TYPE
12213 || TREE_CODE (type) == METHOD_TYPE)
12215 tree original_name;
12216 int publicp = 0;
12218 if (!unqualified_id)
12219 return error_mark_node;
12221 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12222 original_name = dname;
12223 else
12224 original_name = unqualified_id;
12225 // FIXME:gcc_assert (original_name == dname);
12227 if (storage_class == sc_auto)
12228 error ("storage class %<auto%> invalid for function %qs", name);
12229 else if (storage_class == sc_register)
12230 error ("storage class %<register%> invalid for function %qs", name);
12231 else if (thread_p)
12233 if (declspecs->gnu_thread_keyword_p)
12234 error ("storage class %<__thread%> invalid for function %qs",
12235 name);
12236 else
12237 error ("storage class %<thread_local%> invalid for function %qs",
12238 name);
12241 if (virt_specifiers)
12242 error ("virt-specifiers in %qs not allowed outside a class definition", name);
12243 /* Function declaration not at top level.
12244 Storage classes other than `extern' are not allowed
12245 and `extern' makes no difference. */
12246 if (! toplevel_bindings_p ()
12247 && (storage_class == sc_static
12248 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12249 && pedantic)
12251 if (storage_class == sc_static)
12252 pedwarn (input_location, OPT_Wpedantic,
12253 "%<static%> specifier invalid for function %qs "
12254 "declared out of global scope", name);
12255 else
12256 pedwarn (input_location, OPT_Wpedantic,
12257 "%<inline%> specifier invalid for function %qs "
12258 "declared out of global scope", name);
12261 if (ctype == NULL_TREE)
12263 if (virtualp)
12265 error ("virtual non-class function %qs", name);
12266 virtualp = 0;
12268 else if (sfk == sfk_constructor
12269 || sfk == sfk_destructor)
12271 error (funcdef_flag
12272 ? G_("%qs defined in a non-class scope")
12273 : G_("%qs declared in a non-class scope"), name);
12274 sfk = sfk_none;
12278 /* Record whether the function is public. */
12279 publicp = (ctype != NULL_TREE
12280 || storage_class != sc_static);
12282 if (late_return_type_p)
12283 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12285 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12286 reqs, virtualp, flags, memfn_quals, rqual, raises,
12287 1, friendp,
12288 publicp,
12289 inlinep | (2 * constexpr_p) | (4 * concept_p),
12290 initialized == SD_DELETED,
12291 sfk,
12292 funcdef_flag,
12293 template_count, in_namespace, attrlist,
12294 declarator->id_loc);
12295 if (decl == NULL_TREE)
12296 return error_mark_node;
12298 if (explicitp == 2)
12299 DECL_NONCONVERTING_P (decl) = 1;
12300 if (staticp == 1)
12302 int invalid_static = 0;
12304 /* Don't allow a static member function in a class, and forbid
12305 declaring main to be static. */
12306 if (TREE_CODE (type) == METHOD_TYPE)
12308 permerror (input_location, "cannot declare member function %qD to have "
12309 "static linkage", decl);
12310 invalid_static = 1;
12312 else if (current_function_decl)
12314 /* 7.1.1: There can be no static function declarations within a
12315 block. */
12316 error ("cannot declare static function inside another function");
12317 invalid_static = 1;
12320 if (invalid_static)
12322 staticp = 0;
12323 storage_class = sc_none;
12327 else
12329 /* It's a variable. */
12331 /* An uninitialized decl with `extern' is a reference. */
12332 decl = grokvardecl (type, dname, unqualified_id,
12333 declspecs,
12334 initialized,
12335 type_quals,
12336 inlinep,
12337 concept_p,
12338 template_count,
12339 ctype ? ctype : in_namespace);
12340 if (decl == NULL_TREE)
12341 return error_mark_node;
12343 bad_specifiers (decl, BSP_VAR, virtualp,
12344 memfn_quals != TYPE_UNQUALIFIED,
12345 inlinep, friendp, raises != NULL_TREE);
12347 if (ctype)
12349 DECL_CONTEXT (decl) = ctype;
12350 if (staticp == 1)
12352 permerror (input_location, "%<static%> may not be used when defining "
12353 "(as opposed to declaring) a static data member");
12354 staticp = 0;
12355 storage_class = sc_none;
12357 if (storage_class == sc_register && TREE_STATIC (decl))
12359 error ("static member %qD declared %<register%>", decl);
12360 storage_class = sc_none;
12362 if (storage_class == sc_extern && pedantic)
12364 pedwarn (input_location, OPT_Wpedantic,
12365 "cannot explicitly declare member %q#D to have "
12366 "extern linkage", decl);
12367 storage_class = sc_none;
12370 else if (constexpr_p && DECL_EXTERNAL (decl))
12372 error ("declaration of %<constexpr%> variable %qD "
12373 "is not a definition", decl);
12374 constexpr_p = false;
12377 if (inlinep)
12378 mark_inline_variable (decl);
12379 if (innermost_code == cdk_decomp)
12381 gcc_assert (declarator && declarator->kind == cdk_decomp);
12382 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12383 DECL_ARTIFICIAL (decl) = 1;
12384 fit_decomposition_lang_decl (decl, NULL_TREE);
12388 if (VAR_P (decl) && !initialized)
12389 if (tree auto_node = type_uses_auto (type))
12390 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12392 location_t loc = declspecs->locations[ds_type_spec];
12393 error_at (loc, "declaration of %q#D has no initializer", decl);
12394 TREE_TYPE (decl) = error_mark_node;
12397 if (storage_class == sc_extern && initialized && !funcdef_flag)
12399 if (toplevel_bindings_p ())
12401 /* It's common practice (and completely valid) to have a const
12402 be initialized and declared extern. */
12403 if (!(type_quals & TYPE_QUAL_CONST))
12404 warning (0, "%qs initialized and declared %<extern%>", name);
12406 else
12408 error ("%qs has both %<extern%> and initializer", name);
12409 return error_mark_node;
12413 /* Record `register' declaration for warnings on &
12414 and in case doing stupid register allocation. */
12416 if (storage_class == sc_register)
12418 DECL_REGISTER (decl) = 1;
12419 /* Warn about register storage specifiers on PARM_DECLs. */
12420 if (TREE_CODE (decl) == PARM_DECL)
12422 if (cxx_dialect >= cxx17)
12423 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12424 "ISO C++17 does not allow %<register%> storage "
12425 "class specifier");
12426 else
12427 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12428 "%<register%> storage class specifier used");
12431 else if (storage_class == sc_extern)
12432 DECL_THIS_EXTERN (decl) = 1;
12433 else if (storage_class == sc_static)
12434 DECL_THIS_STATIC (decl) = 1;
12436 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12437 if (constexpr_p && VAR_P (decl))
12438 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12440 /* Record constancy and volatility on the DECL itself . There's
12441 no need to do this when processing a template; we'll do this
12442 for the instantiated declaration based on the type of DECL. */
12443 if (!processing_template_decl)
12444 cp_apply_type_quals_to_decl (type_quals, decl);
12446 return decl;
12450 /* Subroutine of start_function. Ensure that each of the parameter
12451 types (as listed in PARMS) is complete, as is required for a
12452 function definition. */
12454 static void
12455 require_complete_types_for_parms (tree parms)
12457 for (; parms; parms = DECL_CHAIN (parms))
12459 if (dependent_type_p (TREE_TYPE (parms)))
12460 continue;
12461 if (!VOID_TYPE_P (TREE_TYPE (parms))
12462 && complete_type_or_else (TREE_TYPE (parms), parms))
12464 relayout_decl (parms);
12465 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12467 maybe_warn_parm_abi (TREE_TYPE (parms),
12468 DECL_SOURCE_LOCATION (parms));
12470 else
12471 /* grokparms or complete_type_or_else will have already issued
12472 an error. */
12473 TREE_TYPE (parms) = error_mark_node;
12477 /* Returns nonzero if T is a local variable. */
12480 local_variable_p (const_tree t)
12482 if ((VAR_P (t)
12483 /* A VAR_DECL with a context that is a _TYPE is a static data
12484 member. */
12485 && !TYPE_P (CP_DECL_CONTEXT (t))
12486 /* Any other non-local variable must be at namespace scope. */
12487 && !DECL_NAMESPACE_SCOPE_P (t))
12488 || (TREE_CODE (t) == PARM_DECL))
12489 return 1;
12491 return 0;
12494 /* Like local_variable_p, but suitable for use as a tree-walking
12495 function. */
12497 static tree
12498 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12499 void * /*data*/)
12501 if (local_variable_p (*tp)
12502 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12503 return *tp;
12504 else if (TYPE_P (*tp))
12505 *walk_subtrees = 0;
12507 return NULL_TREE;
12510 /* Check that ARG, which is a default-argument expression for a
12511 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12512 something goes wrong. DECL may also be a _TYPE node, rather than a
12513 DECL, if there is no DECL available. */
12515 tree
12516 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12518 tree var;
12519 tree decl_type;
12521 if (TREE_CODE (arg) == DEFAULT_ARG)
12522 /* We get a DEFAULT_ARG when looking at an in-class declaration
12523 with a default argument. Ignore the argument for now; we'll
12524 deal with it after the class is complete. */
12525 return arg;
12527 if (TYPE_P (decl))
12529 decl_type = decl;
12530 decl = NULL_TREE;
12532 else
12533 decl_type = TREE_TYPE (decl);
12535 if (arg == error_mark_node
12536 || decl == error_mark_node
12537 || TREE_TYPE (arg) == error_mark_node
12538 || decl_type == error_mark_node)
12539 /* Something already went wrong. There's no need to check
12540 further. */
12541 return error_mark_node;
12543 /* [dcl.fct.default]
12545 A default argument expression is implicitly converted to the
12546 parameter type. */
12547 ++cp_unevaluated_operand;
12548 perform_implicit_conversion_flags (decl_type, arg, complain,
12549 LOOKUP_IMPLICIT);
12550 --cp_unevaluated_operand;
12552 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12553 the call sites. */
12554 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12555 && null_ptr_cst_p (arg))
12556 return nullptr_node;
12558 /* [dcl.fct.default]
12560 Local variables shall not be used in default argument
12561 expressions.
12563 The keyword `this' shall not be used in a default argument of a
12564 member function. */
12565 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12566 if (var)
12568 if (complain & tf_warning_or_error)
12570 if (DECL_NAME (var) == this_identifier)
12571 permerror (input_location, "default argument %qE uses %qD",
12572 arg, var);
12573 else
12574 error ("default argument %qE uses local variable %qD", arg, var);
12576 return error_mark_node;
12579 /* All is well. */
12580 return arg;
12583 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12585 static tree
12586 type_is_deprecated (tree type)
12588 enum tree_code code;
12589 if (TREE_DEPRECATED (type))
12590 return type;
12591 if (TYPE_NAME (type))
12593 if (TREE_DEPRECATED (TYPE_NAME (type)))
12594 return type;
12595 else
12596 return NULL_TREE;
12599 /* Do warn about using typedefs to a deprecated class. */
12600 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12601 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12603 code = TREE_CODE (type);
12605 if (code == POINTER_TYPE || code == REFERENCE_TYPE
12606 || code == OFFSET_TYPE || code == FUNCTION_TYPE
12607 || code == METHOD_TYPE || code == ARRAY_TYPE)
12608 return type_is_deprecated (TREE_TYPE (type));
12610 if (TYPE_PTRMEMFUNC_P (type))
12611 return type_is_deprecated
12612 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12614 return NULL_TREE;
12617 /* Decode the list of parameter types for a function type.
12618 Given the list of things declared inside the parens,
12619 return a list of types.
12621 If this parameter does not end with an ellipsis, we append
12622 void_list_node.
12624 *PARMS is set to the chain of PARM_DECLs created. */
12626 tree
12627 grokparms (tree parmlist, tree *parms)
12629 tree result = NULL_TREE;
12630 tree decls = NULL_TREE;
12631 tree parm;
12632 int any_error = 0;
12634 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12636 tree type = NULL_TREE;
12637 tree init = TREE_PURPOSE (parm);
12638 tree decl = TREE_VALUE (parm);
12640 if (parm == void_list_node)
12641 break;
12643 if (! decl || TREE_TYPE (decl) == error_mark_node)
12644 continue;
12646 type = TREE_TYPE (decl);
12647 if (VOID_TYPE_P (type))
12649 if (same_type_p (type, void_type_node)
12650 && !init
12651 && !DECL_NAME (decl) && !result
12652 && TREE_CHAIN (parm) == void_list_node)
12653 /* DR 577: A parameter list consisting of a single
12654 unnamed parameter of non-dependent type 'void'. */
12655 break;
12656 else if (cv_qualified_p (type))
12657 error_at (DECL_SOURCE_LOCATION (decl),
12658 "invalid use of cv-qualified type %qT in "
12659 "parameter declaration", type);
12660 else
12661 error_at (DECL_SOURCE_LOCATION (decl),
12662 "invalid use of type %<void%> in parameter "
12663 "declaration");
12664 /* It's not a good idea to actually create parameters of
12665 type `void'; other parts of the compiler assume that a
12666 void type terminates the parameter list. */
12667 type = error_mark_node;
12668 TREE_TYPE (decl) = error_mark_node;
12671 if (type != error_mark_node)
12673 if (deprecated_state != DEPRECATED_SUPPRESS)
12675 tree deptype = type_is_deprecated (type);
12676 if (deptype)
12677 warn_deprecated_use (deptype, NULL_TREE);
12680 /* Top-level qualifiers on the parameters are
12681 ignored for function types. */
12682 type = cp_build_qualified_type (type, 0);
12683 if (TREE_CODE (type) == METHOD_TYPE)
12685 error ("parameter %qD invalidly declared method type", decl);
12686 type = build_pointer_type (type);
12687 TREE_TYPE (decl) = type;
12689 else if (abstract_virtuals_error (decl, type))
12690 any_error = 1; /* Seems like a good idea. */
12691 else if (cxx_dialect < cxx17 && POINTER_TYPE_P (type))
12693 /* Before C++17 DR 393:
12694 [dcl.fct]/6, parameter types cannot contain pointers
12695 (references) to arrays of unknown bound. */
12696 tree t = TREE_TYPE (type);
12697 int ptr = TYPE_PTR_P (type);
12699 while (1)
12701 if (TYPE_PTR_P (t))
12702 ptr = 1;
12703 else if (TREE_CODE (t) != ARRAY_TYPE)
12704 break;
12705 else if (!TYPE_DOMAIN (t))
12706 break;
12707 t = TREE_TYPE (t);
12709 if (TREE_CODE (t) == ARRAY_TYPE)
12710 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
12712 ? G_("parameter %qD includes pointer to array of "
12713 "unknown bound %qT")
12714 : G_("parameter %qD includes reference to array of "
12715 "unknown bound %qT"),
12716 decl, t);
12719 if (any_error)
12720 init = NULL_TREE;
12721 else if (init && !processing_template_decl)
12722 init = check_default_argument (decl, init, tf_warning_or_error);
12725 DECL_CHAIN (decl) = decls;
12726 decls = decl;
12727 result = tree_cons (init, type, result);
12729 decls = nreverse (decls);
12730 result = nreverse (result);
12731 if (parm)
12732 result = chainon (result, void_list_node);
12733 *parms = decls;
12735 return result;
12739 /* D is a constructor or overloaded `operator='.
12741 Let T be the class in which D is declared. Then, this function
12742 returns:
12744 -1 if D's is an ill-formed constructor or copy assignment operator
12745 whose first parameter is of type `T'.
12746 0 if D is not a copy constructor or copy assignment
12747 operator.
12748 1 if D is a copy constructor or copy assignment operator whose
12749 first parameter is a reference to non-const qualified T.
12750 2 if D is a copy constructor or copy assignment operator whose
12751 first parameter is a reference to const qualified T.
12753 This function can be used as a predicate. Positive values indicate
12754 a copy constructor and nonzero values indicate a copy assignment
12755 operator. */
12758 copy_fn_p (const_tree d)
12760 tree args;
12761 tree arg_type;
12762 int result = 1;
12764 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12766 if (TREE_CODE (d) == TEMPLATE_DECL
12767 || (DECL_TEMPLATE_INFO (d)
12768 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12769 /* Instantiations of template member functions are never copy
12770 functions. Note that member functions of templated classes are
12771 represented as template functions internally, and we must
12772 accept those as copy functions. */
12773 return 0;
12775 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12776 if (!args)
12777 return 0;
12779 arg_type = TREE_VALUE (args);
12780 if (arg_type == error_mark_node)
12781 return 0;
12783 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12785 /* Pass by value copy assignment operator. */
12786 result = -1;
12788 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
12789 && !TYPE_REF_IS_RVALUE (arg_type)
12790 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12792 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12793 result = 2;
12795 else
12796 return 0;
12798 args = TREE_CHAIN (args);
12800 if (args && args != void_list_node && !TREE_PURPOSE (args))
12801 /* There are more non-optional args. */
12802 return 0;
12804 return result;
12807 /* D is a constructor or overloaded `operator='.
12809 Let T be the class in which D is declared. Then, this function
12810 returns true when D is a move constructor or move assignment
12811 operator, false otherwise. */
12813 bool
12814 move_fn_p (const_tree d)
12816 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12818 if (cxx_dialect == cxx98)
12819 /* There are no move constructors if we are in C++98 mode. */
12820 return false;
12822 if (TREE_CODE (d) == TEMPLATE_DECL
12823 || (DECL_TEMPLATE_INFO (d)
12824 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12825 /* Instantiations of template member functions are never move
12826 functions. Note that member functions of templated classes are
12827 represented as template functions internally, and we must
12828 accept those as move functions. */
12829 return 0;
12831 return move_signature_fn_p (d);
12834 /* D is a constructor or overloaded `operator='.
12836 Then, this function returns true when D has the same signature as a move
12837 constructor or move assignment operator (because either it is such a
12838 ctor/op= or it is a template specialization with the same signature),
12839 false otherwise. */
12841 bool
12842 move_signature_fn_p (const_tree d)
12844 tree args;
12845 tree arg_type;
12846 bool result = false;
12848 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12849 if (!args)
12850 return 0;
12852 arg_type = TREE_VALUE (args);
12853 if (arg_type == error_mark_node)
12854 return 0;
12856 if (TREE_CODE (arg_type) == REFERENCE_TYPE
12857 && TYPE_REF_IS_RVALUE (arg_type)
12858 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
12859 DECL_CONTEXT (d)))
12860 result = true;
12862 args = TREE_CHAIN (args);
12864 if (args && args != void_list_node && !TREE_PURPOSE (args))
12865 /* There are more non-optional args. */
12866 return false;
12868 return result;
12871 /* Remember any special properties of member function DECL. */
12873 void
12874 grok_special_member_properties (tree decl)
12876 tree class_type;
12878 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
12879 return;
12881 class_type = DECL_CONTEXT (decl);
12882 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
12884 int ctor = copy_fn_p (decl);
12886 if (!DECL_ARTIFICIAL (decl))
12887 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
12889 if (ctor > 0)
12891 /* [class.copy]
12893 A non-template constructor for class X is a copy
12894 constructor if its first parameter is of type X&, const
12895 X&, volatile X& or const volatile X&, and either there
12896 are no other parameters or else all other parameters have
12897 default arguments. */
12898 TYPE_HAS_COPY_CTOR (class_type) = 1;
12899 if (user_provided_p (decl))
12900 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
12901 if (ctor > 1)
12902 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
12904 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
12905 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
12906 else if (move_fn_p (decl) && user_provided_p (decl))
12907 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
12908 else if (is_list_ctor (decl))
12909 TYPE_HAS_LIST_CTOR (class_type) = 1;
12911 if (DECL_DECLARED_CONSTEXPR_P (decl)
12912 && !ctor && !move_fn_p (decl))
12913 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
12915 else if (DECL_NAME (decl) == assign_op_identifier)
12917 /* [class.copy]
12919 A non-template assignment operator for class X is a copy
12920 assignment operator if its parameter is of type X, X&, const
12921 X&, volatile X& or const volatile X&. */
12923 int assop = copy_fn_p (decl);
12925 if (assop)
12927 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
12928 if (user_provided_p (decl))
12929 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
12930 if (assop != 1)
12931 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
12933 else if (move_fn_p (decl) && user_provided_p (decl))
12934 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
12936 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
12937 TYPE_HAS_CONVERSION (class_type) = true;
12939 /* Destructors are handled in check_methods. */
12942 /* Check a constructor DECL has the correct form. Complains
12943 if the class has a constructor of the form X(X). */
12945 bool
12946 grok_ctor_properties (const_tree ctype, const_tree decl)
12948 int ctor_parm = copy_fn_p (decl);
12950 if (ctor_parm < 0)
12952 /* [class.copy]
12954 A declaration of a constructor for a class X is ill-formed if
12955 its first parameter is of type (optionally cv-qualified) X
12956 and either there are no other parameters or else all other
12957 parameters have default arguments.
12959 We *don't* complain about member template instantiations that
12960 have this form, though; they can occur as we try to decide
12961 what constructor to use during overload resolution. Since
12962 overload resolution will never prefer such a constructor to
12963 the non-template copy constructor (which is either explicitly
12964 or implicitly defined), there's no need to worry about their
12965 existence. Theoretically, they should never even be
12966 instantiated, but that's hard to forestall. */
12967 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
12968 ctype, ctype);
12969 return false;
12972 return true;
12975 /* DECL is a declaration for an overloaded or conversion operator. If
12976 COMPLAIN is true, errors are issued for invalid declarations. */
12978 bool
12979 grok_op_properties (tree decl, bool complain)
12981 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12982 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
12983 tree name = DECL_NAME (decl);
12985 tree class_type = DECL_CONTEXT (decl);
12986 if (class_type && !CLASS_TYPE_P (class_type))
12987 class_type = NULL_TREE;
12989 tree_code operator_code;
12990 unsigned op_flags;
12991 if (IDENTIFIER_CONV_OP_P (name))
12993 /* Conversion operators are TYPE_EXPR for the purposes of this
12994 function. */
12995 operator_code = TYPE_EXPR;
12996 op_flags = OVL_OP_FLAG_UNARY;
12998 else
13000 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13002 operator_code = ovl_op->tree_code;
13003 op_flags = ovl_op->flags;
13004 gcc_checking_assert (operator_code != ERROR_MARK);
13005 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13008 if (op_flags & OVL_OP_FLAG_ALLOC)
13010 /* operator new and operator delete are quite special. */
13011 if (class_type)
13012 switch (op_flags)
13014 case OVL_OP_FLAG_ALLOC:
13015 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13016 break;
13018 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13019 TYPE_GETS_DELETE (class_type) |= 1;
13020 break;
13022 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13023 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13024 break;
13026 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13027 TYPE_GETS_DELETE (class_type) |= 2;
13028 break;
13030 default:
13031 gcc_unreachable ();
13034 /* [basic.std.dynamic.allocation]/1:
13036 A program is ill-formed if an allocation function is declared
13037 in a namespace scope other than global scope or declared
13038 static in global scope.
13040 The same also holds true for deallocation functions. */
13041 if (DECL_NAMESPACE_SCOPE_P (decl))
13043 if (CP_DECL_CONTEXT (decl) != global_namespace)
13045 error ("%qD may not be declared within a namespace", decl);
13046 return false;
13049 if (!TREE_PUBLIC (decl))
13051 error ("%qD may not be declared as static", decl);
13052 return false;
13056 if (op_flags & OVL_OP_FLAG_DELETE)
13057 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
13058 else
13060 DECL_IS_OPERATOR_NEW (decl) = 1;
13061 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
13064 return true;
13067 /* An operator function must either be a non-static member function
13068 or have at least one parameter of a class, a reference to a class,
13069 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13070 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13072 if (operator_code == TYPE_EXPR
13073 || operator_code == CALL_EXPR
13074 || operator_code == COMPONENT_REF
13075 || operator_code == ARRAY_REF
13076 || operator_code == NOP_EXPR)
13078 error ("%qD must be a nonstatic member function", decl);
13079 return false;
13082 if (DECL_STATIC_FUNCTION_P (decl))
13084 error ("%qD must be either a non-static member "
13085 "function or a non-member function", decl);
13086 return false;
13089 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13091 if (!arg || arg == void_list_node)
13093 if (complain)
13094 error ("%qD must have an argument of class or "
13095 "enumerated type", decl);
13096 return false;
13099 tree type = non_reference (TREE_VALUE (arg));
13100 if (type == error_mark_node)
13101 return false;
13103 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13104 because these checks are performed even on template
13105 functions. */
13106 if (MAYBE_CLASS_TYPE_P (type)
13107 || TREE_CODE (type) == ENUMERAL_TYPE)
13108 break;
13112 if (operator_code == CALL_EXPR)
13113 /* There are no further restrictions on the arguments to an overloaded
13114 "operator ()". */
13115 return true;
13117 if (operator_code == COND_EXPR)
13119 /* 13.4.0.3 */
13120 error ("ISO C++ prohibits overloading operator ?:");
13121 return false;
13124 /* Count the number of arguments and check for ellipsis. */
13125 int arity = 0;
13126 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13128 if (!arg)
13130 /* Variadic. */
13131 error ("%qD must not have variable number of arguments", decl);
13132 return false;
13134 ++arity;
13137 /* Verify correct number of arguments. */
13138 switch (op_flags)
13140 case OVL_OP_FLAG_AMBIARY:
13141 if (arity == 1)
13143 /* We have a unary instance of an ambi-ary op. Remap to the
13144 unary one. */
13145 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13146 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13147 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13148 operator_code = ovl_op->tree_code;
13149 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13151 else if (arity != 2)
13153 /* This was an ambiguous operator but is invalid. */
13154 error (methodp
13155 ? G_("%qD must have either zero or one argument")
13156 : G_("%qD must have either one or two arguments"), decl);
13157 return false;
13159 else if ((operator_code == POSTINCREMENT_EXPR
13160 || operator_code == POSTDECREMENT_EXPR)
13161 && ! processing_template_decl
13162 /* x++ and x--'s second argument must be an int. */
13163 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13164 integer_type_node))
13166 error (methodp
13167 ? G_("postfix %qD must have %<int%> as its argument")
13168 : G_("postfix %qD must have %<int%> as its second argument"),
13169 decl);
13170 return false;
13172 break;
13174 case OVL_OP_FLAG_UNARY:
13175 if (arity != 1)
13177 error (methodp
13178 ? G_("%qD must have no arguments")
13179 : G_("%qD must have exactly one argument"), decl);
13180 return false;
13182 break;
13184 case OVL_OP_FLAG_BINARY:
13185 if (arity != 2)
13187 error (methodp
13188 ? G_("%qD must have exactly one argument")
13189 : G_("%qD must have exactly two arguments"), decl);
13190 return false;
13192 break;
13194 default:
13195 gcc_unreachable ();
13198 /* There can be no default arguments. */
13199 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13200 if (TREE_PURPOSE (arg))
13202 TREE_PURPOSE (arg) = NULL_TREE;
13203 if (operator_code == POSTINCREMENT_EXPR
13204 || operator_code == POSTDECREMENT_EXPR)
13205 pedwarn (input_location, OPT_Wpedantic,
13206 "%qD cannot have default arguments", decl);
13207 else
13209 error ("%qD cannot have default arguments", decl);
13210 return false;
13214 /* At this point the declaration is well-formed. It may not be
13215 sensible though. */
13217 /* Check member function warnings only on the in-class declaration.
13218 There's no point warning on an out-of-class definition. */
13219 if (class_type && class_type != current_class_type)
13220 return true;
13222 /* Warn about conversion operators that will never be used. */
13223 if (IDENTIFIER_CONV_OP_P (name)
13224 && ! DECL_TEMPLATE_INFO (decl)
13225 && warn_conversion)
13227 tree t = TREE_TYPE (name);
13228 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
13230 if (ref)
13231 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13233 if (VOID_TYPE_P (t))
13234 warning (OPT_Wconversion,
13236 ? G_("conversion to a reference to void "
13237 "will never use a type conversion operator")
13238 : G_("conversion to void "
13239 "will never use a type conversion operator"));
13240 else if (class_type)
13242 if (t == class_type)
13243 warning (OPT_Wconversion,
13245 ? G_("conversion to a reference to the same type "
13246 "will never use a type conversion operator")
13247 : G_("conversion to the same type "
13248 "will never use a type conversion operator"));
13249 /* Don't force t to be complete here. */
13250 else if (MAYBE_CLASS_TYPE_P (t)
13251 && COMPLETE_TYPE_P (t)
13252 && DERIVED_FROM_P (t, class_type))
13253 warning (OPT_Wconversion,
13255 ? G_("conversion to a reference to a base class "
13256 "will never use a type conversion operator")
13257 : G_("conversion to a base class "
13258 "will never use a type conversion operator"));
13262 if (!warn_ecpp)
13263 return true;
13265 /* Effective C++ rules below. */
13267 /* More Effective C++ rule 7. */
13268 if (operator_code == TRUTH_ANDIF_EXPR
13269 || operator_code == TRUTH_ORIF_EXPR
13270 || operator_code == COMPOUND_EXPR)
13271 warning (OPT_Weffc__,
13272 "user-defined %qD always evaluates both arguments", decl);
13274 /* More Effective C++ rule 6. */
13275 if (operator_code == POSTINCREMENT_EXPR
13276 || operator_code == POSTDECREMENT_EXPR
13277 || operator_code == PREINCREMENT_EXPR
13278 || operator_code == PREDECREMENT_EXPR)
13280 tree arg = TREE_VALUE (argtypes);
13281 tree ret = TREE_TYPE (TREE_TYPE (decl));
13282 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
13283 arg = TREE_TYPE (arg);
13284 arg = TYPE_MAIN_VARIANT (arg);
13286 if (operator_code == PREINCREMENT_EXPR
13287 || operator_code == PREDECREMENT_EXPR)
13289 if (TREE_CODE (ret) != REFERENCE_TYPE
13290 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13291 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
13292 build_reference_type (arg));
13294 else
13296 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13297 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
13301 /* Effective C++ rule 23. */
13302 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13303 && (operator_code == PLUS_EXPR
13304 || operator_code == MINUS_EXPR
13305 || operator_code == TRUNC_DIV_EXPR
13306 || operator_code == MULT_EXPR
13307 || operator_code == TRUNC_MOD_EXPR)
13308 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
13309 warning (OPT_Weffc__, "%qD should return by value", decl);
13311 return true;
13314 /* Return a string giving the keyword associate with CODE. */
13316 static const char *
13317 tag_name (enum tag_types code)
13319 switch (code)
13321 case record_type:
13322 return "struct";
13323 case class_type:
13324 return "class";
13325 case union_type:
13326 return "union";
13327 case enum_type:
13328 return "enum";
13329 case typename_type:
13330 return "typename";
13331 default:
13332 gcc_unreachable ();
13336 /* Name lookup in an elaborated-type-specifier (after the keyword
13337 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13338 elaborated-type-specifier is invalid, issue a diagnostic and return
13339 error_mark_node; otherwise, return the *_TYPE to which it referred.
13340 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13342 tree
13343 check_elaborated_type_specifier (enum tag_types tag_code,
13344 tree decl,
13345 bool allow_template_p)
13347 tree type;
13349 /* In the case of:
13351 struct S { struct S *p; };
13353 name lookup will find the TYPE_DECL for the implicit "S::S"
13354 typedef. Adjust for that here. */
13355 if (DECL_SELF_REFERENCE_P (decl))
13356 decl = TYPE_NAME (TREE_TYPE (decl));
13358 type = TREE_TYPE (decl);
13360 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13361 is false for this case as well. */
13362 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13364 error ("using template type parameter %qT after %qs",
13365 type, tag_name (tag_code));
13366 return error_mark_node;
13368 /* Accept template template parameters. */
13369 else if (allow_template_p
13370 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13371 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13373 /* [dcl.type.elab]
13375 If the identifier resolves to a typedef-name or the
13376 simple-template-id resolves to an alias template
13377 specialization, the elaborated-type-specifier is ill-formed.
13379 In other words, the only legitimate declaration to use in the
13380 elaborated type specifier is the implicit typedef created when
13381 the type is declared. */
13382 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13383 && !DECL_SELF_REFERENCE_P (decl)
13384 && tag_code != typename_type)
13386 if (alias_template_specialization_p (type))
13387 error ("using alias template specialization %qT after %qs",
13388 type, tag_name (tag_code));
13389 else
13390 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13391 inform (DECL_SOURCE_LOCATION (decl),
13392 "%qD has a previous declaration here", decl);
13393 return error_mark_node;
13395 else if (TREE_CODE (type) != RECORD_TYPE
13396 && TREE_CODE (type) != UNION_TYPE
13397 && tag_code != enum_type
13398 && tag_code != typename_type)
13400 error ("%qT referred to as %qs", type, tag_name (tag_code));
13401 inform (location_of (type), "%qT has a previous declaration here", type);
13402 return error_mark_node;
13404 else if (TREE_CODE (type) != ENUMERAL_TYPE
13405 && tag_code == enum_type)
13407 error ("%qT referred to as enum", type);
13408 inform (location_of (type), "%qT has a previous declaration here", type);
13409 return error_mark_node;
13411 else if (!allow_template_p
13412 && TREE_CODE (type) == RECORD_TYPE
13413 && CLASSTYPE_IS_TEMPLATE (type))
13415 /* If a class template appears as elaborated type specifier
13416 without a template header such as:
13418 template <class T> class C {};
13419 void f(class C); // No template header here
13421 then the required template argument is missing. */
13422 error ("template argument required for %<%s %T%>",
13423 tag_name (tag_code),
13424 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13425 return error_mark_node;
13428 return type;
13431 /* Lookup NAME in elaborate type specifier in scope according to
13432 SCOPE and issue diagnostics if necessary.
13433 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13434 found, and ERROR_MARK_NODE for type error. */
13436 static tree
13437 lookup_and_check_tag (enum tag_types tag_code, tree name,
13438 tag_scope scope, bool template_header_p)
13440 tree t;
13441 tree decl;
13442 if (scope == ts_global)
13444 /* First try ordinary name lookup, ignoring hidden class name
13445 injected via friend declaration. */
13446 decl = lookup_name_prefer_type (name, 2);
13447 decl = strip_using_decl (decl);
13448 /* If that fails, the name will be placed in the smallest
13449 non-class, non-function-prototype scope according to 3.3.1/5.
13450 We may already have a hidden name declared as friend in this
13451 scope. So lookup again but not ignoring hidden names.
13452 If we find one, that name will be made visible rather than
13453 creating a new tag. */
13454 if (!decl)
13455 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13457 else
13458 decl = lookup_type_scope (name, scope);
13460 if (decl
13461 && (DECL_CLASS_TEMPLATE_P (decl)
13462 /* If scope is ts_current we're defining a class, so ignore a
13463 template template parameter. */
13464 || (scope != ts_current
13465 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13466 decl = DECL_TEMPLATE_RESULT (decl);
13468 if (decl && TREE_CODE (decl) == TYPE_DECL)
13470 /* Look for invalid nested type:
13471 class C {
13472 class C {};
13473 }; */
13474 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13476 error ("%qD has the same name as the class in which it is "
13477 "declared",
13478 decl);
13479 return error_mark_node;
13482 /* Two cases we need to consider when deciding if a class
13483 template is allowed as an elaborated type specifier:
13484 1. It is a self reference to its own class.
13485 2. It comes with a template header.
13487 For example:
13489 template <class T> class C {
13490 class C *c1; // DECL_SELF_REFERENCE_P is true
13491 class D;
13493 template <class U> class C; // template_header_p is true
13494 template <class T> class C<T>::D {
13495 class C *c2; // DECL_SELF_REFERENCE_P is true
13496 }; */
13498 t = check_elaborated_type_specifier (tag_code,
13499 decl,
13500 template_header_p
13501 | DECL_SELF_REFERENCE_P (decl));
13502 if (template_header_p && t && CLASS_TYPE_P (t)
13503 && (!CLASSTYPE_TEMPLATE_INFO (t)
13504 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13506 error ("%qT is not a template", t);
13507 inform (location_of (t), "previous declaration here");
13508 if (TYPE_CLASS_SCOPE_P (t)
13509 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13510 inform (input_location,
13511 "perhaps you want to explicitly add %<%T::%>",
13512 TYPE_CONTEXT (t));
13513 t = error_mark_node;
13516 return t;
13518 else if (decl && TREE_CODE (decl) == TREE_LIST)
13520 error ("reference to %qD is ambiguous", name);
13521 print_candidates (decl);
13522 return error_mark_node;
13524 else
13525 return NULL_TREE;
13528 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13529 Define the tag as a forward-reference if it is not defined.
13531 If a declaration is given, process it here, and report an error if
13532 multiple declarations are not identical.
13534 SCOPE is TS_CURRENT when this is also a definition. Only look in
13535 the current frame for the name (since C++ allows new names in any
13536 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13537 declaration. Only look beginning from the current scope outward up
13538 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13540 TEMPLATE_HEADER_P is true when this declaration is preceded by
13541 a set of template parameters. */
13543 static tree
13544 xref_tag_1 (enum tag_types tag_code, tree name,
13545 tag_scope scope, bool template_header_p)
13547 enum tree_code code;
13548 tree context = NULL_TREE;
13550 gcc_assert (identifier_p (name));
13552 switch (tag_code)
13554 case record_type:
13555 case class_type:
13556 code = RECORD_TYPE;
13557 break;
13558 case union_type:
13559 code = UNION_TYPE;
13560 break;
13561 case enum_type:
13562 code = ENUMERAL_TYPE;
13563 break;
13564 default:
13565 gcc_unreachable ();
13568 /* In case of anonymous name, xref_tag is only called to
13569 make type node and push name. Name lookup is not required. */
13570 tree t = NULL_TREE;
13571 if (scope != ts_lambda && !anon_aggrname_p (name))
13572 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
13574 if (t == error_mark_node)
13575 return error_mark_node;
13577 if (scope != ts_current && t && current_class_type
13578 && template_class_depth (current_class_type)
13579 && template_header_p)
13581 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13582 return t;
13584 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13585 definition of this tag. Since, in addition, we are currently
13586 processing a (member) template declaration of a template
13587 class, we must be very careful; consider:
13589 template <class X> struct S1
13591 template <class U> struct S2
13593 template <class V> friend struct S1;
13596 Here, the S2::S1 declaration should not be confused with the
13597 outer declaration. In particular, the inner version should
13598 have a template parameter of level 2, not level 1.
13600 On the other hand, when presented with:
13602 template <class T> struct S1
13604 template <class U> struct S2 {};
13605 template <class U> friend struct S2;
13608 the friend must find S1::S2 eventually. We accomplish this
13609 by making sure that the new type we create to represent this
13610 declaration has the right TYPE_CONTEXT. */
13611 context = TYPE_CONTEXT (t);
13612 t = NULL_TREE;
13615 if (! t)
13617 /* If no such tag is yet defined, create a forward-reference node
13618 and record it as the "definition".
13619 When a real declaration of this type is found,
13620 the forward-reference will be altered into a real type. */
13621 if (code == ENUMERAL_TYPE)
13623 error ("use of enum %q#D without previous declaration", name);
13624 return error_mark_node;
13626 else
13628 t = make_class_type (code);
13629 TYPE_CONTEXT (t) = context;
13630 if (scope == ts_lambda)
13632 /* Mark it as a lambda type. */
13633 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13634 /* And push it into current scope. */
13635 scope = ts_current;
13637 t = pushtag (name, t, scope);
13640 else
13642 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13644 /* Check that we aren't trying to overload a class with different
13645 constraints. */
13646 tree constr = NULL_TREE;
13647 if (current_template_parms)
13649 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13650 constr = build_constraints (reqs, NULL_TREE);
13652 if (!redeclare_class_template (t, current_template_parms, constr))
13653 return error_mark_node;
13655 else if (!processing_template_decl
13656 && CLASS_TYPE_P (t)
13657 && CLASSTYPE_IS_TEMPLATE (t))
13659 error ("redeclaration of %qT as a non-template", t);
13660 inform (location_of (t), "previous declaration %qD", t);
13661 return error_mark_node;
13664 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
13666 /* This is no longer an invisible friend. Make it
13667 visible. */
13668 tree decl = TYPE_NAME (t);
13670 DECL_ANTICIPATED (decl) = false;
13671 DECL_FRIEND_P (decl) = false;
13673 if (TYPE_TEMPLATE_INFO (t))
13675 tree tmpl = TYPE_TI_TEMPLATE (t);
13676 DECL_ANTICIPATED (tmpl) = false;
13677 DECL_FRIEND_P (tmpl) = false;
13682 return t;
13685 /* Wrapper for xref_tag_1. */
13687 tree
13688 xref_tag (enum tag_types tag_code, tree name,
13689 tag_scope scope, bool template_header_p)
13691 tree ret;
13692 bool subtime;
13693 subtime = timevar_cond_start (TV_NAME_LOOKUP);
13694 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13695 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13696 return ret;
13700 tree
13701 xref_tag_from_type (tree old, tree id, tag_scope scope)
13703 enum tag_types tag_kind;
13705 if (TREE_CODE (old) == RECORD_TYPE)
13706 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13707 else
13708 tag_kind = union_type;
13710 if (id == NULL_TREE)
13711 id = TYPE_IDENTIFIER (old);
13713 return xref_tag (tag_kind, id, scope, false);
13716 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13717 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
13718 access_* node, and the TREE_VALUE is the type of the base-class.
13719 Non-NULL TREE_TYPE indicates virtual inheritance. */
13721 void
13722 xref_basetypes (tree ref, tree base_list)
13724 tree *basep;
13725 tree binfo, base_binfo;
13726 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
13727 unsigned max_bases = 0; /* Maximum direct bases. */
13728 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
13729 int i;
13730 tree default_access;
13731 tree igo_prev; /* Track Inheritance Graph Order. */
13733 if (ref == error_mark_node)
13734 return;
13736 /* The base of a derived class is private by default, all others are
13737 public. */
13738 default_access = (TREE_CODE (ref) == RECORD_TYPE
13739 && CLASSTYPE_DECLARED_CLASS (ref)
13740 ? access_private_node : access_public_node);
13742 /* First, make sure that any templates in base-classes are
13743 instantiated. This ensures that if we call ourselves recursively
13744 we do not get confused about which classes are marked and which
13745 are not. */
13746 basep = &base_list;
13747 while (*basep)
13749 tree basetype = TREE_VALUE (*basep);
13751 /* The dependent_type_p call below should really be dependent_scope_p
13752 so that we give a hard error about using an incomplete type as a
13753 base, but we allow it with a pedwarn for backward
13754 compatibility. */
13755 if (processing_template_decl
13756 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13757 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13758 if (!dependent_type_p (basetype)
13759 && !complete_type_or_else (basetype, NULL))
13760 /* An incomplete type. Remove it from the list. */
13761 *basep = TREE_CHAIN (*basep);
13762 else
13764 max_bases++;
13765 if (TREE_TYPE (*basep))
13766 max_dvbases++;
13767 if (CLASS_TYPE_P (basetype))
13768 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13769 basep = &TREE_CHAIN (*basep);
13772 max_vbases += max_dvbases;
13774 TYPE_MARKED_P (ref) = 1;
13776 /* The binfo slot should be empty, unless this is an (ill-formed)
13777 redefinition. */
13778 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13780 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13782 binfo = make_tree_binfo (max_bases);
13784 TYPE_BINFO (ref) = binfo;
13785 BINFO_OFFSET (binfo) = size_zero_node;
13786 BINFO_TYPE (binfo) = ref;
13788 /* Apply base-class info set up to the variants of this type. */
13789 fixup_type_variants (ref);
13791 if (max_bases)
13793 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
13794 /* A C++98 POD cannot have base classes. */
13795 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
13797 if (TREE_CODE (ref) == UNION_TYPE)
13798 error ("derived union %qT invalid", ref);
13801 if (max_bases > 1)
13802 warning (OPT_Wmultiple_inheritance,
13803 "%qT defined with multiple direct bases", ref);
13805 if (max_vbases)
13807 /* An aggregate can't have virtual base classes. */
13808 CLASSTYPE_NON_AGGREGATE (ref) = true;
13810 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
13812 if (max_dvbases)
13813 warning (OPT_Wvirtual_inheritance,
13814 "%qT defined with direct virtual base", ref);
13817 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
13819 tree access = TREE_PURPOSE (base_list);
13820 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
13821 tree basetype = TREE_VALUE (base_list);
13823 if (access == access_default_node)
13824 access = default_access;
13826 /* Before C++17, an aggregate cannot have base classes. In C++17, an
13827 aggregate can't have virtual, private, or protected base classes. */
13828 if (cxx_dialect < cxx17
13829 || access != access_public_node
13830 || via_virtual)
13831 CLASSTYPE_NON_AGGREGATE (ref) = true;
13833 if (PACK_EXPANSION_P (basetype))
13834 basetype = PACK_EXPANSION_PATTERN (basetype);
13835 if (TREE_CODE (basetype) == TYPE_DECL)
13836 basetype = TREE_TYPE (basetype);
13837 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
13839 error ("base type %qT fails to be a struct or class type",
13840 basetype);
13841 goto dropped_base;
13844 base_binfo = NULL_TREE;
13845 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
13847 base_binfo = TYPE_BINFO (basetype);
13848 /* The original basetype could have been a typedef'd type. */
13849 basetype = BINFO_TYPE (base_binfo);
13851 /* Inherit flags from the base. */
13852 TYPE_HAS_NEW_OPERATOR (ref)
13853 |= TYPE_HAS_NEW_OPERATOR (basetype);
13854 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13855 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
13856 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
13857 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
13858 CLASSTYPE_DIAMOND_SHAPED_P (ref)
13859 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
13860 CLASSTYPE_REPEATED_BASE_P (ref)
13861 |= CLASSTYPE_REPEATED_BASE_P (basetype);
13864 /* We must do this test after we've seen through a typedef
13865 type. */
13866 if (TYPE_MARKED_P (basetype))
13868 if (basetype == ref)
13869 error ("recursive type %qT undefined", basetype);
13870 else
13871 error ("duplicate base type %qT invalid", basetype);
13872 goto dropped_base;
13875 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
13876 /* Regenerate the pack expansion for the bases. */
13877 basetype = make_pack_expansion (basetype);
13879 TYPE_MARKED_P (basetype) = 1;
13881 base_binfo = copy_binfo (base_binfo, basetype, ref,
13882 &igo_prev, via_virtual);
13883 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
13884 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
13886 BINFO_BASE_APPEND (binfo, base_binfo);
13887 BINFO_BASE_ACCESS_APPEND (binfo, access);
13888 continue;
13890 dropped_base:
13891 /* Update max_vbases to reflect the reality that we are dropping
13892 this base: if it reaches zero we want to undo the vec_alloc
13893 above to avoid inconsistencies during error-recovery: eg, in
13894 build_special_member_call, CLASSTYPE_VBASECLASSES non null
13895 and vtt null (c++/27952). */
13896 if (via_virtual)
13897 max_vbases--;
13898 if (CLASS_TYPE_P (basetype))
13899 max_vbases
13900 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13903 if (CLASSTYPE_VBASECLASSES (ref)
13904 && max_vbases == 0)
13905 vec_free (CLASSTYPE_VBASECLASSES (ref));
13907 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
13908 /* If we didn't get max_vbases vbases, we must have shared at
13909 least one of them, and are therefore diamond shaped. */
13910 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
13912 /* Unmark all the types. */
13913 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
13914 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13915 TYPE_MARKED_P (ref) = 0;
13917 /* Now see if we have a repeated base type. */
13918 if (!CLASSTYPE_REPEATED_BASE_P (ref))
13920 for (base_binfo = binfo; base_binfo;
13921 base_binfo = TREE_CHAIN (base_binfo))
13923 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13925 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
13926 break;
13928 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
13930 for (base_binfo = binfo; base_binfo;
13931 base_binfo = TREE_CHAIN (base_binfo))
13932 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13933 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13934 else
13935 break;
13940 /* Copies the enum-related properties from type SRC to type DST.
13941 Used with the underlying type of an enum and the enum itself. */
13942 static void
13943 copy_type_enum (tree dst, tree src)
13945 tree t;
13946 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
13948 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
13949 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
13950 TYPE_SIZE (t) = TYPE_SIZE (src);
13951 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
13952 SET_TYPE_MODE (dst, TYPE_MODE (src));
13953 TYPE_PRECISION (t) = TYPE_PRECISION (src);
13954 unsigned valign = TYPE_ALIGN (src);
13955 if (TYPE_USER_ALIGN (t))
13956 valign = MAX (valign, TYPE_ALIGN (t));
13957 else
13958 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
13959 SET_TYPE_ALIGN (t, valign);
13960 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
13964 /* Begin compiling the definition of an enumeration type.
13965 NAME is its name,
13967 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
13969 UNDERLYING_TYPE is the type that will be used as the storage for
13970 the enumeration type. This should be NULL_TREE if no storage type
13971 was specified.
13973 ATTRIBUTES are any attributes specified after the enum-key.
13975 SCOPED_ENUM_P is true if this is a scoped enumeration type.
13977 if IS_NEW is not NULL, gets TRUE iff a new type is created.
13979 Returns the type object, as yet incomplete.
13980 Also records info about it so that build_enumerator
13981 may be used to declare the individual values as they are read. */
13983 tree
13984 start_enum (tree name, tree enumtype, tree underlying_type,
13985 tree attributes, bool scoped_enum_p, bool *is_new)
13987 tree prevtype = NULL_TREE;
13988 gcc_assert (identifier_p (name));
13990 if (is_new)
13991 *is_new = false;
13992 /* [C++0x dcl.enum]p5:
13994 If not explicitly specified, the underlying type of a scoped
13995 enumeration type is int. */
13996 if (!underlying_type && scoped_enum_p)
13997 underlying_type = integer_type_node;
13999 if (underlying_type)
14000 underlying_type = cv_unqualified (underlying_type);
14002 /* If this is the real definition for a previous forward reference,
14003 fill in the contents in the same object that used to be the
14004 forward reference. */
14005 if (!enumtype)
14006 enumtype = lookup_and_check_tag (enum_type, name,
14007 /*tag_scope=*/ts_current,
14008 /*template_header_p=*/false);
14010 /* In case of a template_decl, the only check that should be deferred
14011 to instantiation time is the comparison of underlying types. */
14012 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14014 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14016 error_at (input_location, "scoped/unscoped mismatch "
14017 "in enum %q#T", enumtype);
14018 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14019 "previous definition here");
14020 enumtype = error_mark_node;
14022 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14024 error_at (input_location, "underlying type mismatch "
14025 "in enum %q#T", enumtype);
14026 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14027 "previous definition here");
14028 enumtype = error_mark_node;
14030 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14031 && !dependent_type_p (underlying_type)
14032 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
14033 && !same_type_p (underlying_type,
14034 ENUM_UNDERLYING_TYPE (enumtype)))
14036 error_at (input_location, "different underlying type "
14037 "in enum %q#T", enumtype);
14038 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14039 "previous definition here");
14040 underlying_type = NULL_TREE;
14044 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14045 || processing_template_decl)
14047 /* In case of error, make a dummy enum to allow parsing to
14048 continue. */
14049 if (enumtype == error_mark_node)
14051 name = make_anon_name ();
14052 enumtype = NULL_TREE;
14055 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14056 of an opaque enum, or an opaque enum of an already defined
14057 enumeration (C++0x only).
14058 In any other case, it'll be NULL_TREE. */
14059 if (!enumtype)
14061 if (is_new)
14062 *is_new = true;
14064 prevtype = enumtype;
14066 /* Do not push the decl more than once, unless we need to
14067 compare underlying types at instantiation time */
14068 if (!enumtype
14069 || TREE_CODE (enumtype) != ENUMERAL_TYPE
14070 || (underlying_type
14071 && dependent_type_p (underlying_type))
14072 || (ENUM_UNDERLYING_TYPE (enumtype)
14073 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
14075 enumtype = cxx_make_type (ENUMERAL_TYPE);
14076 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14078 /* std::byte aliases anything. */
14079 if (enumtype != error_mark_node
14080 && TYPE_CONTEXT (enumtype) == std_node
14081 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14082 TYPE_ALIAS_SET (enumtype) = 0;
14084 else
14085 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14086 false);
14088 if (enumtype == error_mark_node)
14089 return error_mark_node;
14091 /* The enum is considered opaque until the opening '{' of the
14092 enumerator list. */
14093 SET_OPAQUE_ENUM_P (enumtype, true);
14094 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14097 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14099 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14101 if (underlying_type)
14103 if (ENUM_UNDERLYING_TYPE (enumtype))
14104 /* We already checked that it matches, don't change it to a different
14105 typedef variant. */;
14106 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14108 copy_type_enum (enumtype, underlying_type);
14109 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14111 else if (dependent_type_p (underlying_type))
14112 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14113 else
14114 error ("underlying type %qT of %qT must be an integral type",
14115 underlying_type, enumtype);
14118 /* If into a template class, the returned enum is always the first
14119 declaration (opaque or not) seen. This way all the references to
14120 this type will be to the same declaration. The following ones are used
14121 only to check for definition errors. */
14122 if (prevtype && processing_template_decl)
14123 return prevtype;
14124 else
14125 return enumtype;
14128 /* After processing and defining all the values of an enumeration type,
14129 install their decls in the enumeration type.
14130 ENUMTYPE is the type object. */
14132 void
14133 finish_enum_value_list (tree enumtype)
14135 tree values;
14136 tree underlying_type;
14137 tree decl;
14138 tree value;
14139 tree minnode, maxnode;
14140 tree t;
14142 bool fixed_underlying_type_p
14143 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14145 /* We built up the VALUES in reverse order. */
14146 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14148 /* For an enum defined in a template, just set the type of the values;
14149 all further processing is postponed until the template is
14150 instantiated. We need to set the type so that tsubst of a CONST_DECL
14151 works. */
14152 if (processing_template_decl)
14154 for (values = TYPE_VALUES (enumtype);
14155 values;
14156 values = TREE_CHAIN (values))
14157 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14158 return;
14161 /* Determine the minimum and maximum values of the enumerators. */
14162 if (TYPE_VALUES (enumtype))
14164 minnode = maxnode = NULL_TREE;
14166 for (values = TYPE_VALUES (enumtype);
14167 values;
14168 values = TREE_CHAIN (values))
14170 decl = TREE_VALUE (values);
14172 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14173 each enumerator has the type of its enumeration. Prior to the
14174 closing brace, the type of each enumerator is the type of its
14175 initializing value. */
14176 TREE_TYPE (decl) = enumtype;
14178 /* Update the minimum and maximum values, if appropriate. */
14179 value = DECL_INITIAL (decl);
14180 if (value == error_mark_node)
14181 value = integer_zero_node;
14182 /* Figure out what the minimum and maximum values of the
14183 enumerators are. */
14184 if (!minnode)
14185 minnode = maxnode = value;
14186 else if (tree_int_cst_lt (maxnode, value))
14187 maxnode = value;
14188 else if (tree_int_cst_lt (value, minnode))
14189 minnode = value;
14192 else
14193 /* [dcl.enum]
14195 If the enumerator-list is empty, the underlying type is as if
14196 the enumeration had a single enumerator with value 0. */
14197 minnode = maxnode = integer_zero_node;
14199 if (!fixed_underlying_type_p)
14201 /* Compute the number of bits require to represent all values of the
14202 enumeration. We must do this before the type of MINNODE and
14203 MAXNODE are transformed, since tree_int_cst_min_precision relies
14204 on the TREE_TYPE of the value it is passed. */
14205 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14206 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14207 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14208 int precision = MAX (lowprec, highprec);
14209 unsigned int itk;
14210 bool use_short_enum;
14212 /* Determine the underlying type of the enumeration.
14214 [dcl.enum]
14216 The underlying type of an enumeration is an integral type that
14217 can represent all the enumerator values defined in the
14218 enumeration. It is implementation-defined which integral type is
14219 used as the underlying type for an enumeration except that the
14220 underlying type shall not be larger than int unless the value of
14221 an enumerator cannot fit in an int or unsigned int.
14223 We use "int" or an "unsigned int" as the underlying type, even if
14224 a smaller integral type would work, unless the user has
14225 explicitly requested that we use the smallest possible type. The
14226 user can request that for all enumerations with a command line
14227 flag, or for just one enumeration with an attribute. */
14229 use_short_enum = flag_short_enums
14230 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14232 /* If the precision of the type was specified with an attribute and it
14233 was too small, give an error. Otherwise, use it. */
14234 if (TYPE_PRECISION (enumtype))
14236 if (precision > TYPE_PRECISION (enumtype))
14237 error ("specified mode too small for enumeral values");
14238 else
14240 use_short_enum = true;
14241 precision = TYPE_PRECISION (enumtype);
14245 for (itk = (use_short_enum ? itk_char : itk_int);
14246 itk != itk_none;
14247 itk++)
14249 underlying_type = integer_types[itk];
14250 if (underlying_type != NULL_TREE
14251 && TYPE_PRECISION (underlying_type) >= precision
14252 && TYPE_SIGN (underlying_type) == sgn)
14253 break;
14255 if (itk == itk_none)
14257 /* DR 377
14259 IF no integral type can represent all the enumerator values, the
14260 enumeration is ill-formed. */
14261 error ("no integral type can represent all of the enumerator values "
14262 "for %qT", enumtype);
14263 precision = TYPE_PRECISION (long_long_integer_type_node);
14264 underlying_type = integer_types[itk_unsigned_long_long];
14267 /* [dcl.enum]
14269 The value of sizeof() applied to an enumeration type, an object
14270 of an enumeration type, or an enumerator, is the value of sizeof()
14271 applied to the underlying type. */
14272 copy_type_enum (enumtype, underlying_type);
14274 /* Compute the minimum and maximum values for the type.
14276 [dcl.enum]
14278 For an enumeration where emin is the smallest enumerator and emax
14279 is the largest, the values of the enumeration are the values of the
14280 underlying type in the range bmin to bmax, where bmin and bmax are,
14281 respectively, the smallest and largest values of the smallest bit-
14282 field that can store emin and emax. */
14284 /* The middle-end currently assumes that types with TYPE_PRECISION
14285 narrower than their underlying type are suitably zero or sign
14286 extended to fill their mode. Similarly, it assumes that the front
14287 end assures that a value of a particular type must be within
14288 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14290 We used to set these fields based on bmin and bmax, but that led
14291 to invalid assumptions like optimizing away bounds checking. So
14292 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14293 TYPE_MAX_VALUE to the values for the mode above and only restrict
14294 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14295 ENUM_UNDERLYING_TYPE (enumtype)
14296 = build_distinct_type_copy (underlying_type);
14297 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14298 set_min_and_max_values_for_integral_type
14299 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14301 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14302 if (flag_strict_enums)
14303 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14305 else
14306 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14308 /* Convert each of the enumerators to the type of the underlying
14309 type of the enumeration. */
14310 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14312 location_t saved_location;
14314 decl = TREE_VALUE (values);
14315 saved_location = input_location;
14316 input_location = DECL_SOURCE_LOCATION (decl);
14317 if (fixed_underlying_type_p)
14318 /* If the enumeration type has a fixed underlying type, we
14319 already checked all of the enumerator values. */
14320 value = DECL_INITIAL (decl);
14321 else
14322 value = perform_implicit_conversion (underlying_type,
14323 DECL_INITIAL (decl),
14324 tf_warning_or_error);
14325 input_location = saved_location;
14327 /* Do not clobber shared ints. */
14328 if (value != error_mark_node)
14330 value = copy_node (value);
14332 TREE_TYPE (value) = enumtype;
14334 DECL_INITIAL (decl) = value;
14337 /* Fix up all variant types of this enum type. */
14338 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14339 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14341 if (at_class_scope_p ()
14342 && COMPLETE_TYPE_P (current_class_type)
14343 && UNSCOPED_ENUM_P (enumtype))
14345 insert_late_enum_def_bindings (current_class_type, enumtype);
14346 /* TYPE_FIELDS needs fixup. */
14347 fixup_type_variants (current_class_type);
14350 /* Finish debugging output for this type. */
14351 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14353 /* Each enumerator now has the type of its enumeration. Clear the cache
14354 so that this change in types doesn't confuse us later on. */
14355 clear_cv_and_fold_caches ();
14358 /* Finishes the enum type. This is called only the first time an
14359 enumeration is seen, be it opaque or odinary.
14360 ENUMTYPE is the type object. */
14362 void
14363 finish_enum (tree enumtype)
14365 if (processing_template_decl)
14367 if (at_function_scope_p ())
14368 add_stmt (build_min (TAG_DEFN, enumtype));
14369 return;
14372 /* If this is a forward declaration, there should not be any variants,
14373 though we can get a variant in the middle of an enum-specifier with
14374 wacky code like 'enum E { e = sizeof(const E*) };' */
14375 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14376 && (TYPE_VALUES (enumtype)
14377 || !TYPE_NEXT_VARIANT (enumtype)));
14380 /* Build and install a CONST_DECL for an enumeration constant of the
14381 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14382 Apply ATTRIBUTES if available. LOC is the location of NAME.
14383 Assignment of sequential values by default is handled here. */
14385 void
14386 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14387 location_t loc)
14389 tree decl;
14390 tree context;
14391 tree type;
14393 /* scalar_constant_value will pull out this expression, so make sure
14394 it's folded as appropriate. */
14395 if (processing_template_decl)
14396 value = fold_non_dependent_expr (value);
14398 /* If the VALUE was erroneous, pretend it wasn't there; that will
14399 result in the enum being assigned the next value in sequence. */
14400 if (value == error_mark_node)
14401 value = NULL_TREE;
14403 /* Remove no-op casts from the value. */
14404 if (value)
14405 STRIP_TYPE_NOPS (value);
14407 if (! processing_template_decl)
14409 /* Validate and default VALUE. */
14410 if (value != NULL_TREE)
14412 if (!ENUM_UNDERLYING_TYPE (enumtype))
14414 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14415 value, true);
14416 if (tmp_value)
14417 value = tmp_value;
14419 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14420 (TREE_TYPE (value)))
14421 value = perform_implicit_conversion_flags
14422 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14423 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14425 if (value == error_mark_node)
14426 value = NULL_TREE;
14428 if (value != NULL_TREE)
14430 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14431 (TREE_TYPE (value)))
14433 error ("enumerator value for %qD must have integral or "
14434 "unscoped enumeration type", name);
14435 value = NULL_TREE;
14437 else
14439 value = cxx_constant_value (value);
14441 if (TREE_CODE (value) != INTEGER_CST)
14443 error ("enumerator value for %qD is not an integer "
14444 "constant", name);
14445 value = NULL_TREE;
14451 /* Default based on previous value. */
14452 if (value == NULL_TREE)
14454 if (TYPE_VALUES (enumtype))
14456 tree prev_value;
14457 bool overflowed;
14459 /* C++03 7.2/4: If no initializer is specified for the first
14460 enumerator, the type is an unspecified integral
14461 type. Otherwise the type is the same as the type of the
14462 initializing value of the preceding enumerator unless the
14463 incremented value is not representable in that type, in
14464 which case the type is an unspecified integral type
14465 sufficient to contain the incremented value. */
14466 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14467 if (error_operand_p (prev_value))
14468 value = error_mark_node;
14469 else
14471 tree type = TREE_TYPE (prev_value);
14472 signop sgn = TYPE_SIGN (type);
14473 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14474 &overflowed);
14475 if (!overflowed)
14477 bool pos = !wi::neg_p (wi, sgn);
14478 if (!wi::fits_to_tree_p (wi, type))
14480 unsigned int itk;
14481 for (itk = itk_int; itk != itk_none; itk++)
14483 type = integer_types[itk];
14484 if (type != NULL_TREE
14485 && (pos || !TYPE_UNSIGNED (type))
14486 && wi::fits_to_tree_p (wi, type))
14487 break;
14489 if (type && cxx_dialect < cxx11
14490 && itk > itk_unsigned_long)
14491 pedwarn (input_location, OPT_Wlong_long,
14492 pos ? G_("\
14493 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14494 incremented enumerator value is too large for %<long%>"));
14496 if (type == NULL_TREE)
14497 overflowed = true;
14498 else
14499 value = wide_int_to_tree (type, wi);
14502 if (overflowed)
14504 error ("overflow in enumeration values at %qD", name);
14505 value = error_mark_node;
14509 else
14510 value = integer_zero_node;
14513 /* Remove no-op casts from the value. */
14514 STRIP_TYPE_NOPS (value);
14516 /* If the underlying type of the enum is fixed, check whether
14517 the enumerator values fits in the underlying type. If it
14518 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14519 if (ENUM_UNDERLYING_TYPE (enumtype)
14520 && value
14521 && TREE_CODE (value) == INTEGER_CST)
14523 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14524 error ("enumerator value %qE is outside the range of underlying "
14525 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14527 /* Convert the value to the appropriate type. */
14528 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14532 /* C++ associates enums with global, function, or class declarations. */
14533 context = current_scope ();
14535 /* Build the actual enumeration constant. Note that the enumeration
14536 constants have the underlying type of the enum (if it is fixed)
14537 or the type of their initializer (if the underlying type of the
14538 enum is not fixed):
14540 [ C++0x dcl.enum ]
14542 If the underlying type is fixed, the type of each enumerator
14543 prior to the closing brace is the underlying type; if the
14544 initializing value of an enumerator cannot be represented by
14545 the underlying type, the program is ill-formed. If the
14546 underlying type is not fixed, the type of each enumerator is
14547 the type of its initializing value.
14549 If the underlying type is not fixed, it will be computed by
14550 finish_enum and we will reset the type of this enumerator. Of
14551 course, if we're processing a template, there may be no value. */
14552 type = value ? TREE_TYPE (value) : NULL_TREE;
14554 decl = build_decl (loc, CONST_DECL, name, type);
14556 DECL_CONTEXT (decl) = enumtype;
14557 TREE_CONSTANT (decl) = 1;
14558 TREE_READONLY (decl) = 1;
14559 DECL_INITIAL (decl) = value;
14561 if (attributes)
14562 cplus_decl_attributes (&decl, attributes, 0);
14564 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14566 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14567 on the TYPE_FIELDS list for `S'. (That's so that you can say
14568 things like `S::i' later.) */
14570 /* The enumerator may be getting declared outside of its enclosing
14571 class, like so:
14573 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14575 For which case we need to make sure that the access of `S::i'
14576 matches the access of `S::E'. */
14577 tree saved_cas = current_access_specifier;
14578 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14579 current_access_specifier = access_private_node;
14580 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14581 current_access_specifier = access_protected_node;
14582 else
14583 current_access_specifier = access_public_node;
14585 finish_member_declaration (decl);
14587 current_access_specifier = saved_cas;
14589 else
14590 pushdecl (decl);
14592 /* Add this enumeration constant to the list for this type. */
14593 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14596 /* Look for an enumerator with the given NAME within the enumeration
14597 type ENUMTYPE. This routine is used primarily for qualified name
14598 lookup into an enumerator in C++0x, e.g.,
14600 enum class Color { Red, Green, Blue };
14602 Color color = Color::Red;
14604 Returns the value corresponding to the enumerator, or
14605 NULL_TREE if no such enumerator was found. */
14606 tree
14607 lookup_enumerator (tree enumtype, tree name)
14609 tree e;
14610 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14612 e = purpose_member (name, TYPE_VALUES (enumtype));
14613 return e? TREE_VALUE (e) : NULL_TREE;
14617 /* We're defining DECL. Make sure that its type is OK. */
14619 static void
14620 check_function_type (tree decl, tree current_function_parms)
14622 tree fntype = TREE_TYPE (decl);
14623 tree return_type = complete_type (TREE_TYPE (fntype));
14625 /* In a function definition, arg types must be complete. */
14626 require_complete_types_for_parms (current_function_parms);
14628 if (dependent_type_p (return_type)
14629 || type_uses_auto (return_type))
14630 return;
14631 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14633 tree args = TYPE_ARG_TYPES (fntype);
14635 error ("return type %q#T is incomplete", return_type);
14637 /* Make it return void instead. */
14638 if (TREE_CODE (fntype) == METHOD_TYPE)
14639 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14640 void_type_node,
14641 TREE_CHAIN (args));
14642 else
14643 fntype = build_function_type (void_type_node, args);
14644 fntype
14645 = build_exception_variant (fntype,
14646 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
14647 fntype = (cp_build_type_attribute_variant
14648 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14649 TREE_TYPE (decl) = fntype;
14651 else
14653 abstract_virtuals_error (decl, TREE_TYPE (fntype));
14654 maybe_warn_parm_abi (TREE_TYPE (fntype),
14655 DECL_SOURCE_LOCATION (decl));
14659 /* True iff FN is an implicitly-defined default constructor. */
14661 static bool
14662 implicit_default_ctor_p (tree fn)
14664 return (DECL_CONSTRUCTOR_P (fn)
14665 && !user_provided_p (fn)
14666 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14669 /* Clobber the contents of *this to let the back end know that the object
14670 storage is dead when we enter the constructor or leave the destructor. */
14672 static tree
14673 build_clobber_this ()
14675 /* Clobbering an empty base is pointless, and harmful if its one byte
14676 TYPE_SIZE overlays real data. */
14677 if (is_empty_class (current_class_type))
14678 return void_node;
14680 /* If we have virtual bases, clobber the whole object, but only if we're in
14681 charge. If we don't have virtual bases, clobber the as-base type so we
14682 don't mess with tail padding. */
14683 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14685 tree ctype = current_class_type;
14686 if (!vbases)
14687 ctype = CLASSTYPE_AS_BASE (ctype);
14689 tree clobber = build_constructor (ctype, NULL);
14690 TREE_THIS_VOLATILE (clobber) = true;
14692 tree thisref = current_class_ref;
14693 if (ctype != current_class_type)
14695 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14696 thisref = convert_from_reference (thisref);
14699 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14700 if (vbases)
14701 exprstmt = build_if_in_charge (exprstmt);
14703 return exprstmt;
14706 /* Create the FUNCTION_DECL for a function definition.
14707 DECLSPECS and DECLARATOR are the parts of the declaration;
14708 they describe the function's name and the type it returns,
14709 but twisted together in a fashion that parallels the syntax of C.
14711 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14712 DECLARATOR is really the DECL for the function we are about to
14713 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14714 indicating that the function is an inline defined in-class.
14716 This function creates a binding context for the function body
14717 as well as setting up the FUNCTION_DECL in current_function_decl.
14719 For C++, we must first check whether that datum makes any sense.
14720 For example, "class A local_a(1,2);" means that variable local_a
14721 is an aggregate of type A, which should have a constructor
14722 applied to it with the argument list [1, 2].
14724 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14725 or may be a BLOCK if the function has been defined previously
14726 in this translation unit. On exit, DECL_INITIAL (decl1) will be
14727 error_mark_node if the function has never been defined, or
14728 a BLOCK if the function has been defined somewhere. */
14730 bool
14731 start_preparsed_function (tree decl1, tree attrs, int flags)
14733 tree ctype = NULL_TREE;
14734 tree fntype;
14735 tree restype;
14736 int doing_friend = 0;
14737 cp_binding_level *bl;
14738 tree current_function_parms;
14739 struct c_fileinfo *finfo
14740 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14741 bool honor_interface;
14743 /* Sanity check. */
14744 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14745 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14747 fntype = TREE_TYPE (decl1);
14748 if (TREE_CODE (fntype) == METHOD_TYPE)
14749 ctype = TYPE_METHOD_BASETYPE (fntype);
14751 /* ISO C++ 11.4/5. A friend function defined in a class is in
14752 the (lexical) scope of the class in which it is defined. */
14753 if (!ctype && DECL_FRIEND_P (decl1))
14755 ctype = DECL_FRIEND_CONTEXT (decl1);
14757 /* CTYPE could be null here if we're dealing with a template;
14758 for example, `inline friend float foo()' inside a template
14759 will have no CTYPE set. */
14760 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14761 ctype = NULL_TREE;
14762 else
14763 doing_friend = 1;
14766 if (DECL_DECLARED_INLINE_P (decl1)
14767 && lookup_attribute ("noinline", attrs))
14768 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14769 "inline function %qD given attribute noinline", decl1);
14771 /* Handle gnu_inline attribute. */
14772 if (GNU_INLINE_P (decl1))
14774 DECL_EXTERNAL (decl1) = 1;
14775 DECL_NOT_REALLY_EXTERN (decl1) = 0;
14776 DECL_INTERFACE_KNOWN (decl1) = 1;
14777 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14780 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
14781 /* This is a constructor, we must ensure that any default args
14782 introduced by this definition are propagated to the clones
14783 now. The clones are used directly in overload resolution. */
14784 adjust_clone_args (decl1);
14786 /* Sometimes we don't notice that a function is a static member, and
14787 build a METHOD_TYPE for it. Fix that up now. */
14788 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
14789 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
14791 /* Set up current_class_type, and enter the scope of the class, if
14792 appropriate. */
14793 if (ctype)
14794 push_nested_class (ctype);
14795 else if (DECL_STATIC_FUNCTION_P (decl1))
14796 push_nested_class (DECL_CONTEXT (decl1));
14798 /* Now that we have entered the scope of the class, we must restore
14799 the bindings for any template parameters surrounding DECL1, if it
14800 is an inline member template. (Order is important; consider the
14801 case where a template parameter has the same name as a field of
14802 the class.) It is not until after this point that
14803 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14804 if (flags & SF_INCLASS_INLINE)
14805 maybe_begin_member_template_processing (decl1);
14807 /* Effective C++ rule 15. */
14808 if (warn_ecpp
14809 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
14810 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
14811 && VOID_TYPE_P (TREE_TYPE (fntype)))
14812 warning (OPT_Weffc__,
14813 "%<operator=%> should return a reference to %<*this%>");
14815 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14816 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14817 if (!DECL_INITIAL (decl1))
14818 DECL_INITIAL (decl1) = error_mark_node;
14820 /* This function exists in static storage.
14821 (This does not mean `static' in the C sense!) */
14822 TREE_STATIC (decl1) = 1;
14824 /* We must call push_template_decl after current_class_type is set
14825 up. (If we are processing inline definitions after exiting a
14826 class scope, current_class_type will be NULL_TREE until set above
14827 by push_nested_class.) */
14828 if (processing_template_decl)
14830 tree newdecl1 = push_template_decl (decl1);
14831 if (newdecl1 == error_mark_node)
14833 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
14834 pop_nested_class ();
14835 return false;
14837 decl1 = newdecl1;
14840 /* Make sure the parameter and return types are reasonable. When
14841 you declare a function, these types can be incomplete, but they
14842 must be complete when you define the function. */
14843 check_function_type (decl1, DECL_ARGUMENTS (decl1));
14845 /* Build the return declaration for the function. */
14846 restype = TREE_TYPE (fntype);
14848 if (DECL_RESULT (decl1) == NULL_TREE)
14850 tree resdecl;
14852 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
14853 DECL_ARTIFICIAL (resdecl) = 1;
14854 DECL_IGNORED_P (resdecl) = 1;
14855 DECL_RESULT (decl1) = resdecl;
14857 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
14860 /* Record the decl so that the function name is defined.
14861 If we already have a decl for this name, and it is a FUNCTION_DECL,
14862 use the old decl. */
14863 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
14865 /* A specialization is not used to guide overload resolution. */
14866 if (!DECL_FUNCTION_MEMBER_P (decl1)
14867 && !(DECL_USE_TEMPLATE (decl1) &&
14868 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
14870 tree olddecl = pushdecl (decl1);
14872 if (olddecl == error_mark_node)
14873 /* If something went wrong when registering the declaration,
14874 use DECL1; we have to have a FUNCTION_DECL to use when
14875 parsing the body of the function. */
14877 else
14879 /* Otherwise, OLDDECL is either a previous declaration
14880 of the same function or DECL1 itself. */
14882 if (warn_missing_declarations
14883 && olddecl == decl1
14884 && !DECL_MAIN_P (decl1)
14885 && TREE_PUBLIC (decl1)
14886 && !DECL_DECLARED_INLINE_P (decl1))
14888 tree context;
14890 /* Check whether DECL1 is in an anonymous
14891 namespace. */
14892 for (context = DECL_CONTEXT (decl1);
14893 context;
14894 context = DECL_CONTEXT (context))
14896 if (TREE_CODE (context) == NAMESPACE_DECL
14897 && DECL_NAME (context) == NULL_TREE)
14898 break;
14901 if (context == NULL)
14902 warning_at (DECL_SOURCE_LOCATION (decl1),
14903 OPT_Wmissing_declarations,
14904 "no previous declaration for %qD", decl1);
14907 decl1 = olddecl;
14910 else
14912 /* We need to set the DECL_CONTEXT. */
14913 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
14914 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
14916 fntype = TREE_TYPE (decl1);
14917 restype = TREE_TYPE (fntype);
14919 /* If #pragma weak applies, mark the decl appropriately now.
14920 The pragma only applies to global functions. Because
14921 determining whether or not the #pragma applies involves
14922 computing the mangled name for the declaration, we cannot
14923 apply the pragma until after we have merged this declaration
14924 with any previous declarations; if the original declaration
14925 has a linkage specification, that specification applies to
14926 the definition as well, and may affect the mangled name. */
14927 if (DECL_FILE_SCOPE_P (decl1))
14928 maybe_apply_pragma_weak (decl1);
14931 /* We are now in the scope of the function being defined. */
14932 current_function_decl = decl1;
14934 /* Save the parm names or decls from this function's declarator
14935 where store_parm_decls will find them. */
14936 current_function_parms = DECL_ARGUMENTS (decl1);
14938 /* Let the user know we're compiling this function. */
14939 announce_function (decl1);
14941 gcc_assert (DECL_INITIAL (decl1));
14943 /* This function may already have been parsed, in which case just
14944 return; our caller will skip over the body without parsing. */
14945 if (DECL_INITIAL (decl1) != error_mark_node)
14946 return true;
14948 /* Initialize RTL machinery. We cannot do this until
14949 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
14950 even when processing a template; this is how we get
14951 CFUN set up, and our per-function variables initialized.
14952 FIXME factor out the non-RTL stuff. */
14953 bl = current_binding_level;
14954 allocate_struct_function (decl1, processing_template_decl);
14956 /* Initialize the language data structures. Whenever we start
14957 a new function, we destroy temporaries in the usual way. */
14958 cfun->language = ggc_cleared_alloc<language_function> ();
14959 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
14960 current_binding_level = bl;
14962 if (!processing_template_decl && type_uses_auto (restype))
14964 FNDECL_USED_AUTO (decl1) = true;
14965 current_function_auto_return_pattern = restype;
14968 /* Start the statement-tree, start the tree now. */
14969 DECL_SAVED_TREE (decl1) = push_stmt_list ();
14971 /* If we are (erroneously) defining a function that we have already
14972 defined before, wipe out what we knew before. */
14973 if (!DECL_PENDING_INLINE_P (decl1))
14974 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
14976 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
14978 /* We know that this was set up by `grokclassfn'. We do not
14979 wait until `store_parm_decls', since evil parse errors may
14980 never get us to that point. Here we keep the consistency
14981 between `current_class_type' and `current_class_ptr'. */
14982 tree t = DECL_ARGUMENTS (decl1);
14984 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
14985 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
14987 cp_function_chain->x_current_class_ref
14988 = cp_build_fold_indirect_ref (t);
14989 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
14990 cp_function_chain->x_current_class_ptr = t;
14992 /* Constructors and destructors need to know whether they're "in
14993 charge" of initializing virtual base classes. */
14994 t = DECL_CHAIN (t);
14995 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
14997 current_in_charge_parm = t;
14998 t = DECL_CHAIN (t);
15000 if (DECL_HAS_VTT_PARM_P (decl1))
15002 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15003 current_vtt_parm = t;
15007 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15008 /* Implicitly-defined methods (like the
15009 destructor for a class in which no destructor
15010 is explicitly declared) must not be defined
15011 until their definition is needed. So, we
15012 ignore interface specifications for
15013 compiler-generated functions. */
15014 && !DECL_ARTIFICIAL (decl1));
15016 if (processing_template_decl)
15017 /* Don't mess with interface flags. */;
15018 else if (DECL_INTERFACE_KNOWN (decl1))
15020 tree ctx = decl_function_context (decl1);
15022 if (DECL_NOT_REALLY_EXTERN (decl1))
15023 DECL_EXTERNAL (decl1) = 0;
15025 if (ctx != NULL_TREE && vague_linkage_p (ctx))
15026 /* This is a function in a local class in an extern inline
15027 or template function. */
15028 comdat_linkage (decl1);
15030 /* If this function belongs to an interface, it is public.
15031 If it belongs to someone else's interface, it is also external.
15032 This only affects inlines and template instantiations. */
15033 else if (!finfo->interface_unknown && honor_interface)
15035 if (DECL_DECLARED_INLINE_P (decl1)
15036 || DECL_TEMPLATE_INSTANTIATION (decl1))
15038 DECL_EXTERNAL (decl1)
15039 = (finfo->interface_only
15040 || (DECL_DECLARED_INLINE_P (decl1)
15041 && ! flag_implement_inlines
15042 && !DECL_VINDEX (decl1)));
15044 /* For WIN32 we also want to put these in linkonce sections. */
15045 maybe_make_one_only (decl1);
15047 else
15048 DECL_EXTERNAL (decl1) = 0;
15049 DECL_INTERFACE_KNOWN (decl1) = 1;
15050 /* If this function is in an interface implemented in this file,
15051 make sure that the back end knows to emit this function
15052 here. */
15053 if (!DECL_EXTERNAL (decl1))
15054 mark_needed (decl1);
15056 else if (finfo->interface_unknown && finfo->interface_only
15057 && honor_interface)
15059 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15060 interface, we will have both finfo->interface_unknown and
15061 finfo->interface_only set. In that case, we don't want to
15062 use the normal heuristics because someone will supply a
15063 #pragma implementation elsewhere, and deducing it here would
15064 produce a conflict. */
15065 comdat_linkage (decl1);
15066 DECL_EXTERNAL (decl1) = 0;
15067 DECL_INTERFACE_KNOWN (decl1) = 1;
15068 DECL_DEFER_OUTPUT (decl1) = 1;
15070 else
15072 /* This is a definition, not a reference.
15073 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15074 if (!GNU_INLINE_P (decl1))
15075 DECL_EXTERNAL (decl1) = 0;
15077 if ((DECL_DECLARED_INLINE_P (decl1)
15078 || DECL_TEMPLATE_INSTANTIATION (decl1))
15079 && ! DECL_INTERFACE_KNOWN (decl1))
15080 DECL_DEFER_OUTPUT (decl1) = 1;
15081 else
15082 DECL_INTERFACE_KNOWN (decl1) = 1;
15085 /* Determine the ELF visibility attribute for the function. We must not
15086 do this before calling "pushdecl", as we must allow "duplicate_decls"
15087 to merge any attributes appropriately. We also need to wait until
15088 linkage is set. */
15089 if (!DECL_CLONED_FUNCTION_P (decl1))
15090 determine_visibility (decl1);
15092 if (!processing_template_decl)
15093 maybe_instantiate_noexcept (decl1);
15095 begin_scope (sk_function_parms, decl1);
15097 ++function_depth;
15099 if (DECL_DESTRUCTOR_P (decl1)
15100 || (DECL_CONSTRUCTOR_P (decl1)
15101 && targetm.cxx.cdtor_returns_this ()))
15103 cdtor_label = create_artificial_label (input_location);
15104 LABEL_DECL_CDTOR (cdtor_label) = true;
15107 start_fname_decls ();
15109 store_parm_decls (current_function_parms);
15111 if (!processing_template_decl
15112 && (flag_lifetime_dse > 1)
15113 && DECL_CONSTRUCTOR_P (decl1)
15114 && !DECL_CLONED_FUNCTION_P (decl1)
15115 /* Clobbering an empty base is harmful if it overlays real data. */
15116 && !is_empty_class (current_class_type)
15117 /* We can't clobber safely for an implicitly-defined default constructor
15118 because part of the initialization might happen before we enter the
15119 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15120 && !implicit_default_ctor_p (decl1))
15121 finish_expr_stmt (build_clobber_this ());
15123 if (!processing_template_decl
15124 && DECL_CONSTRUCTOR_P (decl1)
15125 && sanitize_flags_p (SANITIZE_VPTR)
15126 && !DECL_CLONED_FUNCTION_P (decl1)
15127 && !implicit_default_ctor_p (decl1))
15128 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15130 start_lambda_scope (decl1);
15132 return true;
15136 /* Like start_preparsed_function, except that instead of a
15137 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15139 Returns true on success. If the DECLARATOR is not suitable
15140 for a function, we return false, which tells the parser to
15141 skip the entire function. */
15143 bool
15144 start_function (cp_decl_specifier_seq *declspecs,
15145 const cp_declarator *declarator,
15146 tree attrs)
15148 tree decl1;
15150 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15151 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15152 if (decl1 == error_mark_node)
15153 return false;
15154 /* If the declarator is not suitable for a function definition,
15155 cause a syntax error. */
15156 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15158 error ("invalid function declaration");
15159 return false;
15162 if (DECL_MAIN_P (decl1))
15163 /* main must return int. grokfndecl should have corrected it
15164 (and issued a diagnostic) if the user got it wrong. */
15165 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15166 integer_type_node));
15168 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15171 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15172 FN. */
15174 static bool
15175 use_eh_spec_block (tree fn)
15177 return (flag_exceptions && flag_enforce_eh_specs
15178 && !processing_template_decl
15179 && !type_throw_all_p (TREE_TYPE (fn))
15180 /* We insert the EH_SPEC_BLOCK only in the original
15181 function; then, it is copied automatically to the
15182 clones. */
15183 && !DECL_CLONED_FUNCTION_P (fn)
15184 /* Implicitly-generated constructors and destructors have
15185 exception specifications. However, those specifications
15186 are the union of the possible exceptions specified by the
15187 constructors/destructors for bases and members, so no
15188 unallowed exception will ever reach this function. By
15189 not creating the EH_SPEC_BLOCK we save a little memory,
15190 and we avoid spurious warnings about unreachable
15191 code. */
15192 && !DECL_DEFAULTED_FN (fn));
15195 /* Store the parameter declarations into the current function declaration.
15196 This is called after parsing the parameter declarations, before
15197 digesting the body of the function.
15199 Also install to binding contour return value identifier, if any. */
15201 static void
15202 store_parm_decls (tree current_function_parms)
15204 tree fndecl = current_function_decl;
15205 tree parm;
15207 /* This is a chain of any other decls that came in among the parm
15208 declarations. If a parm is declared with enum {foo, bar} x;
15209 then CONST_DECLs for foo and bar are put here. */
15210 tree nonparms = NULL_TREE;
15212 if (current_function_parms)
15214 /* This case is when the function was defined with an ANSI prototype.
15215 The parms already have decls, so we need not do anything here
15216 except record them as in effect
15217 and complain if any redundant old-style parm decls were written. */
15219 tree specparms = current_function_parms;
15220 tree next;
15222 /* Must clear this because it might contain TYPE_DECLs declared
15223 at class level. */
15224 current_binding_level->names = NULL;
15226 /* If we're doing semantic analysis, then we'll call pushdecl
15227 for each of these. We must do them in reverse order so that
15228 they end in the correct forward order. */
15229 specparms = nreverse (specparms);
15231 for (parm = specparms; parm; parm = next)
15233 next = DECL_CHAIN (parm);
15234 if (TREE_CODE (parm) == PARM_DECL)
15235 pushdecl (parm);
15236 else
15238 /* If we find an enum constant or a type tag,
15239 put it aside for the moment. */
15240 TREE_CHAIN (parm) = NULL_TREE;
15241 nonparms = chainon (nonparms, parm);
15245 /* Get the decls in their original chain order and record in the
15246 function. This is all and only the PARM_DECLs that were
15247 pushed into scope by the loop above. */
15248 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15250 else
15251 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15253 /* Now store the final chain of decls for the arguments
15254 as the decl-chain of the current lexical scope.
15255 Put the enumerators in as well, at the front so that
15256 DECL_ARGUMENTS is not modified. */
15257 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15259 if (use_eh_spec_block (current_function_decl))
15260 current_eh_spec_block = begin_eh_spec_block ();
15264 /* We have finished doing semantic analysis on DECL, but have not yet
15265 generated RTL for its body. Save away our current state, so that
15266 when we want to generate RTL later we know what to do. */
15268 static void
15269 save_function_data (tree decl)
15271 struct language_function *f;
15273 /* Save the language-specific per-function data so that we can
15274 get it back when we really expand this function. */
15275 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15277 /* Make a copy. */
15278 f = ggc_alloc<language_function> ();
15279 memcpy (f, cp_function_chain, sizeof (struct language_function));
15280 DECL_SAVED_FUNCTION_DATA (decl) = f;
15282 /* Clear out the bits we don't need. */
15283 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15284 f->bindings = NULL;
15285 f->x_local_names = NULL;
15286 f->base.local_typedefs = NULL;
15290 /* Set the return value of the constructor (if present). */
15292 static void
15293 finish_constructor_body (void)
15295 tree val;
15296 tree exprstmt;
15298 if (targetm.cxx.cdtor_returns_this ())
15300 /* Any return from a constructor will end up here. */
15301 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15303 val = DECL_ARGUMENTS (current_function_decl);
15304 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15305 DECL_RESULT (current_function_decl), val);
15306 /* Return the address of the object. */
15307 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15308 add_stmt (exprstmt);
15312 /* Do all the processing for the beginning of a destructor; set up the
15313 vtable pointers and cleanups for bases and members. */
15315 static void
15316 begin_destructor_body (void)
15318 tree compound_stmt;
15320 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15321 issued an error message. We still want to try to process the
15322 body of the function, but initialize_vtbl_ptrs will crash if
15323 TYPE_BINFO is NULL. */
15324 if (COMPLETE_TYPE_P (current_class_type))
15326 compound_stmt = begin_compound_stmt (0);
15327 /* Make all virtual function table pointers in non-virtual base
15328 classes point to CURRENT_CLASS_TYPE's virtual function
15329 tables. */
15330 initialize_vtbl_ptrs (current_class_ptr);
15331 finish_compound_stmt (compound_stmt);
15333 if (flag_lifetime_dse
15334 /* Clobbering an empty base is harmful if it overlays real data. */
15335 && !is_empty_class (current_class_type))
15337 if (sanitize_flags_p (SANITIZE_VPTR)
15338 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15339 && TYPE_CONTAINS_VPTR_P (current_class_type))
15341 tree binfo = TYPE_BINFO (current_class_type);
15342 tree ref
15343 = cp_build_fold_indirect_ref (current_class_ptr);
15345 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15346 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15347 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15348 NOP_EXPR, vtbl,
15349 tf_warning_or_error);
15350 finish_decl_cleanup (NULL_TREE, stmt);
15352 else
15353 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15356 /* And insert cleanups for our bases and members so that they
15357 will be properly destroyed if we throw. */
15358 push_base_cleanups ();
15362 /* At the end of every destructor we generate code to delete the object if
15363 necessary. Do that now. */
15365 static void
15366 finish_destructor_body (void)
15368 tree exprstmt;
15370 /* Any return from a destructor will end up here; that way all base
15371 and member cleanups will be run when the function returns. */
15372 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15374 if (targetm.cxx.cdtor_returns_this ())
15376 tree val;
15378 val = DECL_ARGUMENTS (current_function_decl);
15379 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15380 DECL_RESULT (current_function_decl), val);
15381 /* Return the address of the object. */
15382 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15383 add_stmt (exprstmt);
15387 /* Do the necessary processing for the beginning of a function body, which
15388 in this case includes member-initializers, but not the catch clauses of
15389 a function-try-block. Currently, this means opening a binding level
15390 for the member-initializers (in a ctor), member cleanups (in a dtor),
15391 and capture proxies (in a lambda operator()). */
15393 tree
15394 begin_function_body (void)
15396 tree stmt;
15398 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15399 return NULL_TREE;
15401 if (processing_template_decl)
15402 /* Do nothing now. */;
15403 else
15404 /* Always keep the BLOCK node associated with the outermost pair of
15405 curly braces of a function. These are needed for correct
15406 operation of dwarfout.c. */
15407 keep_next_level (true);
15409 stmt = begin_compound_stmt (BCS_FN_BODY);
15411 if (processing_template_decl)
15412 /* Do nothing now. */;
15413 else if (DECL_DESTRUCTOR_P (current_function_decl))
15414 begin_destructor_body ();
15416 return stmt;
15419 /* Do the processing for the end of a function body. Currently, this means
15420 closing out the cleanups for fully-constructed bases and members, and in
15421 the case of the destructor, deleting the object if desired. Again, this
15422 is only meaningful for [cd]tors, since they are the only functions where
15423 there is a significant distinction between the main body and any
15424 function catch clauses. Handling, say, main() return semantics here
15425 would be wrong, as flowing off the end of a function catch clause for
15426 main() would also need to return 0. */
15428 void
15429 finish_function_body (tree compstmt)
15431 if (compstmt == NULL_TREE)
15432 return;
15434 /* Close the block. */
15435 finish_compound_stmt (compstmt);
15437 if (processing_template_decl)
15438 /* Do nothing now. */;
15439 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15440 finish_constructor_body ();
15441 else if (DECL_DESTRUCTOR_P (current_function_decl))
15442 finish_destructor_body ();
15445 /* Given a function, returns the BLOCK corresponding to the outermost level
15446 of curly braces, skipping the artificial block created for constructor
15447 initializers. */
15449 tree
15450 outer_curly_brace_block (tree fndecl)
15452 tree block = DECL_INITIAL (fndecl);
15453 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15454 return block;
15455 block = BLOCK_SUBBLOCKS (block);
15456 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15457 return block;
15458 block = BLOCK_SUBBLOCKS (block);
15459 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15460 return block;
15463 /* If FNDECL is a class's key method, add the class to the list of
15464 keyed classes that should be emitted. */
15466 static void
15467 record_key_method_defined (tree fndecl)
15469 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15470 && DECL_VIRTUAL_P (fndecl)
15471 && !processing_template_decl)
15473 tree fnclass = DECL_CONTEXT (fndecl);
15474 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15475 vec_safe_push (keyed_classes, fnclass);
15479 /* Subroutine of finish_function.
15480 Save the body of constexpr functions for possible
15481 future compile time evaluation. */
15483 static void
15484 maybe_save_function_definition (tree fun)
15486 if (!processing_template_decl
15487 && DECL_DECLARED_CONSTEXPR_P (fun)
15488 && !cp_function_chain->invalid_constexpr
15489 && !DECL_CLONED_FUNCTION_P (fun))
15490 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15493 /* Finish up a function declaration and compile that function
15494 all the way to assembler language output. The free the storage
15495 for the function definition. INLINE_P is TRUE if we just
15496 finished processing the body of an in-class inline function
15497 definition. (This processing will have taken place after the
15498 class definition is complete.) */
15500 tree
15501 finish_function (bool inline_p)
15503 tree fndecl = current_function_decl;
15504 tree fntype, ctype = NULL_TREE;
15506 /* When we get some parse errors, we can end up without a
15507 current_function_decl, so cope. */
15508 if (fndecl == NULL_TREE)
15509 return error_mark_node;
15511 finish_lambda_scope ();
15513 if (c_dialect_objc ())
15514 objc_finish_function ();
15516 record_key_method_defined (fndecl);
15518 fntype = TREE_TYPE (fndecl);
15520 /* TREE_READONLY (fndecl) = 1;
15521 This caused &foo to be of type ptr-to-const-function
15522 which then got a warning when stored in a ptr-to-function variable. */
15524 gcc_assert (building_stmt_list_p ());
15525 /* The current function is being defined, so its DECL_INITIAL should
15526 be set, and unless there's a multiple definition, it should be
15527 error_mark_node. */
15528 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15530 /* For a cloned function, we've already got all the code we need;
15531 there's no need to add any extra bits. */
15532 if (!DECL_CLONED_FUNCTION_P (fndecl))
15534 /* Make it so that `main' always returns 0 by default. */
15535 if (DECL_MAIN_P (current_function_decl))
15536 finish_return_stmt (integer_zero_node);
15538 if (use_eh_spec_block (current_function_decl))
15539 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15540 (TREE_TYPE (current_function_decl)),
15541 current_eh_spec_block);
15544 /* If we're saving up tree structure, tie off the function now. */
15545 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15547 finish_fname_decls ();
15549 /* If this function can't throw any exceptions, remember that. */
15550 if (!processing_template_decl
15551 && !cp_function_chain->can_throw
15552 && !flag_non_call_exceptions
15553 && !decl_replaceable_p (fndecl))
15554 TREE_NOTHROW (fndecl) = 1;
15556 /* This must come after expand_function_end because cleanups might
15557 have declarations (from inline functions) that need to go into
15558 this function's blocks. */
15560 /* If the current binding level isn't the outermost binding level
15561 for this function, either there is a bug, or we have experienced
15562 syntax errors and the statement tree is malformed. */
15563 if (current_binding_level->kind != sk_function_parms)
15565 /* Make sure we have already experienced errors. */
15566 gcc_assert (errorcount);
15568 /* Throw away the broken statement tree and extra binding
15569 levels. */
15570 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15572 while (current_binding_level->kind != sk_function_parms)
15574 if (current_binding_level->kind == sk_class)
15575 pop_nested_class ();
15576 else
15577 poplevel (0, 0, 0);
15580 poplevel (1, 0, 1);
15582 /* Statements should always be full-expressions at the outermost set
15583 of curly braces for a function. */
15584 gcc_assert (stmts_are_full_exprs_p ());
15586 /* If there are no return statements in a function with auto return type,
15587 the return type is void. But if the declared type is something like
15588 auto*, this is an error. */
15589 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15590 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15592 if (is_auto (current_function_auto_return_pattern))
15594 apply_deduced_return_type (fndecl, void_type_node);
15595 fntype = TREE_TYPE (fndecl);
15597 else if (!current_function_returns_value
15598 && !current_function_returns_null)
15600 error ("no return statements in function returning %qT",
15601 current_function_auto_return_pattern);
15602 inform (input_location, "only plain %<auto%> return type can be "
15603 "deduced to %<void%>");
15607 // If this is a concept, check that the definition is reasonable.
15608 if (DECL_DECLARED_CONCEPT_P (fndecl))
15609 check_function_concept (fndecl);
15611 /* Lambda closure members are implicitly constexpr if possible. */
15612 if (cxx_dialect >= cxx17
15613 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15614 DECL_DECLARED_CONSTEXPR_P (fndecl)
15615 = ((processing_template_decl
15616 || is_valid_constexpr_fn (fndecl, /*complain*/false))
15617 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15619 /* Save constexpr function body before it gets munged by
15620 the NRV transformation. */
15621 maybe_save_function_definition (fndecl);
15623 /* Invoke the pre-genericize plugin before we start munging things. */
15624 if (!processing_template_decl)
15625 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15627 /* Perform delayed folding before NRV transformation. */
15628 if (!processing_template_decl)
15629 cp_fold_function (fndecl);
15631 /* Set up the named return value optimization, if we can. Candidate
15632 variables are selected in check_return_expr. */
15633 if (current_function_return_value)
15635 tree r = current_function_return_value;
15636 tree outer;
15638 if (r != error_mark_node
15639 /* This is only worth doing for fns that return in memory--and
15640 simpler, since we don't have to worry about promoted modes. */
15641 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15642 /* Only allow this for variables declared in the outer scope of
15643 the function so we know that their lifetime always ends with a
15644 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15645 we were to do this optimization in tree-ssa. */
15646 && (outer = outer_curly_brace_block (fndecl))
15647 && chain_member (r, BLOCK_VARS (outer)))
15648 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15650 current_function_return_value = NULL_TREE;
15653 /* Remember that we were in class scope. */
15654 if (current_class_name)
15655 ctype = current_class_type;
15657 /* Must mark the RESULT_DECL as being in this function. */
15658 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15660 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15661 to the FUNCTION_DECL node itself. */
15662 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15664 /* Save away current state, if appropriate. */
15665 if (!processing_template_decl)
15666 save_function_data (fndecl);
15668 /* Complain if there's just no return statement. */
15669 if (warn_return_type
15670 && !VOID_TYPE_P (TREE_TYPE (fntype))
15671 && !dependent_type_p (TREE_TYPE (fntype))
15672 && !current_function_returns_value && !current_function_returns_null
15673 /* Don't complain if we abort or throw. */
15674 && !current_function_returns_abnormally
15675 /* Don't complain if there's an infinite loop. */
15676 && !current_function_infinite_loop
15677 /* Don't complain if we are declared noreturn. */
15678 && !TREE_THIS_VOLATILE (fndecl)
15679 && !DECL_NAME (DECL_RESULT (fndecl))
15680 && !TREE_NO_WARNING (fndecl)
15681 /* Structor return values (if any) are set by the compiler. */
15682 && !DECL_CONSTRUCTOR_P (fndecl)
15683 && !DECL_DESTRUCTOR_P (fndecl)
15684 && targetm.warn_func_return (fndecl))
15686 warning (OPT_Wreturn_type,
15687 "no return statement in function returning non-void");
15688 TREE_NO_WARNING (fndecl) = 1;
15691 /* Store the end of the function, so that we get good line number
15692 info for the epilogue. */
15693 cfun->function_end_locus = input_location;
15695 /* Complain about parameters that are only set, but never otherwise used. */
15696 if (warn_unused_but_set_parameter
15697 && !processing_template_decl
15698 && errorcount == unused_but_set_errorcount
15699 && !DECL_CLONED_FUNCTION_P (fndecl))
15701 tree decl;
15703 for (decl = DECL_ARGUMENTS (fndecl);
15704 decl;
15705 decl = DECL_CHAIN (decl))
15706 if (TREE_USED (decl)
15707 && TREE_CODE (decl) == PARM_DECL
15708 && !DECL_READ_P (decl)
15709 && DECL_NAME (decl)
15710 && !DECL_ARTIFICIAL (decl)
15711 && !TREE_NO_WARNING (decl)
15712 && !DECL_IN_SYSTEM_HEADER (decl)
15713 && TREE_TYPE (decl) != error_mark_node
15714 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
15715 && (!CLASS_TYPE_P (TREE_TYPE (decl))
15716 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15717 warning_at (DECL_SOURCE_LOCATION (decl),
15718 OPT_Wunused_but_set_parameter,
15719 "parameter %qD set but not used", decl);
15720 unused_but_set_errorcount = errorcount;
15723 /* Complain about locally defined typedefs that are not used in this
15724 function. */
15725 maybe_warn_unused_local_typedefs ();
15727 /* Possibly warn about unused parameters. */
15728 if (warn_unused_parameter
15729 && !processing_template_decl
15730 && !DECL_CLONED_FUNCTION_P (fndecl))
15731 do_warn_unused_parameter (fndecl);
15733 /* Genericize before inlining. */
15734 if (!processing_template_decl)
15736 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15737 cp_genericize (fndecl);
15738 /* Clear out the bits we don't need. */
15739 f->x_current_class_ptr = NULL;
15740 f->x_current_class_ref = NULL;
15741 f->x_eh_spec_block = NULL;
15742 f->x_in_charge_parm = NULL;
15743 f->x_vtt_parm = NULL;
15744 f->x_return_value = NULL;
15745 f->bindings = NULL;
15746 f->extern_decl_map = NULL;
15747 f->infinite_loops = NULL;
15749 /* Clear out the bits we don't need. */
15750 local_names = NULL;
15752 /* We're leaving the context of this function, so zap cfun. It's still in
15753 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
15754 set_cfun (NULL);
15755 current_function_decl = NULL;
15757 /* If this is an in-class inline definition, we may have to pop the
15758 bindings for the template parameters that we added in
15759 maybe_begin_member_template_processing when start_function was
15760 called. */
15761 if (inline_p)
15762 maybe_end_member_template_processing ();
15764 /* Leave the scope of the class. */
15765 if (ctype)
15766 pop_nested_class ();
15768 --function_depth;
15770 /* Clean up. */
15771 current_function_decl = NULL_TREE;
15773 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
15774 return fndecl;
15777 /* Create the FUNCTION_DECL for a function definition.
15778 DECLSPECS and DECLARATOR are the parts of the declaration;
15779 they describe the return type and the name of the function,
15780 but twisted together in a fashion that parallels the syntax of C.
15782 This function creates a binding context for the function body
15783 as well as setting up the FUNCTION_DECL in current_function_decl.
15785 Returns a FUNCTION_DECL on success.
15787 If the DECLARATOR is not suitable for a function (it defines a datum
15788 instead), we return 0, which tells yyparse to report a parse error.
15790 May return void_type_node indicating that this method is actually
15791 a friend. See grokfield for more details.
15793 Came here with a `.pushlevel' .
15795 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15796 CHANGES TO CODE IN `grokfield'. */
15798 tree
15799 grokmethod (cp_decl_specifier_seq *declspecs,
15800 const cp_declarator *declarator, tree attrlist)
15802 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
15803 &attrlist);
15805 if (fndecl == error_mark_node)
15806 return error_mark_node;
15808 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
15810 error ("invalid member function declaration");
15811 return error_mark_node;
15814 if (attrlist)
15815 cplus_decl_attributes (&fndecl, attrlist, 0);
15817 /* Pass friends other than inline friend functions back. */
15818 if (fndecl == void_type_node)
15819 return fndecl;
15821 if (DECL_IN_AGGR_P (fndecl))
15823 if (DECL_CLASS_SCOPE_P (fndecl))
15824 error ("%qD is already defined in class %qT", fndecl,
15825 DECL_CONTEXT (fndecl));
15826 return error_mark_node;
15829 check_template_shadow (fndecl);
15831 if (TREE_PUBLIC (fndecl))
15832 DECL_COMDAT (fndecl) = 1;
15833 DECL_DECLARED_INLINE_P (fndecl) = 1;
15834 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
15836 /* We process method specializations in finish_struct_1. */
15837 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
15839 fndecl = push_template_decl (fndecl);
15840 if (fndecl == error_mark_node)
15841 return fndecl;
15844 if (! DECL_FRIEND_P (fndecl))
15846 if (DECL_CHAIN (fndecl))
15848 fndecl = copy_node (fndecl);
15849 TREE_CHAIN (fndecl) = NULL_TREE;
15853 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
15855 DECL_IN_AGGR_P (fndecl) = 1;
15856 return fndecl;
15860 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
15861 we can lay it out later, when and if its type becomes complete.
15863 Also handle constexpr variables where the initializer involves
15864 an unlowered PTRMEM_CST because the class isn't complete yet. */
15866 void
15867 maybe_register_incomplete_var (tree var)
15869 gcc_assert (VAR_P (var));
15871 /* Keep track of variables with incomplete types. */
15872 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
15873 && DECL_EXTERNAL (var))
15875 tree inner_type = TREE_TYPE (var);
15877 while (TREE_CODE (inner_type) == ARRAY_TYPE)
15878 inner_type = TREE_TYPE (inner_type);
15879 inner_type = TYPE_MAIN_VARIANT (inner_type);
15881 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
15882 /* RTTI TD entries are created while defining the type_info. */
15883 || (TYPE_LANG_SPECIFIC (inner_type)
15884 && TYPE_BEING_DEFINED (inner_type)))
15886 incomplete_var iv = {var, inner_type};
15887 vec_safe_push (incomplete_vars, iv);
15889 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
15890 && decl_constant_var_p (var)
15891 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
15893 /* When the outermost open class is complete we can resolve any
15894 pointers-to-members. */
15895 tree context = outermost_open_class ();
15896 incomplete_var iv = {var, context};
15897 vec_safe_push (incomplete_vars, iv);
15902 /* Called when a class type (given by TYPE) is defined. If there are
15903 any existing VAR_DECLs whose type has been completed by this
15904 declaration, update them now. */
15906 void
15907 complete_vars (tree type)
15909 unsigned ix;
15910 incomplete_var *iv;
15912 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
15914 if (same_type_p (type, iv->incomplete_type))
15916 tree var = iv->decl;
15917 tree type = TREE_TYPE (var);
15919 if (type != error_mark_node
15920 && (TYPE_MAIN_VARIANT (strip_array_types (type))
15921 == iv->incomplete_type))
15923 /* Complete the type of the variable. The VAR_DECL itself
15924 will be laid out in expand_expr. */
15925 complete_type (type);
15926 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
15929 /* Remove this entry from the list. */
15930 incomplete_vars->unordered_remove (ix);
15932 else
15933 ix++;
15936 /* Check for pending declarations which may have abstract type. */
15937 complete_type_check_abstract (type);
15940 /* If DECL is of a type which needs a cleanup, build and return an
15941 expression to perform that cleanup here. Return NULL_TREE if no
15942 cleanup need be done. DECL can also be a _REF when called from
15943 split_nonconstant_init_1. */
15945 tree
15946 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
15948 tree type;
15949 tree attr;
15950 tree cleanup;
15952 /* Assume no cleanup is required. */
15953 cleanup = NULL_TREE;
15955 if (error_operand_p (decl))
15956 return cleanup;
15958 /* Handle "__attribute__((cleanup))". We run the cleanup function
15959 before the destructor since the destructor is what actually
15960 terminates the lifetime of the object. */
15961 if (DECL_P (decl))
15962 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
15963 else
15964 attr = NULL_TREE;
15965 if (attr)
15967 tree id;
15968 tree fn;
15969 tree arg;
15971 /* Get the name specified by the user for the cleanup function. */
15972 id = TREE_VALUE (TREE_VALUE (attr));
15973 /* Look up the name to find the cleanup function to call. It is
15974 important to use lookup_name here because that is what is
15975 used in c-common.c:handle_cleanup_attribute when performing
15976 initial checks on the attribute. Note that those checks
15977 include ensuring that the function found is not an overloaded
15978 function, or an object with an overloaded call operator,
15979 etc.; we can rely on the fact that the function found is an
15980 ordinary FUNCTION_DECL. */
15981 fn = lookup_name (id);
15982 arg = build_address (decl);
15983 if (!mark_used (decl, complain) && !(complain & tf_error))
15984 return error_mark_node;
15985 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
15986 if (cleanup == error_mark_node)
15987 return error_mark_node;
15989 /* Handle ordinary C++ destructors. */
15990 type = TREE_TYPE (decl);
15991 if (type_build_dtor_call (type))
15993 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
15994 tree addr;
15995 tree call;
15997 if (TREE_CODE (type) == ARRAY_TYPE)
15998 addr = decl;
15999 else
16000 addr = build_address (decl);
16002 call = build_delete (TREE_TYPE (addr), addr,
16003 sfk_complete_destructor, flags, 0, complain);
16004 if (call == error_mark_node)
16005 cleanup = error_mark_node;
16006 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16007 /* Discard the call. */;
16008 else if (cleanup)
16009 cleanup = cp_build_compound_expr (cleanup, call, complain);
16010 else
16011 cleanup = call;
16014 /* build_delete sets the location of the destructor call to the
16015 current location, even though the destructor is going to be
16016 called later, at the end of the current scope. This can lead to
16017 a "jumpy" behavior for users of debuggers when they step around
16018 the end of the block. So let's unset the location of the
16019 destructor call instead. */
16020 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16022 if (cleanup
16023 && DECL_P (decl)
16024 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16025 /* Treat objects with destructors as used; the destructor may do
16026 something substantive. */
16027 && !mark_used (decl, complain) && !(complain & tf_error))
16028 return error_mark_node;
16030 return cleanup;
16034 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16035 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16036 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16038 tree
16039 static_fn_type (tree memfntype)
16041 tree fntype;
16042 tree args;
16044 if (TYPE_PTRMEMFUNC_P (memfntype))
16045 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16046 if (POINTER_TYPE_P (memfntype)
16047 || TREE_CODE (memfntype) == FUNCTION_DECL)
16048 memfntype = TREE_TYPE (memfntype);
16049 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16050 return memfntype;
16051 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16052 args = TYPE_ARG_TYPES (memfntype);
16053 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
16054 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16055 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
16056 fntype = (cp_build_type_attribute_variant
16057 (fntype, TYPE_ATTRIBUTES (memfntype)));
16058 fntype = (build_exception_variant
16059 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
16060 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
16061 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
16062 return fntype;
16065 /* DECL was originally constructed as a non-static member function,
16066 but turned out to be static. Update it accordingly. */
16068 void
16069 revert_static_member_fn (tree decl)
16071 tree stype = static_fn_type (decl);
16072 cp_cv_quals quals = type_memfn_quals (stype);
16073 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16075 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16076 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16078 TREE_TYPE (decl) = stype;
16080 if (DECL_ARGUMENTS (decl))
16081 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16082 DECL_STATIC_FUNCTION_P (decl) = 1;
16085 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16086 one of the language-independent trees. */
16088 enum cp_tree_node_structure_enum
16089 cp_tree_node_structure (union lang_tree_node * t)
16091 switch (TREE_CODE (&t->generic))
16093 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16094 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16095 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16096 case OVERLOAD: return TS_CP_OVERLOAD;
16097 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16098 case PTRMEM_CST: return TS_CP_PTRMEM;
16099 case BASELINK: return TS_CP_BASELINK;
16100 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16101 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16102 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16103 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16104 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16105 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16106 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16107 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16108 default: return TS_CP_GENERIC;
16112 /* Build the void_list_node (void_type_node having been created). */
16113 tree
16114 build_void_list_node (void)
16116 tree t = build_tree_list (NULL_TREE, void_type_node);
16117 return t;
16120 bool
16121 cp_missing_noreturn_ok_p (tree decl)
16123 /* A missing noreturn is ok for the `main' function. */
16124 return DECL_MAIN_P (decl);
16127 /* Return the decl used to identify the COMDAT group into which DECL should
16128 be placed. */
16130 tree
16131 cxx_comdat_group (tree decl)
16133 /* Virtual tables, construction virtual tables, and virtual table
16134 tables all go in a single COMDAT group, named after the primary
16135 virtual table. */
16136 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16137 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16138 /* For all other DECLs, the COMDAT group is the mangled name of the
16139 declaration itself. */
16140 else
16142 while (DECL_THUNK_P (decl))
16144 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16145 into the same section as the target function. In that case
16146 we must return target's name. */
16147 tree target = THUNK_TARGET (decl);
16148 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16149 && DECL_SECTION_NAME (target) != NULL
16150 && DECL_ONE_ONLY (target))
16151 decl = target;
16152 else
16153 break;
16157 return decl;
16160 /* Returns the return type for FN as written by the user, which may include
16161 a placeholder for a deduced return type. */
16163 tree
16164 fndecl_declared_return_type (tree fn)
16166 fn = STRIP_TEMPLATE (fn);
16167 if (FNDECL_USED_AUTO (fn))
16169 struct language_function *f = NULL;
16170 if (DECL_STRUCT_FUNCTION (fn))
16171 f = DECL_STRUCT_FUNCTION (fn)->language;
16172 if (f == NULL)
16173 f = DECL_SAVED_FUNCTION_DATA (fn);
16174 return f->x_auto_return_pattern;
16176 return TREE_TYPE (TREE_TYPE (fn));
16179 /* Returns true iff DECL was declared with an auto type and it has
16180 not yet been deduced to a real type. */
16182 bool
16183 undeduced_auto_decl (tree decl)
16185 if (cxx_dialect < cxx11)
16186 return false;
16187 return type_uses_auto (TREE_TYPE (decl));
16190 /* Complain if DECL has an undeduced return type. */
16192 bool
16193 require_deduced_type (tree decl, tsubst_flags_t complain)
16195 if (undeduced_auto_decl (decl))
16197 if (complain & tf_error)
16198 error ("use of %qD before deduction of %<auto%>", decl);
16199 return false;
16201 return true;
16204 #include "gt-cp-decl.h"