/cp
[official-gcc.git] / gcc / cp / decl.c
blob32ac81fc27164c5f19882cfa54a58dddb5e10a96
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)
11495 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11496 a declarator-id appertains to the entity that is declared. */
11497 if (declarator->std_attributes != error_mark_node)
11498 *attrlist = chainon (*attrlist, declarator->std_attributes);
11499 else
11500 /* We should have already diagnosed the issue (c++/78344). */
11501 gcc_assert (seen_error ());
11504 /* Handle parameter packs. */
11505 if (parameter_pack_p)
11507 if (decl_context == PARM)
11508 /* Turn the type into a pack expansion.*/
11509 type = make_pack_expansion (type);
11510 else
11511 error ("non-parameter %qs cannot be a parameter pack", name);
11514 if ((decl_context == FIELD || decl_context == PARM)
11515 && !processing_template_decl
11516 && variably_modified_type_p (type, NULL_TREE))
11518 if (decl_context == FIELD)
11519 error ("data member may not have variably modified type %qT", type);
11520 else
11521 error ("parameter may not have variably modified type %qT", type);
11522 type = error_mark_node;
11525 if (explicitp == 1 || (explicitp && friendp))
11527 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11528 in the declaration of a constructor or conversion function within
11529 a class definition. */
11530 if (!current_class_type)
11531 error_at (declspecs->locations[ds_explicit],
11532 "%<explicit%> outside class declaration");
11533 else if (friendp)
11534 error_at (declspecs->locations[ds_explicit],
11535 "%<explicit%> in friend declaration");
11536 else
11537 error_at (declspecs->locations[ds_explicit],
11538 "only declarations of constructors and conversion operators "
11539 "can be %<explicit%>");
11540 explicitp = 0;
11543 if (storage_class == sc_mutable)
11545 if (decl_context != FIELD || friendp)
11547 error ("non-member %qs cannot be declared %<mutable%>", name);
11548 storage_class = sc_none;
11550 else if (decl_context == TYPENAME || typedef_p)
11552 error ("non-object member %qs cannot be declared %<mutable%>", name);
11553 storage_class = sc_none;
11555 else if (TREE_CODE (type) == FUNCTION_TYPE
11556 || TREE_CODE (type) == METHOD_TYPE)
11558 error ("function %qs cannot be declared %<mutable%>", name);
11559 storage_class = sc_none;
11561 else if (staticp)
11563 error ("static %qs cannot be declared %<mutable%>", name);
11564 storage_class = sc_none;
11566 else if (type_quals & TYPE_QUAL_CONST)
11568 error ("const %qs cannot be declared %<mutable%>", name);
11569 storage_class = sc_none;
11571 else if (TREE_CODE (type) == REFERENCE_TYPE)
11573 permerror (input_location, "reference %qs cannot be declared "
11574 "%<mutable%>", name);
11575 storage_class = sc_none;
11579 /* If this is declaring a typedef name, return a TYPE_DECL. */
11580 if (typedef_p && decl_context != TYPENAME)
11582 tree decl;
11584 /* This declaration:
11586 typedef void f(int) const;
11588 declares a function type which is not a member of any
11589 particular class, but which is cv-qualified; for
11590 example "f S::*" declares a pointer to a const-qualified
11591 member function of S. We record the cv-qualification in the
11592 function type. */
11593 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11595 type = apply_memfn_quals (type, memfn_quals, rqual);
11597 /* We have now dealt with these qualifiers. */
11598 memfn_quals = TYPE_UNQUALIFIED;
11599 rqual = REF_QUAL_NONE;
11602 if (type_uses_auto (type))
11604 error ("typedef declared %<auto%>");
11605 type = error_mark_node;
11608 if (reqs)
11609 error_at (location_of (reqs), "requires-clause on typedef");
11611 if (decl_context == FIELD)
11612 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11613 else
11614 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11615 if (id_declarator && declarator->u.id.qualifying_scope) {
11616 error_at (DECL_SOURCE_LOCATION (decl),
11617 "typedef name may not be a nested-name-specifier");
11618 TREE_TYPE (decl) = error_mark_node;
11621 if (decl_context != FIELD)
11623 if (!current_function_decl)
11624 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11625 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
11626 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11627 (current_function_decl)))
11628 /* The TYPE_DECL is "abstract" because there will be
11629 clones of this constructor/destructor, and there will
11630 be copies of this TYPE_DECL generated in those
11631 clones. The decloning optimization (for space) may
11632 revert this subsequently if it determines that
11633 the clones should share a common implementation. */
11634 DECL_ABSTRACT_P (decl) = true;
11636 else if (current_class_type
11637 && constructor_name_p (unqualified_id, current_class_type))
11638 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11639 "as enclosing class",
11640 unqualified_id);
11642 /* If the user declares "typedef struct {...} foo" then the
11643 struct will have an anonymous name. Fill that name in now.
11644 Nothing can refer to it, so nothing needs know about the name
11645 change. */
11646 if (type != error_mark_node
11647 && unqualified_id
11648 && TYPE_NAME (type)
11649 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11650 && TYPE_UNNAMED_P (type)
11651 && declspecs->type_definition_p
11652 && attributes_naming_typedef_ok (*attrlist)
11653 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11654 name_unnamed_type (type, decl);
11656 if (signed_p
11657 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11658 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11660 bad_specifiers (decl, BSP_TYPE, virtualp,
11661 memfn_quals != TYPE_UNQUALIFIED,
11662 inlinep, friendp, raises != NULL_TREE);
11664 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11665 /* Acknowledge that this was written:
11666 `using analias = atype;'. */
11667 TYPE_DECL_ALIAS_P (decl) = 1;
11669 return decl;
11672 /* Detect the case of an array type of unspecified size
11673 which came, as such, direct from a typedef name.
11674 We must copy the type, so that the array's domain can be
11675 individually set by the object's initializer. */
11677 if (type && typedef_type
11678 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11679 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11680 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11682 /* Detect where we're using a typedef of function type to declare a
11683 function. PARMS will not be set, so we must create it now. */
11685 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11687 tree decls = NULL_TREE;
11688 tree args;
11690 for (args = TYPE_ARG_TYPES (type);
11691 args && args != void_list_node;
11692 args = TREE_CHAIN (args))
11694 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
11695 TREE_VALUE (args));
11697 DECL_CHAIN (decl) = decls;
11698 decls = decl;
11701 parms = nreverse (decls);
11703 if (decl_context != TYPENAME)
11705 /* The qualifiers on the function type become the qualifiers on
11706 the non-static member function. */
11707 memfn_quals |= type_memfn_quals (type);
11708 rqual = type_memfn_rqual (type);
11709 type_quals = TYPE_UNQUALIFIED;
11713 /* If this is a type name (such as, in a cast or sizeof),
11714 compute the type and return it now. */
11716 if (decl_context == TYPENAME)
11718 /* Note that here we don't care about type_quals. */
11720 /* Special case: "friend class foo" looks like a TYPENAME context. */
11721 if (friendp)
11723 if (inlinep)
11725 error ("%<inline%> specified for friend class declaration");
11726 inlinep = 0;
11729 if (!current_aggr)
11731 /* Don't allow friend declaration without a class-key. */
11732 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11733 permerror (input_location, "template parameters cannot be friends");
11734 else if (TREE_CODE (type) == TYPENAME_TYPE)
11735 permerror (input_location, "friend declaration requires class-key, "
11736 "i.e. %<friend class %T::%D%>",
11737 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11738 else
11739 permerror (input_location, "friend declaration requires class-key, "
11740 "i.e. %<friend %#T%>",
11741 type);
11744 /* Only try to do this stuff if we didn't already give up. */
11745 if (type != integer_type_node)
11747 /* A friendly class? */
11748 if (current_class_type)
11749 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11750 /*complain=*/true);
11751 else
11752 error ("trying to make class %qT a friend of global scope",
11753 type);
11755 type = void_type_node;
11758 else if (memfn_quals || rqual)
11760 if (ctype == NULL_TREE
11761 && TREE_CODE (type) == METHOD_TYPE)
11762 ctype = TYPE_METHOD_BASETYPE (type);
11764 if (ctype)
11765 type = build_memfn_type (type, ctype, memfn_quals, rqual);
11766 /* Core issue #547: need to allow this in template type args.
11767 Allow it in general in C++11 for alias-declarations. */
11768 else if ((template_type_arg || cxx_dialect >= cxx11)
11769 && TREE_CODE (type) == FUNCTION_TYPE)
11770 type = apply_memfn_quals (type, memfn_quals, rqual);
11771 else
11772 error ("invalid qualifiers on non-member function type");
11775 if (reqs)
11776 error_at (location_of (reqs), "requires-clause on type-id");
11778 return type;
11780 else if (unqualified_id == NULL_TREE && decl_context != PARM
11781 && decl_context != CATCHPARM
11782 && TREE_CODE (type) != UNION_TYPE
11783 && ! bitfield
11784 && innermost_code != cdk_decomp)
11786 error ("abstract declarator %qT used as declaration", type);
11787 return error_mark_node;
11790 if (!FUNC_OR_METHOD_TYPE_P (type))
11792 /* Only functions may be declared using an operator-function-id. */
11793 if (dname && IDENTIFIER_ANY_OP_P (dname))
11795 error ("declaration of %qD as non-function", dname);
11796 return error_mark_node;
11799 if (reqs)
11800 error_at (location_of (reqs),
11801 "requires-clause on declaration of non-function type %qT",
11802 type);
11805 /* We don't check parameter types here because we can emit a better
11806 error message later. */
11807 if (decl_context != PARM)
11809 type = check_var_type (unqualified_id, type);
11810 if (type == error_mark_node)
11811 return error_mark_node;
11814 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11815 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11817 if (decl_context == PARM || decl_context == CATCHPARM)
11819 if (ctype || in_namespace)
11820 error ("cannot use %<::%> in parameter declaration");
11822 if (type_uses_auto (type)
11823 && !(cxx_dialect >= cxx17 && template_parm_flag))
11825 if (cxx_dialect >= cxx14)
11826 error ("%<auto%> parameter not permitted in this context");
11827 else
11828 error ("parameter declared %<auto%>");
11829 type = error_mark_node;
11832 /* A parameter declared as an array of T is really a pointer to T.
11833 One declared as a function is really a pointer to a function.
11834 One declared as a member is really a pointer to member. */
11836 if (TREE_CODE (type) == ARRAY_TYPE)
11838 /* Transfer const-ness of array into that of type pointed to. */
11839 type = build_pointer_type (TREE_TYPE (type));
11840 type_quals = TYPE_UNQUALIFIED;
11841 array_parameter_p = true;
11843 else if (TREE_CODE (type) == FUNCTION_TYPE)
11844 type = build_pointer_type (type);
11847 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
11848 && !(identifier_p (unqualified_id)
11849 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
11851 cp_cv_quals real_quals = memfn_quals;
11852 if (cxx_dialect < cxx14 && constexpr_p
11853 && sfk != sfk_constructor && sfk != sfk_destructor)
11854 real_quals |= TYPE_QUAL_CONST;
11855 type = build_memfn_type (type, ctype, real_quals, rqual);
11859 tree decl = NULL_TREE;
11861 if (decl_context == PARM)
11863 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
11864 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
11866 bad_specifiers (decl, BSP_PARM, virtualp,
11867 memfn_quals != TYPE_UNQUALIFIED,
11868 inlinep, friendp, raises != NULL_TREE);
11870 else if (decl_context == FIELD)
11872 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
11873 if (tree auto_node = type_uses_auto (type))
11875 location_t loc = declspecs->locations[ds_type_spec];
11876 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
11877 error_at (loc, "invalid use of template-name %qE without an "
11878 "argument list",
11879 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
11880 else
11881 error_at (loc, "non-static data member declared with "
11882 "placeholder %qT", auto_node);
11883 type = error_mark_node;
11886 /* The C99 flexible array extension. */
11887 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
11888 && TYPE_DOMAIN (type) == NULL_TREE)
11890 if (ctype
11891 && (TREE_CODE (ctype) == UNION_TYPE
11892 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
11894 error ("flexible array member in union");
11895 type = error_mark_node;
11897 else
11899 /* Array is a flexible member. */
11900 if (in_system_header_at (input_location))
11901 /* Do not warn on flexible array members in system
11902 headers because glibc uses them. */;
11903 else if (name)
11904 pedwarn (input_location, OPT_Wpedantic,
11905 "ISO C++ forbids flexible array member %qs", name);
11906 else
11907 pedwarn (input_location, OPT_Wpedantic,
11908 "ISO C++ forbids flexible array members");
11910 /* Flexible array member has a null domain. */
11911 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11915 if (type == error_mark_node)
11917 /* Happens when declaring arrays of sizes which
11918 are error_mark_node, for example. */
11919 decl = NULL_TREE;
11921 else if (in_namespace && !friendp)
11923 /* Something like struct S { int N::j; }; */
11924 error ("invalid use of %<::%>");
11925 return error_mark_node;
11927 else if (TREE_CODE (type) == FUNCTION_TYPE
11928 || TREE_CODE (type) == METHOD_TYPE)
11930 int publicp = 0;
11931 tree function_context;
11933 if (friendp == 0)
11935 /* This should never happen in pure C++ (the check
11936 could be an assert). It could happen in
11937 Objective-C++ if someone writes invalid code that
11938 uses a function declaration for an instance
11939 variable or property (instance variables and
11940 properties are parsed as FIELD_DECLs, but they are
11941 part of an Objective-C class, not a C++ class).
11942 That code is invalid and is caught by this
11943 check. */
11944 if (!ctype)
11946 error ("declaration of function %qD in invalid context",
11947 unqualified_id);
11948 return error_mark_node;
11951 /* ``A union may [ ... ] not [ have ] virtual functions.''
11952 ARM 9.5 */
11953 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11955 error ("function %qD declared %<virtual%> inside a union",
11956 unqualified_id);
11957 return error_mark_node;
11960 if (virtualp
11961 && identifier_p (unqualified_id)
11962 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
11964 error ("%qD cannot be declared %<virtual%>, since it "
11965 "is always static", unqualified_id);
11966 virtualp = 0;
11970 /* Check that the name used for a destructor makes sense. */
11971 if (sfk == sfk_destructor)
11973 tree uqname = id_declarator->u.id.unqualified_name;
11975 if (!ctype)
11977 gcc_assert (friendp);
11978 error ("expected qualified name in friend declaration "
11979 "for destructor %qD", uqname);
11980 return error_mark_node;
11983 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
11985 error ("declaration of %qD as member of %qT",
11986 uqname, ctype);
11987 return error_mark_node;
11989 if (concept_p)
11991 error ("a destructor cannot be %<concept%>");
11992 return error_mark_node;
11994 if (constexpr_p)
11996 error ("a destructor cannot be %<constexpr%>");
11997 return error_mark_node;
12000 else if (sfk == sfk_constructor && friendp && !ctype)
12002 error ("expected qualified name in friend declaration "
12003 "for constructor %qD",
12004 id_declarator->u.id.unqualified_name);
12005 return error_mark_node;
12007 if (sfk == sfk_constructor)
12008 if (concept_p)
12010 error ("a constructor cannot be %<concept%>");
12011 return error_mark_node;
12013 if (concept_p)
12015 error ("a concept cannot be a member function");
12016 concept_p = false;
12019 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12021 tree tmpl = TREE_OPERAND (unqualified_id, 0);
12022 if (variable_template_p (tmpl))
12024 error ("specialization of variable template %qD "
12025 "declared as function", tmpl);
12026 inform (DECL_SOURCE_LOCATION (tmpl),
12027 "variable template declared here");
12028 return error_mark_node;
12032 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12033 function_context = (ctype != NULL_TREE) ?
12034 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12035 publicp = (! friendp || ! staticp)
12036 && function_context == NULL_TREE;
12038 if (late_return_type_p)
12039 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12041 decl = grokfndecl (ctype, type,
12042 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12043 ? unqualified_id : dname,
12044 parms,
12045 unqualified_id,
12046 reqs,
12047 virtualp, flags, memfn_quals, rqual, raises,
12048 friendp ? -1 : 0, friendp, publicp,
12049 inlinep | (2 * constexpr_p) | (4 * concept_p),
12050 initialized == SD_DELETED, sfk,
12051 funcdef_flag, template_count, in_namespace,
12052 attrlist, declarator->id_loc);
12053 decl = set_virt_specifiers (decl, virt_specifiers);
12054 if (decl == NULL_TREE)
12055 return error_mark_node;
12056 #if 0
12057 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12058 /* The decl and setting of decl_attr is also turned off. */
12059 decl = build_decl_attribute_variant (decl, decl_attr);
12060 #endif
12062 /* [class.conv.ctor]
12064 A constructor declared without the function-specifier
12065 explicit that can be called with a single parameter
12066 specifies a conversion from the type of its first
12067 parameter to the type of its class. Such a constructor
12068 is called a converting constructor. */
12069 if (explicitp == 2)
12070 DECL_NONCONVERTING_P (decl) = 1;
12072 else if (!staticp && !dependent_type_p (type)
12073 && !COMPLETE_TYPE_P (complete_type (type))
12074 && (!complete_or_array_type_p (type)
12075 || initialized == 0))
12077 if (TREE_CODE (type) != ARRAY_TYPE
12078 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12080 if (unqualified_id)
12082 error ("field %qD has incomplete type %qT",
12083 unqualified_id, type);
12084 cxx_incomplete_type_inform (strip_array_types (type));
12086 else
12087 error ("name %qT has incomplete type", type);
12089 type = error_mark_node;
12090 decl = NULL_TREE;
12093 else
12095 if (friendp)
12097 error ("%qE is neither function nor member function; "
12098 "cannot be declared friend", unqualified_id);
12099 friendp = 0;
12101 decl = NULL_TREE;
12104 if (friendp)
12106 /* Friends are treated specially. */
12107 if (ctype == current_class_type)
12108 ; /* We already issued a permerror. */
12109 else if (decl && DECL_NAME (decl))
12111 if (template_class_depth (current_class_type) == 0)
12113 decl = check_explicit_specialization
12114 (unqualified_id, decl, template_count,
12115 2 * funcdef_flag + 4);
12116 if (decl == error_mark_node)
12117 return error_mark_node;
12120 decl = do_friend (ctype, unqualified_id, decl,
12121 *attrlist, flags,
12122 funcdef_flag);
12123 return decl;
12125 else
12126 return error_mark_node;
12129 /* Structure field. It may not be a function, except for C++. */
12131 if (decl == NULL_TREE)
12133 if (staticp)
12135 /* C++ allows static class members. All other work
12136 for this is done by grokfield. */
12137 decl = build_lang_decl_loc (declarator
12138 ? declarator->id_loc
12139 : input_location,
12140 VAR_DECL, unqualified_id, type);
12141 set_linkage_for_static_data_member (decl);
12142 if (concept_p)
12143 error ("static data member %qE declared %<concept%>",
12144 unqualified_id);
12145 else if (constexpr_p && !initialized)
12147 error ("%<constexpr%> static data member %qD must have an "
12148 "initializer", decl);
12149 constexpr_p = false;
12152 if (inlinep)
12153 mark_inline_variable (decl);
12155 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12156 && !(cxx_dialect >= cxx17 && constexpr_p))
12157 /* Even if there is an in-class initialization, DECL
12158 is considered undefined until an out-of-class
12159 definition is provided, unless this is an inline
12160 variable. */
12161 DECL_EXTERNAL (decl) = 1;
12163 if (thread_p)
12165 CP_DECL_THREAD_LOCAL_P (decl) = true;
12166 if (!processing_template_decl)
12167 set_decl_tls_model (decl, decl_default_tls_model (decl));
12168 if (declspecs->gnu_thread_keyword_p)
12169 SET_DECL_GNU_TLS_P (decl);
12172 else
12174 if (concept_p)
12175 error ("non-static data member %qE declared %<concept%>",
12176 unqualified_id);
12177 else if (constexpr_p)
12179 error ("non-static data member %qE declared %<constexpr%>",
12180 unqualified_id);
12181 constexpr_p = false;
12183 decl = build_decl (input_location,
12184 FIELD_DECL, unqualified_id, type);
12185 DECL_NONADDRESSABLE_P (decl) = bitfield;
12186 if (bitfield && !unqualified_id)
12188 TREE_NO_WARNING (decl) = 1;
12189 DECL_PADDING_P (decl) = 1;
12192 if (storage_class == sc_mutable)
12194 DECL_MUTABLE_P (decl) = 1;
12195 storage_class = sc_none;
12198 if (initialized)
12200 /* An attempt is being made to initialize a non-static
12201 member. This is new in C++11. */
12202 maybe_warn_cpp0x (CPP0X_NSDMI);
12204 /* If this has been parsed with static storage class, but
12205 errors forced staticp to be cleared, ensure NSDMI is
12206 not present. */
12207 if (declspecs->storage_class == sc_static)
12208 DECL_INITIAL (decl) = error_mark_node;
12212 bad_specifiers (decl, BSP_FIELD, virtualp,
12213 memfn_quals != TYPE_UNQUALIFIED,
12214 staticp ? false : inlinep, friendp,
12215 raises != NULL_TREE);
12218 else if (TREE_CODE (type) == FUNCTION_TYPE
12219 || TREE_CODE (type) == METHOD_TYPE)
12221 tree original_name;
12222 int publicp = 0;
12224 if (!unqualified_id)
12225 return error_mark_node;
12227 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12228 original_name = dname;
12229 else
12230 original_name = unqualified_id;
12231 // FIXME:gcc_assert (original_name == dname);
12233 if (storage_class == sc_auto)
12234 error ("storage class %<auto%> invalid for function %qs", name);
12235 else if (storage_class == sc_register)
12236 error ("storage class %<register%> invalid for function %qs", name);
12237 else if (thread_p)
12239 if (declspecs->gnu_thread_keyword_p)
12240 error ("storage class %<__thread%> invalid for function %qs",
12241 name);
12242 else
12243 error ("storage class %<thread_local%> invalid for function %qs",
12244 name);
12247 if (virt_specifiers)
12248 error ("virt-specifiers in %qs not allowed outside a class definition", name);
12249 /* Function declaration not at top level.
12250 Storage classes other than `extern' are not allowed
12251 and `extern' makes no difference. */
12252 if (! toplevel_bindings_p ()
12253 && (storage_class == sc_static
12254 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12255 && pedantic)
12257 if (storage_class == sc_static)
12258 pedwarn (input_location, OPT_Wpedantic,
12259 "%<static%> specifier invalid for function %qs "
12260 "declared out of global scope", name);
12261 else
12262 pedwarn (input_location, OPT_Wpedantic,
12263 "%<inline%> specifier invalid for function %qs "
12264 "declared out of global scope", name);
12267 if (ctype == NULL_TREE)
12269 if (virtualp)
12271 error ("virtual non-class function %qs", name);
12272 virtualp = 0;
12274 else if (sfk == sfk_constructor
12275 || sfk == sfk_destructor)
12277 error (funcdef_flag
12278 ? G_("%qs defined in a non-class scope")
12279 : G_("%qs declared in a non-class scope"), name);
12280 sfk = sfk_none;
12284 /* Record whether the function is public. */
12285 publicp = (ctype != NULL_TREE
12286 || storage_class != sc_static);
12288 if (late_return_type_p)
12289 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12291 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12292 reqs, virtualp, flags, memfn_quals, rqual, raises,
12293 1, friendp,
12294 publicp,
12295 inlinep | (2 * constexpr_p) | (4 * concept_p),
12296 initialized == SD_DELETED,
12297 sfk,
12298 funcdef_flag,
12299 template_count, in_namespace, attrlist,
12300 declarator->id_loc);
12301 if (decl == NULL_TREE)
12302 return error_mark_node;
12304 if (explicitp == 2)
12305 DECL_NONCONVERTING_P (decl) = 1;
12306 if (staticp == 1)
12308 int invalid_static = 0;
12310 /* Don't allow a static member function in a class, and forbid
12311 declaring main to be static. */
12312 if (TREE_CODE (type) == METHOD_TYPE)
12314 permerror (input_location, "cannot declare member function %qD to have "
12315 "static linkage", decl);
12316 invalid_static = 1;
12318 else if (current_function_decl)
12320 /* 7.1.1: There can be no static function declarations within a
12321 block. */
12322 error ("cannot declare static function inside another function");
12323 invalid_static = 1;
12326 if (invalid_static)
12328 staticp = 0;
12329 storage_class = sc_none;
12333 else
12335 /* It's a variable. */
12337 /* An uninitialized decl with `extern' is a reference. */
12338 decl = grokvardecl (type, dname, unqualified_id,
12339 declspecs,
12340 initialized,
12341 type_quals,
12342 inlinep,
12343 concept_p,
12344 template_count,
12345 ctype ? ctype : in_namespace);
12346 if (decl == NULL_TREE)
12347 return error_mark_node;
12349 bad_specifiers (decl, BSP_VAR, virtualp,
12350 memfn_quals != TYPE_UNQUALIFIED,
12351 inlinep, friendp, raises != NULL_TREE);
12353 if (ctype)
12355 DECL_CONTEXT (decl) = ctype;
12356 if (staticp == 1)
12358 permerror (input_location, "%<static%> may not be used when defining "
12359 "(as opposed to declaring) a static data member");
12360 staticp = 0;
12361 storage_class = sc_none;
12363 if (storage_class == sc_register && TREE_STATIC (decl))
12365 error ("static member %qD declared %<register%>", decl);
12366 storage_class = sc_none;
12368 if (storage_class == sc_extern && pedantic)
12370 pedwarn (input_location, OPT_Wpedantic,
12371 "cannot explicitly declare member %q#D to have "
12372 "extern linkage", decl);
12373 storage_class = sc_none;
12376 else if (constexpr_p && DECL_EXTERNAL (decl))
12378 error ("declaration of %<constexpr%> variable %qD "
12379 "is not a definition", decl);
12380 constexpr_p = false;
12383 if (inlinep)
12384 mark_inline_variable (decl);
12385 if (innermost_code == cdk_decomp)
12387 gcc_assert (declarator && declarator->kind == cdk_decomp);
12388 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12389 DECL_ARTIFICIAL (decl) = 1;
12390 fit_decomposition_lang_decl (decl, NULL_TREE);
12394 if (VAR_P (decl) && !initialized)
12395 if (tree auto_node = type_uses_auto (type))
12396 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12398 location_t loc = declspecs->locations[ds_type_spec];
12399 error_at (loc, "declaration of %q#D has no initializer", decl);
12400 TREE_TYPE (decl) = error_mark_node;
12403 if (storage_class == sc_extern && initialized && !funcdef_flag)
12405 if (toplevel_bindings_p ())
12407 /* It's common practice (and completely valid) to have a const
12408 be initialized and declared extern. */
12409 if (!(type_quals & TYPE_QUAL_CONST))
12410 warning (0, "%qs initialized and declared %<extern%>", name);
12412 else
12414 error ("%qs has both %<extern%> and initializer", name);
12415 return error_mark_node;
12419 /* Record `register' declaration for warnings on &
12420 and in case doing stupid register allocation. */
12422 if (storage_class == sc_register)
12424 DECL_REGISTER (decl) = 1;
12425 /* Warn about register storage specifiers on PARM_DECLs. */
12426 if (TREE_CODE (decl) == PARM_DECL)
12428 if (cxx_dialect >= cxx17)
12429 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12430 "ISO C++17 does not allow %<register%> storage "
12431 "class specifier");
12432 else
12433 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12434 "%<register%> storage class specifier used");
12437 else if (storage_class == sc_extern)
12438 DECL_THIS_EXTERN (decl) = 1;
12439 else if (storage_class == sc_static)
12440 DECL_THIS_STATIC (decl) = 1;
12442 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12443 if (constexpr_p && VAR_P (decl))
12444 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12446 /* Record constancy and volatility on the DECL itself . There's
12447 no need to do this when processing a template; we'll do this
12448 for the instantiated declaration based on the type of DECL. */
12449 if (!processing_template_decl)
12450 cp_apply_type_quals_to_decl (type_quals, decl);
12452 return decl;
12456 /* Subroutine of start_function. Ensure that each of the parameter
12457 types (as listed in PARMS) is complete, as is required for a
12458 function definition. */
12460 static void
12461 require_complete_types_for_parms (tree parms)
12463 for (; parms; parms = DECL_CHAIN (parms))
12465 if (dependent_type_p (TREE_TYPE (parms)))
12466 continue;
12467 if (!VOID_TYPE_P (TREE_TYPE (parms))
12468 && complete_type_or_else (TREE_TYPE (parms), parms))
12470 relayout_decl (parms);
12471 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12473 maybe_warn_parm_abi (TREE_TYPE (parms),
12474 DECL_SOURCE_LOCATION (parms));
12476 else
12477 /* grokparms or complete_type_or_else will have already issued
12478 an error. */
12479 TREE_TYPE (parms) = error_mark_node;
12483 /* Returns nonzero if T is a local variable. */
12486 local_variable_p (const_tree t)
12488 if ((VAR_P (t)
12489 /* A VAR_DECL with a context that is a _TYPE is a static data
12490 member. */
12491 && !TYPE_P (CP_DECL_CONTEXT (t))
12492 /* Any other non-local variable must be at namespace scope. */
12493 && !DECL_NAMESPACE_SCOPE_P (t))
12494 || (TREE_CODE (t) == PARM_DECL))
12495 return 1;
12497 return 0;
12500 /* Like local_variable_p, but suitable for use as a tree-walking
12501 function. */
12503 static tree
12504 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12505 void * /*data*/)
12507 if (local_variable_p (*tp)
12508 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12509 return *tp;
12510 else if (TYPE_P (*tp))
12511 *walk_subtrees = 0;
12513 return NULL_TREE;
12516 /* Check that ARG, which is a default-argument expression for a
12517 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12518 something goes wrong. DECL may also be a _TYPE node, rather than a
12519 DECL, if there is no DECL available. */
12521 tree
12522 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12524 tree var;
12525 tree decl_type;
12527 if (TREE_CODE (arg) == DEFAULT_ARG)
12528 /* We get a DEFAULT_ARG when looking at an in-class declaration
12529 with a default argument. Ignore the argument for now; we'll
12530 deal with it after the class is complete. */
12531 return arg;
12533 if (TYPE_P (decl))
12535 decl_type = decl;
12536 decl = NULL_TREE;
12538 else
12539 decl_type = TREE_TYPE (decl);
12541 if (arg == error_mark_node
12542 || decl == error_mark_node
12543 || TREE_TYPE (arg) == error_mark_node
12544 || decl_type == error_mark_node)
12545 /* Something already went wrong. There's no need to check
12546 further. */
12547 return error_mark_node;
12549 /* [dcl.fct.default]
12551 A default argument expression is implicitly converted to the
12552 parameter type. */
12553 ++cp_unevaluated_operand;
12554 perform_implicit_conversion_flags (decl_type, arg, complain,
12555 LOOKUP_IMPLICIT);
12556 --cp_unevaluated_operand;
12558 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12559 the call sites. */
12560 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12561 && null_ptr_cst_p (arg))
12562 return nullptr_node;
12564 /* [dcl.fct.default]
12566 Local variables shall not be used in default argument
12567 expressions.
12569 The keyword `this' shall not be used in a default argument of a
12570 member function. */
12571 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12572 if (var)
12574 if (complain & tf_warning_or_error)
12576 if (DECL_NAME (var) == this_identifier)
12577 permerror (input_location, "default argument %qE uses %qD",
12578 arg, var);
12579 else
12580 error ("default argument %qE uses local variable %qD", arg, var);
12582 return error_mark_node;
12585 /* All is well. */
12586 return arg;
12589 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12591 static tree
12592 type_is_deprecated (tree type)
12594 enum tree_code code;
12595 if (TREE_DEPRECATED (type))
12596 return type;
12597 if (TYPE_NAME (type))
12599 if (TREE_DEPRECATED (TYPE_NAME (type)))
12600 return type;
12601 else
12602 return NULL_TREE;
12605 /* Do warn about using typedefs to a deprecated class. */
12606 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12607 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12609 code = TREE_CODE (type);
12611 if (code == POINTER_TYPE || code == REFERENCE_TYPE
12612 || code == OFFSET_TYPE || code == FUNCTION_TYPE
12613 || code == METHOD_TYPE || code == ARRAY_TYPE)
12614 return type_is_deprecated (TREE_TYPE (type));
12616 if (TYPE_PTRMEMFUNC_P (type))
12617 return type_is_deprecated
12618 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12620 return NULL_TREE;
12623 /* Decode the list of parameter types for a function type.
12624 Given the list of things declared inside the parens,
12625 return a list of types.
12627 If this parameter does not end with an ellipsis, we append
12628 void_list_node.
12630 *PARMS is set to the chain of PARM_DECLs created. */
12632 tree
12633 grokparms (tree parmlist, tree *parms)
12635 tree result = NULL_TREE;
12636 tree decls = NULL_TREE;
12637 tree parm;
12638 int any_error = 0;
12640 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12642 tree type = NULL_TREE;
12643 tree init = TREE_PURPOSE (parm);
12644 tree decl = TREE_VALUE (parm);
12646 if (parm == void_list_node)
12647 break;
12649 if (! decl || TREE_TYPE (decl) == error_mark_node)
12650 continue;
12652 type = TREE_TYPE (decl);
12653 if (VOID_TYPE_P (type))
12655 if (same_type_p (type, void_type_node)
12656 && !init
12657 && !DECL_NAME (decl) && !result
12658 && TREE_CHAIN (parm) == void_list_node)
12659 /* DR 577: A parameter list consisting of a single
12660 unnamed parameter of non-dependent type 'void'. */
12661 break;
12662 else if (cv_qualified_p (type))
12663 error_at (DECL_SOURCE_LOCATION (decl),
12664 "invalid use of cv-qualified type %qT in "
12665 "parameter declaration", type);
12666 else
12667 error_at (DECL_SOURCE_LOCATION (decl),
12668 "invalid use of type %<void%> in parameter "
12669 "declaration");
12670 /* It's not a good idea to actually create parameters of
12671 type `void'; other parts of the compiler assume that a
12672 void type terminates the parameter list. */
12673 type = error_mark_node;
12674 TREE_TYPE (decl) = error_mark_node;
12677 if (type != error_mark_node)
12679 if (deprecated_state != DEPRECATED_SUPPRESS)
12681 tree deptype = type_is_deprecated (type);
12682 if (deptype)
12683 warn_deprecated_use (deptype, NULL_TREE);
12686 /* Top-level qualifiers on the parameters are
12687 ignored for function types. */
12688 type = cp_build_qualified_type (type, 0);
12689 if (TREE_CODE (type) == METHOD_TYPE)
12691 error ("parameter %qD invalidly declared method type", decl);
12692 type = build_pointer_type (type);
12693 TREE_TYPE (decl) = type;
12695 else if (abstract_virtuals_error (decl, type))
12696 any_error = 1; /* Seems like a good idea. */
12697 else if (cxx_dialect < cxx17 && POINTER_TYPE_P (type))
12699 /* Before C++17 DR 393:
12700 [dcl.fct]/6, parameter types cannot contain pointers
12701 (references) to arrays of unknown bound. */
12702 tree t = TREE_TYPE (type);
12703 int ptr = TYPE_PTR_P (type);
12705 while (1)
12707 if (TYPE_PTR_P (t))
12708 ptr = 1;
12709 else if (TREE_CODE (t) != ARRAY_TYPE)
12710 break;
12711 else if (!TYPE_DOMAIN (t))
12712 break;
12713 t = TREE_TYPE (t);
12715 if (TREE_CODE (t) == ARRAY_TYPE)
12716 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
12718 ? G_("parameter %qD includes pointer to array of "
12719 "unknown bound %qT")
12720 : G_("parameter %qD includes reference to array of "
12721 "unknown bound %qT"),
12722 decl, t);
12725 if (any_error)
12726 init = NULL_TREE;
12727 else if (init && !processing_template_decl)
12728 init = check_default_argument (decl, init, tf_warning_or_error);
12731 DECL_CHAIN (decl) = decls;
12732 decls = decl;
12733 result = tree_cons (init, type, result);
12735 decls = nreverse (decls);
12736 result = nreverse (result);
12737 if (parm)
12738 result = chainon (result, void_list_node);
12739 *parms = decls;
12741 return result;
12745 /* D is a constructor or overloaded `operator='.
12747 Let T be the class in which D is declared. Then, this function
12748 returns:
12750 -1 if D's is an ill-formed constructor or copy assignment operator
12751 whose first parameter is of type `T'.
12752 0 if D is not a copy constructor or copy assignment
12753 operator.
12754 1 if D is a copy constructor or copy assignment operator whose
12755 first parameter is a reference to non-const qualified T.
12756 2 if D is a copy constructor or copy assignment operator whose
12757 first parameter is a reference to const qualified T.
12759 This function can be used as a predicate. Positive values indicate
12760 a copy constructor and nonzero values indicate a copy assignment
12761 operator. */
12764 copy_fn_p (const_tree d)
12766 tree args;
12767 tree arg_type;
12768 int result = 1;
12770 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12772 if (TREE_CODE (d) == TEMPLATE_DECL
12773 || (DECL_TEMPLATE_INFO (d)
12774 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12775 /* Instantiations of template member functions are never copy
12776 functions. Note that member functions of templated classes are
12777 represented as template functions internally, and we must
12778 accept those as copy functions. */
12779 return 0;
12781 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12782 if (!args)
12783 return 0;
12785 arg_type = TREE_VALUE (args);
12786 if (arg_type == error_mark_node)
12787 return 0;
12789 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12791 /* Pass by value copy assignment operator. */
12792 result = -1;
12794 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
12795 && !TYPE_REF_IS_RVALUE (arg_type)
12796 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12798 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12799 result = 2;
12801 else
12802 return 0;
12804 args = TREE_CHAIN (args);
12806 if (args && args != void_list_node && !TREE_PURPOSE (args))
12807 /* There are more non-optional args. */
12808 return 0;
12810 return result;
12813 /* D is a constructor or overloaded `operator='.
12815 Let T be the class in which D is declared. Then, this function
12816 returns true when D is a move constructor or move assignment
12817 operator, false otherwise. */
12819 bool
12820 move_fn_p (const_tree d)
12822 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12824 if (cxx_dialect == cxx98)
12825 /* There are no move constructors if we are in C++98 mode. */
12826 return false;
12828 if (TREE_CODE (d) == TEMPLATE_DECL
12829 || (DECL_TEMPLATE_INFO (d)
12830 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12831 /* Instantiations of template member functions are never move
12832 functions. Note that member functions of templated classes are
12833 represented as template functions internally, and we must
12834 accept those as move functions. */
12835 return 0;
12837 return move_signature_fn_p (d);
12840 /* D is a constructor or overloaded `operator='.
12842 Then, this function returns true when D has the same signature as a move
12843 constructor or move assignment operator (because either it is such a
12844 ctor/op= or it is a template specialization with the same signature),
12845 false otherwise. */
12847 bool
12848 move_signature_fn_p (const_tree d)
12850 tree args;
12851 tree arg_type;
12852 bool result = false;
12854 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12855 if (!args)
12856 return 0;
12858 arg_type = TREE_VALUE (args);
12859 if (arg_type == error_mark_node)
12860 return 0;
12862 if (TREE_CODE (arg_type) == REFERENCE_TYPE
12863 && TYPE_REF_IS_RVALUE (arg_type)
12864 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
12865 DECL_CONTEXT (d)))
12866 result = true;
12868 args = TREE_CHAIN (args);
12870 if (args && args != void_list_node && !TREE_PURPOSE (args))
12871 /* There are more non-optional args. */
12872 return false;
12874 return result;
12877 /* Remember any special properties of member function DECL. */
12879 void
12880 grok_special_member_properties (tree decl)
12882 tree class_type;
12884 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
12885 return;
12887 class_type = DECL_CONTEXT (decl);
12888 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
12890 int ctor = copy_fn_p (decl);
12892 if (!DECL_ARTIFICIAL (decl))
12893 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
12895 if (ctor > 0)
12897 /* [class.copy]
12899 A non-template constructor for class X is a copy
12900 constructor if its first parameter is of type X&, const
12901 X&, volatile X& or const volatile X&, and either there
12902 are no other parameters or else all other parameters have
12903 default arguments. */
12904 TYPE_HAS_COPY_CTOR (class_type) = 1;
12905 if (user_provided_p (decl))
12906 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
12907 if (ctor > 1)
12908 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
12910 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
12911 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
12912 else if (move_fn_p (decl) && user_provided_p (decl))
12913 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
12914 else if (is_list_ctor (decl))
12915 TYPE_HAS_LIST_CTOR (class_type) = 1;
12917 if (DECL_DECLARED_CONSTEXPR_P (decl)
12918 && !ctor && !move_fn_p (decl))
12919 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
12921 else if (DECL_NAME (decl) == assign_op_identifier)
12923 /* [class.copy]
12925 A non-template assignment operator for class X is a copy
12926 assignment operator if its parameter is of type X, X&, const
12927 X&, volatile X& or const volatile X&. */
12929 int assop = copy_fn_p (decl);
12931 if (assop)
12933 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
12934 if (user_provided_p (decl))
12935 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
12936 if (assop != 1)
12937 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
12939 else if (move_fn_p (decl) && user_provided_p (decl))
12940 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
12942 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
12943 TYPE_HAS_CONVERSION (class_type) = true;
12945 /* Destructors are handled in check_methods. */
12948 /* Check a constructor DECL has the correct form. Complains
12949 if the class has a constructor of the form X(X). */
12951 bool
12952 grok_ctor_properties (const_tree ctype, const_tree decl)
12954 int ctor_parm = copy_fn_p (decl);
12956 if (ctor_parm < 0)
12958 /* [class.copy]
12960 A declaration of a constructor for a class X is ill-formed if
12961 its first parameter is of type (optionally cv-qualified) X
12962 and either there are no other parameters or else all other
12963 parameters have default arguments.
12965 We *don't* complain about member template instantiations that
12966 have this form, though; they can occur as we try to decide
12967 what constructor to use during overload resolution. Since
12968 overload resolution will never prefer such a constructor to
12969 the non-template copy constructor (which is either explicitly
12970 or implicitly defined), there's no need to worry about their
12971 existence. Theoretically, they should never even be
12972 instantiated, but that's hard to forestall. */
12973 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
12974 ctype, ctype);
12975 return false;
12978 return true;
12981 /* DECL is a declaration for an overloaded or conversion operator. If
12982 COMPLAIN is true, errors are issued for invalid declarations. */
12984 bool
12985 grok_op_properties (tree decl, bool complain)
12987 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12988 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
12989 tree name = DECL_NAME (decl);
12991 tree class_type = DECL_CONTEXT (decl);
12992 if (class_type && !CLASS_TYPE_P (class_type))
12993 class_type = NULL_TREE;
12995 tree_code operator_code;
12996 unsigned op_flags;
12997 if (IDENTIFIER_CONV_OP_P (name))
12999 /* Conversion operators are TYPE_EXPR for the purposes of this
13000 function. */
13001 operator_code = TYPE_EXPR;
13002 op_flags = OVL_OP_FLAG_UNARY;
13004 else
13006 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13008 operator_code = ovl_op->tree_code;
13009 op_flags = ovl_op->flags;
13010 gcc_checking_assert (operator_code != ERROR_MARK);
13011 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13014 if (op_flags & OVL_OP_FLAG_ALLOC)
13016 /* operator new and operator delete are quite special. */
13017 if (class_type)
13018 switch (op_flags)
13020 case OVL_OP_FLAG_ALLOC:
13021 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13022 break;
13024 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13025 TYPE_GETS_DELETE (class_type) |= 1;
13026 break;
13028 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13029 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13030 break;
13032 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13033 TYPE_GETS_DELETE (class_type) |= 2;
13034 break;
13036 default:
13037 gcc_unreachable ();
13040 /* [basic.std.dynamic.allocation]/1:
13042 A program is ill-formed if an allocation function is declared
13043 in a namespace scope other than global scope or declared
13044 static in global scope.
13046 The same also holds true for deallocation functions. */
13047 if (DECL_NAMESPACE_SCOPE_P (decl))
13049 if (CP_DECL_CONTEXT (decl) != global_namespace)
13051 error ("%qD may not be declared within a namespace", decl);
13052 return false;
13055 if (!TREE_PUBLIC (decl))
13057 error ("%qD may not be declared as static", decl);
13058 return false;
13062 if (op_flags & OVL_OP_FLAG_DELETE)
13063 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
13064 else
13066 DECL_IS_OPERATOR_NEW (decl) = 1;
13067 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
13070 return true;
13073 /* An operator function must either be a non-static member function
13074 or have at least one parameter of a class, a reference to a class,
13075 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13076 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13078 if (operator_code == TYPE_EXPR
13079 || operator_code == CALL_EXPR
13080 || operator_code == COMPONENT_REF
13081 || operator_code == ARRAY_REF
13082 || operator_code == NOP_EXPR)
13084 error ("%qD must be a nonstatic member function", decl);
13085 return false;
13088 if (DECL_STATIC_FUNCTION_P (decl))
13090 error ("%qD must be either a non-static member "
13091 "function or a non-member function", decl);
13092 return false;
13095 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13097 if (!arg || arg == void_list_node)
13099 if (complain)
13100 error ("%qD must have an argument of class or "
13101 "enumerated type", decl);
13102 return false;
13105 tree type = non_reference (TREE_VALUE (arg));
13106 if (type == error_mark_node)
13107 return false;
13109 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13110 because these checks are performed even on template
13111 functions. */
13112 if (MAYBE_CLASS_TYPE_P (type)
13113 || TREE_CODE (type) == ENUMERAL_TYPE)
13114 break;
13118 if (operator_code == CALL_EXPR)
13119 /* There are no further restrictions on the arguments to an overloaded
13120 "operator ()". */
13121 return true;
13123 if (operator_code == COND_EXPR)
13125 /* 13.4.0.3 */
13126 error ("ISO C++ prohibits overloading operator ?:");
13127 return false;
13130 /* Count the number of arguments and check for ellipsis. */
13131 int arity = 0;
13132 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13134 if (!arg)
13136 /* Variadic. */
13137 error ("%qD must not have variable number of arguments", decl);
13138 return false;
13140 ++arity;
13143 /* Verify correct number of arguments. */
13144 switch (op_flags)
13146 case OVL_OP_FLAG_AMBIARY:
13147 if (arity == 1)
13149 /* We have a unary instance of an ambi-ary op. Remap to the
13150 unary one. */
13151 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13152 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13153 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13154 operator_code = ovl_op->tree_code;
13155 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13157 else if (arity != 2)
13159 /* This was an ambiguous operator but is invalid. */
13160 error (methodp
13161 ? G_("%qD must have either zero or one argument")
13162 : G_("%qD must have either one or two arguments"), decl);
13163 return false;
13165 else if ((operator_code == POSTINCREMENT_EXPR
13166 || operator_code == POSTDECREMENT_EXPR)
13167 && ! processing_template_decl
13168 /* x++ and x--'s second argument must be an int. */
13169 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13170 integer_type_node))
13172 error (methodp
13173 ? G_("postfix %qD must have %<int%> as its argument")
13174 : G_("postfix %qD must have %<int%> as its second argument"),
13175 decl);
13176 return false;
13178 break;
13180 case OVL_OP_FLAG_UNARY:
13181 if (arity != 1)
13183 error (methodp
13184 ? G_("%qD must have no arguments")
13185 : G_("%qD must have exactly one argument"), decl);
13186 return false;
13188 break;
13190 case OVL_OP_FLAG_BINARY:
13191 if (arity != 2)
13193 error (methodp
13194 ? G_("%qD must have exactly one argument")
13195 : G_("%qD must have exactly two arguments"), decl);
13196 return false;
13198 break;
13200 default:
13201 gcc_unreachable ();
13204 /* There can be no default arguments. */
13205 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13206 if (TREE_PURPOSE (arg))
13208 TREE_PURPOSE (arg) = NULL_TREE;
13209 if (operator_code == POSTINCREMENT_EXPR
13210 || operator_code == POSTDECREMENT_EXPR)
13211 pedwarn (input_location, OPT_Wpedantic,
13212 "%qD cannot have default arguments", decl);
13213 else
13215 error ("%qD cannot have default arguments", decl);
13216 return false;
13220 /* At this point the declaration is well-formed. It may not be
13221 sensible though. */
13223 /* Check member function warnings only on the in-class declaration.
13224 There's no point warning on an out-of-class definition. */
13225 if (class_type && class_type != current_class_type)
13226 return true;
13228 /* Warn about conversion operators that will never be used. */
13229 if (IDENTIFIER_CONV_OP_P (name)
13230 && ! DECL_TEMPLATE_INFO (decl)
13231 && warn_conversion)
13233 tree t = TREE_TYPE (name);
13234 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
13236 if (ref)
13237 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13239 if (VOID_TYPE_P (t))
13240 warning (OPT_Wconversion,
13242 ? G_("conversion to a reference to void "
13243 "will never use a type conversion operator")
13244 : G_("conversion to void "
13245 "will never use a type conversion operator"));
13246 else if (class_type)
13248 if (t == class_type)
13249 warning (OPT_Wconversion,
13251 ? G_("conversion to a reference to the same type "
13252 "will never use a type conversion operator")
13253 : G_("conversion to the same type "
13254 "will never use a type conversion operator"));
13255 /* Don't force t to be complete here. */
13256 else if (MAYBE_CLASS_TYPE_P (t)
13257 && COMPLETE_TYPE_P (t)
13258 && DERIVED_FROM_P (t, class_type))
13259 warning (OPT_Wconversion,
13261 ? G_("conversion to a reference to a base class "
13262 "will never use a type conversion operator")
13263 : G_("conversion to a base class "
13264 "will never use a type conversion operator"));
13268 if (!warn_ecpp)
13269 return true;
13271 /* Effective C++ rules below. */
13273 /* More Effective C++ rule 7. */
13274 if (operator_code == TRUTH_ANDIF_EXPR
13275 || operator_code == TRUTH_ORIF_EXPR
13276 || operator_code == COMPOUND_EXPR)
13277 warning (OPT_Weffc__,
13278 "user-defined %qD always evaluates both arguments", decl);
13280 /* More Effective C++ rule 6. */
13281 if (operator_code == POSTINCREMENT_EXPR
13282 || operator_code == POSTDECREMENT_EXPR
13283 || operator_code == PREINCREMENT_EXPR
13284 || operator_code == PREDECREMENT_EXPR)
13286 tree arg = TREE_VALUE (argtypes);
13287 tree ret = TREE_TYPE (TREE_TYPE (decl));
13288 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
13289 arg = TREE_TYPE (arg);
13290 arg = TYPE_MAIN_VARIANT (arg);
13292 if (operator_code == PREINCREMENT_EXPR
13293 || operator_code == PREDECREMENT_EXPR)
13295 if (TREE_CODE (ret) != REFERENCE_TYPE
13296 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13297 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
13298 build_reference_type (arg));
13300 else
13302 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13303 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
13307 /* Effective C++ rule 23. */
13308 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13309 && (operator_code == PLUS_EXPR
13310 || operator_code == MINUS_EXPR
13311 || operator_code == TRUNC_DIV_EXPR
13312 || operator_code == MULT_EXPR
13313 || operator_code == TRUNC_MOD_EXPR)
13314 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
13315 warning (OPT_Weffc__, "%qD should return by value", decl);
13317 return true;
13320 /* Return a string giving the keyword associate with CODE. */
13322 static const char *
13323 tag_name (enum tag_types code)
13325 switch (code)
13327 case record_type:
13328 return "struct";
13329 case class_type:
13330 return "class";
13331 case union_type:
13332 return "union";
13333 case enum_type:
13334 return "enum";
13335 case typename_type:
13336 return "typename";
13337 default:
13338 gcc_unreachable ();
13342 /* Name lookup in an elaborated-type-specifier (after the keyword
13343 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13344 elaborated-type-specifier is invalid, issue a diagnostic and return
13345 error_mark_node; otherwise, return the *_TYPE to which it referred.
13346 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13348 tree
13349 check_elaborated_type_specifier (enum tag_types tag_code,
13350 tree decl,
13351 bool allow_template_p)
13353 tree type;
13355 /* In the case of:
13357 struct S { struct S *p; };
13359 name lookup will find the TYPE_DECL for the implicit "S::S"
13360 typedef. Adjust for that here. */
13361 if (DECL_SELF_REFERENCE_P (decl))
13362 decl = TYPE_NAME (TREE_TYPE (decl));
13364 type = TREE_TYPE (decl);
13366 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13367 is false for this case as well. */
13368 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13370 error ("using template type parameter %qT after %qs",
13371 type, tag_name (tag_code));
13372 return error_mark_node;
13374 /* Accept template template parameters. */
13375 else if (allow_template_p
13376 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13377 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13379 /* [dcl.type.elab]
13381 If the identifier resolves to a typedef-name or the
13382 simple-template-id resolves to an alias template
13383 specialization, the elaborated-type-specifier is ill-formed.
13385 In other words, the only legitimate declaration to use in the
13386 elaborated type specifier is the implicit typedef created when
13387 the type is declared. */
13388 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13389 && !DECL_SELF_REFERENCE_P (decl)
13390 && tag_code != typename_type)
13392 if (alias_template_specialization_p (type))
13393 error ("using alias template specialization %qT after %qs",
13394 type, tag_name (tag_code));
13395 else
13396 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13397 inform (DECL_SOURCE_LOCATION (decl),
13398 "%qD has a previous declaration here", decl);
13399 return error_mark_node;
13401 else if (TREE_CODE (type) != RECORD_TYPE
13402 && TREE_CODE (type) != UNION_TYPE
13403 && tag_code != enum_type
13404 && tag_code != typename_type)
13406 error ("%qT referred to as %qs", type, tag_name (tag_code));
13407 inform (location_of (type), "%qT has a previous declaration here", type);
13408 return error_mark_node;
13410 else if (TREE_CODE (type) != ENUMERAL_TYPE
13411 && tag_code == enum_type)
13413 error ("%qT referred to as enum", type);
13414 inform (location_of (type), "%qT has a previous declaration here", type);
13415 return error_mark_node;
13417 else if (!allow_template_p
13418 && TREE_CODE (type) == RECORD_TYPE
13419 && CLASSTYPE_IS_TEMPLATE (type))
13421 /* If a class template appears as elaborated type specifier
13422 without a template header such as:
13424 template <class T> class C {};
13425 void f(class C); // No template header here
13427 then the required template argument is missing. */
13428 error ("template argument required for %<%s %T%>",
13429 tag_name (tag_code),
13430 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13431 return error_mark_node;
13434 return type;
13437 /* Lookup NAME in elaborate type specifier in scope according to
13438 SCOPE and issue diagnostics if necessary.
13439 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13440 found, and ERROR_MARK_NODE for type error. */
13442 static tree
13443 lookup_and_check_tag (enum tag_types tag_code, tree name,
13444 tag_scope scope, bool template_header_p)
13446 tree t;
13447 tree decl;
13448 if (scope == ts_global)
13450 /* First try ordinary name lookup, ignoring hidden class name
13451 injected via friend declaration. */
13452 decl = lookup_name_prefer_type (name, 2);
13453 decl = strip_using_decl (decl);
13454 /* If that fails, the name will be placed in the smallest
13455 non-class, non-function-prototype scope according to 3.3.1/5.
13456 We may already have a hidden name declared as friend in this
13457 scope. So lookup again but not ignoring hidden names.
13458 If we find one, that name will be made visible rather than
13459 creating a new tag. */
13460 if (!decl)
13461 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13463 else
13464 decl = lookup_type_scope (name, scope);
13466 if (decl
13467 && (DECL_CLASS_TEMPLATE_P (decl)
13468 /* If scope is ts_current we're defining a class, so ignore a
13469 template template parameter. */
13470 || (scope != ts_current
13471 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13472 decl = DECL_TEMPLATE_RESULT (decl);
13474 if (decl && TREE_CODE (decl) == TYPE_DECL)
13476 /* Look for invalid nested type:
13477 class C {
13478 class C {};
13479 }; */
13480 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13482 error ("%qD has the same name as the class in which it is "
13483 "declared",
13484 decl);
13485 return error_mark_node;
13488 /* Two cases we need to consider when deciding if a class
13489 template is allowed as an elaborated type specifier:
13490 1. It is a self reference to its own class.
13491 2. It comes with a template header.
13493 For example:
13495 template <class T> class C {
13496 class C *c1; // DECL_SELF_REFERENCE_P is true
13497 class D;
13499 template <class U> class C; // template_header_p is true
13500 template <class T> class C<T>::D {
13501 class C *c2; // DECL_SELF_REFERENCE_P is true
13502 }; */
13504 t = check_elaborated_type_specifier (tag_code,
13505 decl,
13506 template_header_p
13507 | DECL_SELF_REFERENCE_P (decl));
13508 if (template_header_p && t && CLASS_TYPE_P (t)
13509 && (!CLASSTYPE_TEMPLATE_INFO (t)
13510 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13512 error ("%qT is not a template", t);
13513 inform (location_of (t), "previous declaration here");
13514 if (TYPE_CLASS_SCOPE_P (t)
13515 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13516 inform (input_location,
13517 "perhaps you want to explicitly add %<%T::%>",
13518 TYPE_CONTEXT (t));
13519 t = error_mark_node;
13522 return t;
13524 else if (decl && TREE_CODE (decl) == TREE_LIST)
13526 error ("reference to %qD is ambiguous", name);
13527 print_candidates (decl);
13528 return error_mark_node;
13530 else
13531 return NULL_TREE;
13534 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13535 Define the tag as a forward-reference if it is not defined.
13537 If a declaration is given, process it here, and report an error if
13538 multiple declarations are not identical.
13540 SCOPE is TS_CURRENT when this is also a definition. Only look in
13541 the current frame for the name (since C++ allows new names in any
13542 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13543 declaration. Only look beginning from the current scope outward up
13544 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13546 TEMPLATE_HEADER_P is true when this declaration is preceded by
13547 a set of template parameters. */
13549 static tree
13550 xref_tag_1 (enum tag_types tag_code, tree name,
13551 tag_scope scope, bool template_header_p)
13553 enum tree_code code;
13554 tree context = NULL_TREE;
13556 gcc_assert (identifier_p (name));
13558 switch (tag_code)
13560 case record_type:
13561 case class_type:
13562 code = RECORD_TYPE;
13563 break;
13564 case union_type:
13565 code = UNION_TYPE;
13566 break;
13567 case enum_type:
13568 code = ENUMERAL_TYPE;
13569 break;
13570 default:
13571 gcc_unreachable ();
13574 /* In case of anonymous name, xref_tag is only called to
13575 make type node and push name. Name lookup is not required. */
13576 tree t = NULL_TREE;
13577 if (scope != ts_lambda && !anon_aggrname_p (name))
13578 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
13580 if (t == error_mark_node)
13581 return error_mark_node;
13583 if (scope != ts_current && t && current_class_type
13584 && template_class_depth (current_class_type)
13585 && template_header_p)
13587 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13588 return t;
13590 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13591 definition of this tag. Since, in addition, we are currently
13592 processing a (member) template declaration of a template
13593 class, we must be very careful; consider:
13595 template <class X> struct S1
13597 template <class U> struct S2
13599 template <class V> friend struct S1;
13602 Here, the S2::S1 declaration should not be confused with the
13603 outer declaration. In particular, the inner version should
13604 have a template parameter of level 2, not level 1.
13606 On the other hand, when presented with:
13608 template <class T> struct S1
13610 template <class U> struct S2 {};
13611 template <class U> friend struct S2;
13614 the friend must find S1::S2 eventually. We accomplish this
13615 by making sure that the new type we create to represent this
13616 declaration has the right TYPE_CONTEXT. */
13617 context = TYPE_CONTEXT (t);
13618 t = NULL_TREE;
13621 if (! t)
13623 /* If no such tag is yet defined, create a forward-reference node
13624 and record it as the "definition".
13625 When a real declaration of this type is found,
13626 the forward-reference will be altered into a real type. */
13627 if (code == ENUMERAL_TYPE)
13629 error ("use of enum %q#D without previous declaration", name);
13630 return error_mark_node;
13632 else
13634 t = make_class_type (code);
13635 TYPE_CONTEXT (t) = context;
13636 if (scope == ts_lambda)
13638 /* Mark it as a lambda type. */
13639 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13640 /* And push it into current scope. */
13641 scope = ts_current;
13643 t = pushtag (name, t, scope);
13646 else
13648 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13650 /* Check that we aren't trying to overload a class with different
13651 constraints. */
13652 tree constr = NULL_TREE;
13653 if (current_template_parms)
13655 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13656 constr = build_constraints (reqs, NULL_TREE);
13658 if (!redeclare_class_template (t, current_template_parms, constr))
13659 return error_mark_node;
13661 else if (!processing_template_decl
13662 && CLASS_TYPE_P (t)
13663 && CLASSTYPE_IS_TEMPLATE (t))
13665 error ("redeclaration of %qT as a non-template", t);
13666 inform (location_of (t), "previous declaration %qD", t);
13667 return error_mark_node;
13670 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
13672 /* This is no longer an invisible friend. Make it
13673 visible. */
13674 tree decl = TYPE_NAME (t);
13676 DECL_ANTICIPATED (decl) = false;
13677 DECL_FRIEND_P (decl) = false;
13679 if (TYPE_TEMPLATE_INFO (t))
13681 tree tmpl = TYPE_TI_TEMPLATE (t);
13682 DECL_ANTICIPATED (tmpl) = false;
13683 DECL_FRIEND_P (tmpl) = false;
13688 return t;
13691 /* Wrapper for xref_tag_1. */
13693 tree
13694 xref_tag (enum tag_types tag_code, tree name,
13695 tag_scope scope, bool template_header_p)
13697 tree ret;
13698 bool subtime;
13699 subtime = timevar_cond_start (TV_NAME_LOOKUP);
13700 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13701 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13702 return ret;
13706 tree
13707 xref_tag_from_type (tree old, tree id, tag_scope scope)
13709 enum tag_types tag_kind;
13711 if (TREE_CODE (old) == RECORD_TYPE)
13712 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13713 else
13714 tag_kind = union_type;
13716 if (id == NULL_TREE)
13717 id = TYPE_IDENTIFIER (old);
13719 return xref_tag (tag_kind, id, scope, false);
13722 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13723 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
13724 access_* node, and the TREE_VALUE is the type of the base-class.
13725 Non-NULL TREE_TYPE indicates virtual inheritance. */
13727 void
13728 xref_basetypes (tree ref, tree base_list)
13730 tree *basep;
13731 tree binfo, base_binfo;
13732 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
13733 unsigned max_bases = 0; /* Maximum direct bases. */
13734 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
13735 int i;
13736 tree default_access;
13737 tree igo_prev; /* Track Inheritance Graph Order. */
13739 if (ref == error_mark_node)
13740 return;
13742 /* The base of a derived class is private by default, all others are
13743 public. */
13744 default_access = (TREE_CODE (ref) == RECORD_TYPE
13745 && CLASSTYPE_DECLARED_CLASS (ref)
13746 ? access_private_node : access_public_node);
13748 /* First, make sure that any templates in base-classes are
13749 instantiated. This ensures that if we call ourselves recursively
13750 we do not get confused about which classes are marked and which
13751 are not. */
13752 basep = &base_list;
13753 while (*basep)
13755 tree basetype = TREE_VALUE (*basep);
13757 /* The dependent_type_p call below should really be dependent_scope_p
13758 so that we give a hard error about using an incomplete type as a
13759 base, but we allow it with a pedwarn for backward
13760 compatibility. */
13761 if (processing_template_decl
13762 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13763 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13764 if (!dependent_type_p (basetype)
13765 && !complete_type_or_else (basetype, NULL))
13766 /* An incomplete type. Remove it from the list. */
13767 *basep = TREE_CHAIN (*basep);
13768 else
13770 max_bases++;
13771 if (TREE_TYPE (*basep))
13772 max_dvbases++;
13773 if (CLASS_TYPE_P (basetype))
13774 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13775 basep = &TREE_CHAIN (*basep);
13778 max_vbases += max_dvbases;
13780 TYPE_MARKED_P (ref) = 1;
13782 /* The binfo slot should be empty, unless this is an (ill-formed)
13783 redefinition. */
13784 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13786 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13788 binfo = make_tree_binfo (max_bases);
13790 TYPE_BINFO (ref) = binfo;
13791 BINFO_OFFSET (binfo) = size_zero_node;
13792 BINFO_TYPE (binfo) = ref;
13794 /* Apply base-class info set up to the variants of this type. */
13795 fixup_type_variants (ref);
13797 if (max_bases)
13799 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
13800 /* A C++98 POD cannot have base classes. */
13801 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
13803 if (TREE_CODE (ref) == UNION_TYPE)
13805 error ("derived union %qT invalid", ref);
13806 return;
13810 if (max_bases > 1)
13811 warning (OPT_Wmultiple_inheritance,
13812 "%qT defined with multiple direct bases", ref);
13814 if (max_vbases)
13816 /* An aggregate can't have virtual base classes. */
13817 CLASSTYPE_NON_AGGREGATE (ref) = true;
13819 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
13821 if (max_dvbases)
13822 warning (OPT_Wvirtual_inheritance,
13823 "%qT defined with direct virtual base", ref);
13826 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
13828 tree access = TREE_PURPOSE (base_list);
13829 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
13830 tree basetype = TREE_VALUE (base_list);
13832 if (access == access_default_node)
13833 access = default_access;
13835 /* Before C++17, an aggregate cannot have base classes. In C++17, an
13836 aggregate can't have virtual, private, or protected base classes. */
13837 if (cxx_dialect < cxx17
13838 || access != access_public_node
13839 || via_virtual)
13840 CLASSTYPE_NON_AGGREGATE (ref) = true;
13842 if (PACK_EXPANSION_P (basetype))
13843 basetype = PACK_EXPANSION_PATTERN (basetype);
13844 if (TREE_CODE (basetype) == TYPE_DECL)
13845 basetype = TREE_TYPE (basetype);
13846 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
13848 error ("base type %qT fails to be a struct or class type",
13849 basetype);
13850 goto dropped_base;
13853 base_binfo = NULL_TREE;
13854 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
13856 base_binfo = TYPE_BINFO (basetype);
13857 /* The original basetype could have been a typedef'd type. */
13858 basetype = BINFO_TYPE (base_binfo);
13860 /* Inherit flags from the base. */
13861 TYPE_HAS_NEW_OPERATOR (ref)
13862 |= TYPE_HAS_NEW_OPERATOR (basetype);
13863 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13864 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
13865 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
13866 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
13867 CLASSTYPE_DIAMOND_SHAPED_P (ref)
13868 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
13869 CLASSTYPE_REPEATED_BASE_P (ref)
13870 |= CLASSTYPE_REPEATED_BASE_P (basetype);
13873 /* We must do this test after we've seen through a typedef
13874 type. */
13875 if (TYPE_MARKED_P (basetype))
13877 if (basetype == ref)
13878 error ("recursive type %qT undefined", basetype);
13879 else
13880 error ("duplicate base type %qT invalid", basetype);
13881 goto dropped_base;
13884 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
13885 /* Regenerate the pack expansion for the bases. */
13886 basetype = make_pack_expansion (basetype);
13888 TYPE_MARKED_P (basetype) = 1;
13890 base_binfo = copy_binfo (base_binfo, basetype, ref,
13891 &igo_prev, via_virtual);
13892 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
13893 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
13895 BINFO_BASE_APPEND (binfo, base_binfo);
13896 BINFO_BASE_ACCESS_APPEND (binfo, access);
13897 continue;
13899 dropped_base:
13900 /* Update max_vbases to reflect the reality that we are dropping
13901 this base: if it reaches zero we want to undo the vec_alloc
13902 above to avoid inconsistencies during error-recovery: eg, in
13903 build_special_member_call, CLASSTYPE_VBASECLASSES non null
13904 and vtt null (c++/27952). */
13905 if (via_virtual)
13906 max_vbases--;
13907 if (CLASS_TYPE_P (basetype))
13908 max_vbases
13909 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13912 if (CLASSTYPE_VBASECLASSES (ref)
13913 && max_vbases == 0)
13914 vec_free (CLASSTYPE_VBASECLASSES (ref));
13916 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
13917 /* If we didn't get max_vbases vbases, we must have shared at
13918 least one of them, and are therefore diamond shaped. */
13919 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
13921 /* Unmark all the types. */
13922 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
13923 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13924 TYPE_MARKED_P (ref) = 0;
13926 /* Now see if we have a repeated base type. */
13927 if (!CLASSTYPE_REPEATED_BASE_P (ref))
13929 for (base_binfo = binfo; base_binfo;
13930 base_binfo = TREE_CHAIN (base_binfo))
13932 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13934 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
13935 break;
13937 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
13939 for (base_binfo = binfo; base_binfo;
13940 base_binfo = TREE_CHAIN (base_binfo))
13941 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13942 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13943 else
13944 break;
13949 /* Copies the enum-related properties from type SRC to type DST.
13950 Used with the underlying type of an enum and the enum itself. */
13951 static void
13952 copy_type_enum (tree dst, tree src)
13954 tree t;
13955 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
13957 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
13958 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
13959 TYPE_SIZE (t) = TYPE_SIZE (src);
13960 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
13961 SET_TYPE_MODE (dst, TYPE_MODE (src));
13962 TYPE_PRECISION (t) = TYPE_PRECISION (src);
13963 unsigned valign = TYPE_ALIGN (src);
13964 if (TYPE_USER_ALIGN (t))
13965 valign = MAX (valign, TYPE_ALIGN (t));
13966 else
13967 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
13968 SET_TYPE_ALIGN (t, valign);
13969 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
13973 /* Begin compiling the definition of an enumeration type.
13974 NAME is its name,
13976 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
13978 UNDERLYING_TYPE is the type that will be used as the storage for
13979 the enumeration type. This should be NULL_TREE if no storage type
13980 was specified.
13982 ATTRIBUTES are any attributes specified after the enum-key.
13984 SCOPED_ENUM_P is true if this is a scoped enumeration type.
13986 if IS_NEW is not NULL, gets TRUE iff a new type is created.
13988 Returns the type object, as yet incomplete.
13989 Also records info about it so that build_enumerator
13990 may be used to declare the individual values as they are read. */
13992 tree
13993 start_enum (tree name, tree enumtype, tree underlying_type,
13994 tree attributes, bool scoped_enum_p, bool *is_new)
13996 tree prevtype = NULL_TREE;
13997 gcc_assert (identifier_p (name));
13999 if (is_new)
14000 *is_new = false;
14001 /* [C++0x dcl.enum]p5:
14003 If not explicitly specified, the underlying type of a scoped
14004 enumeration type is int. */
14005 if (!underlying_type && scoped_enum_p)
14006 underlying_type = integer_type_node;
14008 if (underlying_type)
14009 underlying_type = cv_unqualified (underlying_type);
14011 /* If this is the real definition for a previous forward reference,
14012 fill in the contents in the same object that used to be the
14013 forward reference. */
14014 if (!enumtype)
14015 enumtype = lookup_and_check_tag (enum_type, name,
14016 /*tag_scope=*/ts_current,
14017 /*template_header_p=*/false);
14019 /* In case of a template_decl, the only check that should be deferred
14020 to instantiation time is the comparison of underlying types. */
14021 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14023 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14025 error_at (input_location, "scoped/unscoped mismatch "
14026 "in enum %q#T", enumtype);
14027 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14028 "previous definition here");
14029 enumtype = error_mark_node;
14031 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14033 error_at (input_location, "underlying type mismatch "
14034 "in enum %q#T", enumtype);
14035 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14036 "previous definition here");
14037 enumtype = error_mark_node;
14039 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14040 && !dependent_type_p (underlying_type)
14041 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
14042 && !same_type_p (underlying_type,
14043 ENUM_UNDERLYING_TYPE (enumtype)))
14045 error_at (input_location, "different underlying type "
14046 "in enum %q#T", enumtype);
14047 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14048 "previous definition here");
14049 underlying_type = NULL_TREE;
14053 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14054 || processing_template_decl)
14056 /* In case of error, make a dummy enum to allow parsing to
14057 continue. */
14058 if (enumtype == error_mark_node)
14060 name = make_anon_name ();
14061 enumtype = NULL_TREE;
14064 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14065 of an opaque enum, or an opaque enum of an already defined
14066 enumeration (C++0x only).
14067 In any other case, it'll be NULL_TREE. */
14068 if (!enumtype)
14070 if (is_new)
14071 *is_new = true;
14073 prevtype = enumtype;
14075 /* Do not push the decl more than once, unless we need to
14076 compare underlying types at instantiation time */
14077 if (!enumtype
14078 || TREE_CODE (enumtype) != ENUMERAL_TYPE
14079 || (underlying_type
14080 && dependent_type_p (underlying_type))
14081 || (ENUM_UNDERLYING_TYPE (enumtype)
14082 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
14084 enumtype = cxx_make_type (ENUMERAL_TYPE);
14085 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14087 /* std::byte aliases anything. */
14088 if (enumtype != error_mark_node
14089 && TYPE_CONTEXT (enumtype) == std_node
14090 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14091 TYPE_ALIAS_SET (enumtype) = 0;
14093 else
14094 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14095 false);
14097 if (enumtype == error_mark_node)
14098 return error_mark_node;
14100 /* The enum is considered opaque until the opening '{' of the
14101 enumerator list. */
14102 SET_OPAQUE_ENUM_P (enumtype, true);
14103 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14106 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14108 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14110 if (underlying_type)
14112 if (ENUM_UNDERLYING_TYPE (enumtype))
14113 /* We already checked that it matches, don't change it to a different
14114 typedef variant. */;
14115 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14117 copy_type_enum (enumtype, underlying_type);
14118 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14120 else if (dependent_type_p (underlying_type))
14121 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14122 else
14123 error ("underlying type %qT of %qT must be an integral type",
14124 underlying_type, enumtype);
14127 /* If into a template class, the returned enum is always the first
14128 declaration (opaque or not) seen. This way all the references to
14129 this type will be to the same declaration. The following ones are used
14130 only to check for definition errors. */
14131 if (prevtype && processing_template_decl)
14132 return prevtype;
14133 else
14134 return enumtype;
14137 /* After processing and defining all the values of an enumeration type,
14138 install their decls in the enumeration type.
14139 ENUMTYPE is the type object. */
14141 void
14142 finish_enum_value_list (tree enumtype)
14144 tree values;
14145 tree underlying_type;
14146 tree decl;
14147 tree value;
14148 tree minnode, maxnode;
14149 tree t;
14151 bool fixed_underlying_type_p
14152 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14154 /* We built up the VALUES in reverse order. */
14155 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14157 /* For an enum defined in a template, just set the type of the values;
14158 all further processing is postponed until the template is
14159 instantiated. We need to set the type so that tsubst of a CONST_DECL
14160 works. */
14161 if (processing_template_decl)
14163 for (values = TYPE_VALUES (enumtype);
14164 values;
14165 values = TREE_CHAIN (values))
14166 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14167 return;
14170 /* Determine the minimum and maximum values of the enumerators. */
14171 if (TYPE_VALUES (enumtype))
14173 minnode = maxnode = NULL_TREE;
14175 for (values = TYPE_VALUES (enumtype);
14176 values;
14177 values = TREE_CHAIN (values))
14179 decl = TREE_VALUE (values);
14181 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14182 each enumerator has the type of its enumeration. Prior to the
14183 closing brace, the type of each enumerator is the type of its
14184 initializing value. */
14185 TREE_TYPE (decl) = enumtype;
14187 /* Update the minimum and maximum values, if appropriate. */
14188 value = DECL_INITIAL (decl);
14189 if (value == error_mark_node)
14190 value = integer_zero_node;
14191 /* Figure out what the minimum and maximum values of the
14192 enumerators are. */
14193 if (!minnode)
14194 minnode = maxnode = value;
14195 else if (tree_int_cst_lt (maxnode, value))
14196 maxnode = value;
14197 else if (tree_int_cst_lt (value, minnode))
14198 minnode = value;
14201 else
14202 /* [dcl.enum]
14204 If the enumerator-list is empty, the underlying type is as if
14205 the enumeration had a single enumerator with value 0. */
14206 minnode = maxnode = integer_zero_node;
14208 if (!fixed_underlying_type_p)
14210 /* Compute the number of bits require to represent all values of the
14211 enumeration. We must do this before the type of MINNODE and
14212 MAXNODE are transformed, since tree_int_cst_min_precision relies
14213 on the TREE_TYPE of the value it is passed. */
14214 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14215 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14216 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14217 int precision = MAX (lowprec, highprec);
14218 unsigned int itk;
14219 bool use_short_enum;
14221 /* Determine the underlying type of the enumeration.
14223 [dcl.enum]
14225 The underlying type of an enumeration is an integral type that
14226 can represent all the enumerator values defined in the
14227 enumeration. It is implementation-defined which integral type is
14228 used as the underlying type for an enumeration except that the
14229 underlying type shall not be larger than int unless the value of
14230 an enumerator cannot fit in an int or unsigned int.
14232 We use "int" or an "unsigned int" as the underlying type, even if
14233 a smaller integral type would work, unless the user has
14234 explicitly requested that we use the smallest possible type. The
14235 user can request that for all enumerations with a command line
14236 flag, or for just one enumeration with an attribute. */
14238 use_short_enum = flag_short_enums
14239 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14241 /* If the precision of the type was specified with an attribute and it
14242 was too small, give an error. Otherwise, use it. */
14243 if (TYPE_PRECISION (enumtype))
14245 if (precision > TYPE_PRECISION (enumtype))
14246 error ("specified mode too small for enumeral values");
14247 else
14249 use_short_enum = true;
14250 precision = TYPE_PRECISION (enumtype);
14254 for (itk = (use_short_enum ? itk_char : itk_int);
14255 itk != itk_none;
14256 itk++)
14258 underlying_type = integer_types[itk];
14259 if (underlying_type != NULL_TREE
14260 && TYPE_PRECISION (underlying_type) >= precision
14261 && TYPE_SIGN (underlying_type) == sgn)
14262 break;
14264 if (itk == itk_none)
14266 /* DR 377
14268 IF no integral type can represent all the enumerator values, the
14269 enumeration is ill-formed. */
14270 error ("no integral type can represent all of the enumerator values "
14271 "for %qT", enumtype);
14272 precision = TYPE_PRECISION (long_long_integer_type_node);
14273 underlying_type = integer_types[itk_unsigned_long_long];
14276 /* [dcl.enum]
14278 The value of sizeof() applied to an enumeration type, an object
14279 of an enumeration type, or an enumerator, is the value of sizeof()
14280 applied to the underlying type. */
14281 copy_type_enum (enumtype, underlying_type);
14283 /* Compute the minimum and maximum values for the type.
14285 [dcl.enum]
14287 For an enumeration where emin is the smallest enumerator and emax
14288 is the largest, the values of the enumeration are the values of the
14289 underlying type in the range bmin to bmax, where bmin and bmax are,
14290 respectively, the smallest and largest values of the smallest bit-
14291 field that can store emin and emax. */
14293 /* The middle-end currently assumes that types with TYPE_PRECISION
14294 narrower than their underlying type are suitably zero or sign
14295 extended to fill their mode. Similarly, it assumes that the front
14296 end assures that a value of a particular type must be within
14297 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14299 We used to set these fields based on bmin and bmax, but that led
14300 to invalid assumptions like optimizing away bounds checking. So
14301 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14302 TYPE_MAX_VALUE to the values for the mode above and only restrict
14303 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14304 ENUM_UNDERLYING_TYPE (enumtype)
14305 = build_distinct_type_copy (underlying_type);
14306 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14307 set_min_and_max_values_for_integral_type
14308 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14310 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14311 if (flag_strict_enums)
14312 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14314 else
14315 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14317 /* Convert each of the enumerators to the type of the underlying
14318 type of the enumeration. */
14319 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14321 location_t saved_location;
14323 decl = TREE_VALUE (values);
14324 saved_location = input_location;
14325 input_location = DECL_SOURCE_LOCATION (decl);
14326 if (fixed_underlying_type_p)
14327 /* If the enumeration type has a fixed underlying type, we
14328 already checked all of the enumerator values. */
14329 value = DECL_INITIAL (decl);
14330 else
14331 value = perform_implicit_conversion (underlying_type,
14332 DECL_INITIAL (decl),
14333 tf_warning_or_error);
14334 input_location = saved_location;
14336 /* Do not clobber shared ints. */
14337 if (value != error_mark_node)
14339 value = copy_node (value);
14341 TREE_TYPE (value) = enumtype;
14343 DECL_INITIAL (decl) = value;
14346 /* Fix up all variant types of this enum type. */
14347 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14348 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14350 if (at_class_scope_p ()
14351 && COMPLETE_TYPE_P (current_class_type)
14352 && UNSCOPED_ENUM_P (enumtype))
14354 insert_late_enum_def_bindings (current_class_type, enumtype);
14355 /* TYPE_FIELDS needs fixup. */
14356 fixup_type_variants (current_class_type);
14359 /* Finish debugging output for this type. */
14360 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14362 /* Each enumerator now has the type of its enumeration. Clear the cache
14363 so that this change in types doesn't confuse us later on. */
14364 clear_cv_and_fold_caches ();
14367 /* Finishes the enum type. This is called only the first time an
14368 enumeration is seen, be it opaque or odinary.
14369 ENUMTYPE is the type object. */
14371 void
14372 finish_enum (tree enumtype)
14374 if (processing_template_decl)
14376 if (at_function_scope_p ())
14377 add_stmt (build_min (TAG_DEFN, enumtype));
14378 return;
14381 /* If this is a forward declaration, there should not be any variants,
14382 though we can get a variant in the middle of an enum-specifier with
14383 wacky code like 'enum E { e = sizeof(const E*) };' */
14384 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14385 && (TYPE_VALUES (enumtype)
14386 || !TYPE_NEXT_VARIANT (enumtype)));
14389 /* Build and install a CONST_DECL for an enumeration constant of the
14390 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14391 Apply ATTRIBUTES if available. LOC is the location of NAME.
14392 Assignment of sequential values by default is handled here. */
14394 void
14395 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14396 location_t loc)
14398 tree decl;
14399 tree context;
14400 tree type;
14402 /* scalar_constant_value will pull out this expression, so make sure
14403 it's folded as appropriate. */
14404 if (processing_template_decl)
14405 value = fold_non_dependent_expr (value);
14407 /* If the VALUE was erroneous, pretend it wasn't there; that will
14408 result in the enum being assigned the next value in sequence. */
14409 if (value == error_mark_node)
14410 value = NULL_TREE;
14412 /* Remove no-op casts from the value. */
14413 if (value)
14414 STRIP_TYPE_NOPS (value);
14416 if (! processing_template_decl)
14418 /* Validate and default VALUE. */
14419 if (value != NULL_TREE)
14421 if (!ENUM_UNDERLYING_TYPE (enumtype))
14423 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14424 value, true);
14425 if (tmp_value)
14426 value = tmp_value;
14428 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14429 (TREE_TYPE (value)))
14430 value = perform_implicit_conversion_flags
14431 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14432 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14434 if (value == error_mark_node)
14435 value = NULL_TREE;
14437 if (value != NULL_TREE)
14439 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14440 (TREE_TYPE (value)))
14442 error ("enumerator value for %qD must have integral or "
14443 "unscoped enumeration type", name);
14444 value = NULL_TREE;
14446 else
14448 value = cxx_constant_value (value);
14450 if (TREE_CODE (value) != INTEGER_CST)
14452 error ("enumerator value for %qD is not an integer "
14453 "constant", name);
14454 value = NULL_TREE;
14460 /* Default based on previous value. */
14461 if (value == NULL_TREE)
14463 if (TYPE_VALUES (enumtype))
14465 tree prev_value;
14466 bool overflowed;
14468 /* C++03 7.2/4: If no initializer is specified for the first
14469 enumerator, the type is an unspecified integral
14470 type. Otherwise the type is the same as the type of the
14471 initializing value of the preceding enumerator unless the
14472 incremented value is not representable in that type, in
14473 which case the type is an unspecified integral type
14474 sufficient to contain the incremented value. */
14475 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14476 if (error_operand_p (prev_value))
14477 value = error_mark_node;
14478 else
14480 tree type = TREE_TYPE (prev_value);
14481 signop sgn = TYPE_SIGN (type);
14482 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14483 &overflowed);
14484 if (!overflowed)
14486 bool pos = !wi::neg_p (wi, sgn);
14487 if (!wi::fits_to_tree_p (wi, type))
14489 unsigned int itk;
14490 for (itk = itk_int; itk != itk_none; itk++)
14492 type = integer_types[itk];
14493 if (type != NULL_TREE
14494 && (pos || !TYPE_UNSIGNED (type))
14495 && wi::fits_to_tree_p (wi, type))
14496 break;
14498 if (type && cxx_dialect < cxx11
14499 && itk > itk_unsigned_long)
14500 pedwarn (input_location, OPT_Wlong_long,
14501 pos ? G_("\
14502 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14503 incremented enumerator value is too large for %<long%>"));
14505 if (type == NULL_TREE)
14506 overflowed = true;
14507 else
14508 value = wide_int_to_tree (type, wi);
14511 if (overflowed)
14513 error ("overflow in enumeration values at %qD", name);
14514 value = error_mark_node;
14518 else
14519 value = integer_zero_node;
14522 /* Remove no-op casts from the value. */
14523 STRIP_TYPE_NOPS (value);
14525 /* If the underlying type of the enum is fixed, check whether
14526 the enumerator values fits in the underlying type. If it
14527 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14528 if (ENUM_UNDERLYING_TYPE (enumtype)
14529 && value
14530 && TREE_CODE (value) == INTEGER_CST)
14532 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14533 error ("enumerator value %qE is outside the range of underlying "
14534 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14536 /* Convert the value to the appropriate type. */
14537 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14541 /* C++ associates enums with global, function, or class declarations. */
14542 context = current_scope ();
14544 /* Build the actual enumeration constant. Note that the enumeration
14545 constants have the underlying type of the enum (if it is fixed)
14546 or the type of their initializer (if the underlying type of the
14547 enum is not fixed):
14549 [ C++0x dcl.enum ]
14551 If the underlying type is fixed, the type of each enumerator
14552 prior to the closing brace is the underlying type; if the
14553 initializing value of an enumerator cannot be represented by
14554 the underlying type, the program is ill-formed. If the
14555 underlying type is not fixed, the type of each enumerator is
14556 the type of its initializing value.
14558 If the underlying type is not fixed, it will be computed by
14559 finish_enum and we will reset the type of this enumerator. Of
14560 course, if we're processing a template, there may be no value. */
14561 type = value ? TREE_TYPE (value) : NULL_TREE;
14563 decl = build_decl (loc, CONST_DECL, name, type);
14565 DECL_CONTEXT (decl) = enumtype;
14566 TREE_CONSTANT (decl) = 1;
14567 TREE_READONLY (decl) = 1;
14568 DECL_INITIAL (decl) = value;
14570 if (attributes)
14571 cplus_decl_attributes (&decl, attributes, 0);
14573 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14575 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14576 on the TYPE_FIELDS list for `S'. (That's so that you can say
14577 things like `S::i' later.) */
14579 /* The enumerator may be getting declared outside of its enclosing
14580 class, like so:
14582 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14584 For which case we need to make sure that the access of `S::i'
14585 matches the access of `S::E'. */
14586 tree saved_cas = current_access_specifier;
14587 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14588 current_access_specifier = access_private_node;
14589 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14590 current_access_specifier = access_protected_node;
14591 else
14592 current_access_specifier = access_public_node;
14594 finish_member_declaration (decl);
14596 current_access_specifier = saved_cas;
14598 else
14599 pushdecl (decl);
14601 /* Add this enumeration constant to the list for this type. */
14602 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14605 /* Look for an enumerator with the given NAME within the enumeration
14606 type ENUMTYPE. This routine is used primarily for qualified name
14607 lookup into an enumerator in C++0x, e.g.,
14609 enum class Color { Red, Green, Blue };
14611 Color color = Color::Red;
14613 Returns the value corresponding to the enumerator, or
14614 NULL_TREE if no such enumerator was found. */
14615 tree
14616 lookup_enumerator (tree enumtype, tree name)
14618 tree e;
14619 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14621 e = purpose_member (name, TYPE_VALUES (enumtype));
14622 return e? TREE_VALUE (e) : NULL_TREE;
14626 /* We're defining DECL. Make sure that its type is OK. */
14628 static void
14629 check_function_type (tree decl, tree current_function_parms)
14631 tree fntype = TREE_TYPE (decl);
14632 tree return_type = complete_type (TREE_TYPE (fntype));
14634 /* In a function definition, arg types must be complete. */
14635 require_complete_types_for_parms (current_function_parms);
14637 if (dependent_type_p (return_type)
14638 || type_uses_auto (return_type))
14639 return;
14640 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14642 tree args = TYPE_ARG_TYPES (fntype);
14644 error ("return type %q#T is incomplete", return_type);
14646 /* Make it return void instead. */
14647 if (TREE_CODE (fntype) == METHOD_TYPE)
14648 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14649 void_type_node,
14650 TREE_CHAIN (args));
14651 else
14652 fntype = build_function_type (void_type_node, args);
14653 fntype
14654 = build_exception_variant (fntype,
14655 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
14656 fntype = (cp_build_type_attribute_variant
14657 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14658 TREE_TYPE (decl) = fntype;
14660 else
14662 abstract_virtuals_error (decl, TREE_TYPE (fntype));
14663 maybe_warn_parm_abi (TREE_TYPE (fntype),
14664 DECL_SOURCE_LOCATION (decl));
14668 /* True iff FN is an implicitly-defined default constructor. */
14670 static bool
14671 implicit_default_ctor_p (tree fn)
14673 return (DECL_CONSTRUCTOR_P (fn)
14674 && !user_provided_p (fn)
14675 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14678 /* Clobber the contents of *this to let the back end know that the object
14679 storage is dead when we enter the constructor or leave the destructor. */
14681 static tree
14682 build_clobber_this ()
14684 /* Clobbering an empty base is pointless, and harmful if its one byte
14685 TYPE_SIZE overlays real data. */
14686 if (is_empty_class (current_class_type))
14687 return void_node;
14689 /* If we have virtual bases, clobber the whole object, but only if we're in
14690 charge. If we don't have virtual bases, clobber the as-base type so we
14691 don't mess with tail padding. */
14692 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14694 tree ctype = current_class_type;
14695 if (!vbases)
14696 ctype = CLASSTYPE_AS_BASE (ctype);
14698 tree clobber = build_constructor (ctype, NULL);
14699 TREE_THIS_VOLATILE (clobber) = true;
14701 tree thisref = current_class_ref;
14702 if (ctype != current_class_type)
14704 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14705 thisref = convert_from_reference (thisref);
14708 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14709 if (vbases)
14710 exprstmt = build_if_in_charge (exprstmt);
14712 return exprstmt;
14715 /* Create the FUNCTION_DECL for a function definition.
14716 DECLSPECS and DECLARATOR are the parts of the declaration;
14717 they describe the function's name and the type it returns,
14718 but twisted together in a fashion that parallels the syntax of C.
14720 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14721 DECLARATOR is really the DECL for the function we are about to
14722 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14723 indicating that the function is an inline defined in-class.
14725 This function creates a binding context for the function body
14726 as well as setting up the FUNCTION_DECL in current_function_decl.
14728 For C++, we must first check whether that datum makes any sense.
14729 For example, "class A local_a(1,2);" means that variable local_a
14730 is an aggregate of type A, which should have a constructor
14731 applied to it with the argument list [1, 2].
14733 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14734 or may be a BLOCK if the function has been defined previously
14735 in this translation unit. On exit, DECL_INITIAL (decl1) will be
14736 error_mark_node if the function has never been defined, or
14737 a BLOCK if the function has been defined somewhere. */
14739 bool
14740 start_preparsed_function (tree decl1, tree attrs, int flags)
14742 tree ctype = NULL_TREE;
14743 tree fntype;
14744 tree restype;
14745 int doing_friend = 0;
14746 cp_binding_level *bl;
14747 tree current_function_parms;
14748 struct c_fileinfo *finfo
14749 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14750 bool honor_interface;
14752 /* Sanity check. */
14753 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14754 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14756 fntype = TREE_TYPE (decl1);
14757 if (TREE_CODE (fntype) == METHOD_TYPE)
14758 ctype = TYPE_METHOD_BASETYPE (fntype);
14760 /* ISO C++ 11.4/5. A friend function defined in a class is in
14761 the (lexical) scope of the class in which it is defined. */
14762 if (!ctype && DECL_FRIEND_P (decl1))
14764 ctype = DECL_FRIEND_CONTEXT (decl1);
14766 /* CTYPE could be null here if we're dealing with a template;
14767 for example, `inline friend float foo()' inside a template
14768 will have no CTYPE set. */
14769 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14770 ctype = NULL_TREE;
14771 else
14772 doing_friend = 1;
14775 if (DECL_DECLARED_INLINE_P (decl1)
14776 && lookup_attribute ("noinline", attrs))
14777 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14778 "inline function %qD given attribute noinline", decl1);
14780 /* Handle gnu_inline attribute. */
14781 if (GNU_INLINE_P (decl1))
14783 DECL_EXTERNAL (decl1) = 1;
14784 DECL_NOT_REALLY_EXTERN (decl1) = 0;
14785 DECL_INTERFACE_KNOWN (decl1) = 1;
14786 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14789 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
14790 /* This is a constructor, we must ensure that any default args
14791 introduced by this definition are propagated to the clones
14792 now. The clones are used directly in overload resolution. */
14793 adjust_clone_args (decl1);
14795 /* Sometimes we don't notice that a function is a static member, and
14796 build a METHOD_TYPE for it. Fix that up now. */
14797 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
14798 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
14800 /* Set up current_class_type, and enter the scope of the class, if
14801 appropriate. */
14802 if (ctype)
14803 push_nested_class (ctype);
14804 else if (DECL_STATIC_FUNCTION_P (decl1))
14805 push_nested_class (DECL_CONTEXT (decl1));
14807 /* Now that we have entered the scope of the class, we must restore
14808 the bindings for any template parameters surrounding DECL1, if it
14809 is an inline member template. (Order is important; consider the
14810 case where a template parameter has the same name as a field of
14811 the class.) It is not until after this point that
14812 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14813 if (flags & SF_INCLASS_INLINE)
14814 maybe_begin_member_template_processing (decl1);
14816 /* Effective C++ rule 15. */
14817 if (warn_ecpp
14818 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
14819 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
14820 && VOID_TYPE_P (TREE_TYPE (fntype)))
14821 warning (OPT_Weffc__,
14822 "%<operator=%> should return a reference to %<*this%>");
14824 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14825 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14826 if (!DECL_INITIAL (decl1))
14827 DECL_INITIAL (decl1) = error_mark_node;
14829 /* This function exists in static storage.
14830 (This does not mean `static' in the C sense!) */
14831 TREE_STATIC (decl1) = 1;
14833 /* We must call push_template_decl after current_class_type is set
14834 up. (If we are processing inline definitions after exiting a
14835 class scope, current_class_type will be NULL_TREE until set above
14836 by push_nested_class.) */
14837 if (processing_template_decl)
14839 tree newdecl1 = push_template_decl (decl1);
14840 if (newdecl1 == error_mark_node)
14842 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
14843 pop_nested_class ();
14844 return false;
14846 decl1 = newdecl1;
14849 /* Make sure the parameter and return types are reasonable. When
14850 you declare a function, these types can be incomplete, but they
14851 must be complete when you define the function. */
14852 check_function_type (decl1, DECL_ARGUMENTS (decl1));
14854 /* Build the return declaration for the function. */
14855 restype = TREE_TYPE (fntype);
14857 if (DECL_RESULT (decl1) == NULL_TREE)
14859 tree resdecl;
14861 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
14862 DECL_ARTIFICIAL (resdecl) = 1;
14863 DECL_IGNORED_P (resdecl) = 1;
14864 DECL_RESULT (decl1) = resdecl;
14866 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
14869 /* Record the decl so that the function name is defined.
14870 If we already have a decl for this name, and it is a FUNCTION_DECL,
14871 use the old decl. */
14872 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
14874 /* A specialization is not used to guide overload resolution. */
14875 if (!DECL_FUNCTION_MEMBER_P (decl1)
14876 && !(DECL_USE_TEMPLATE (decl1) &&
14877 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
14879 tree olddecl = pushdecl (decl1);
14881 if (olddecl == error_mark_node)
14882 /* If something went wrong when registering the declaration,
14883 use DECL1; we have to have a FUNCTION_DECL to use when
14884 parsing the body of the function. */
14886 else
14888 /* Otherwise, OLDDECL is either a previous declaration
14889 of the same function or DECL1 itself. */
14891 if (warn_missing_declarations
14892 && olddecl == decl1
14893 && !DECL_MAIN_P (decl1)
14894 && TREE_PUBLIC (decl1)
14895 && !DECL_DECLARED_INLINE_P (decl1))
14897 tree context;
14899 /* Check whether DECL1 is in an anonymous
14900 namespace. */
14901 for (context = DECL_CONTEXT (decl1);
14902 context;
14903 context = DECL_CONTEXT (context))
14905 if (TREE_CODE (context) == NAMESPACE_DECL
14906 && DECL_NAME (context) == NULL_TREE)
14907 break;
14910 if (context == NULL)
14911 warning_at (DECL_SOURCE_LOCATION (decl1),
14912 OPT_Wmissing_declarations,
14913 "no previous declaration for %qD", decl1);
14916 decl1 = olddecl;
14919 else
14921 /* We need to set the DECL_CONTEXT. */
14922 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
14923 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
14925 fntype = TREE_TYPE (decl1);
14926 restype = TREE_TYPE (fntype);
14928 /* If #pragma weak applies, mark the decl appropriately now.
14929 The pragma only applies to global functions. Because
14930 determining whether or not the #pragma applies involves
14931 computing the mangled name for the declaration, we cannot
14932 apply the pragma until after we have merged this declaration
14933 with any previous declarations; if the original declaration
14934 has a linkage specification, that specification applies to
14935 the definition as well, and may affect the mangled name. */
14936 if (DECL_FILE_SCOPE_P (decl1))
14937 maybe_apply_pragma_weak (decl1);
14940 /* We are now in the scope of the function being defined. */
14941 current_function_decl = decl1;
14943 /* Save the parm names or decls from this function's declarator
14944 where store_parm_decls will find them. */
14945 current_function_parms = DECL_ARGUMENTS (decl1);
14947 /* Let the user know we're compiling this function. */
14948 announce_function (decl1);
14950 gcc_assert (DECL_INITIAL (decl1));
14952 /* This function may already have been parsed, in which case just
14953 return; our caller will skip over the body without parsing. */
14954 if (DECL_INITIAL (decl1) != error_mark_node)
14955 return true;
14957 /* Initialize RTL machinery. We cannot do this until
14958 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
14959 even when processing a template; this is how we get
14960 CFUN set up, and our per-function variables initialized.
14961 FIXME factor out the non-RTL stuff. */
14962 bl = current_binding_level;
14963 allocate_struct_function (decl1, processing_template_decl);
14965 /* Initialize the language data structures. Whenever we start
14966 a new function, we destroy temporaries in the usual way. */
14967 cfun->language = ggc_cleared_alloc<language_function> ();
14968 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
14969 current_binding_level = bl;
14971 if (!processing_template_decl && type_uses_auto (restype))
14973 FNDECL_USED_AUTO (decl1) = true;
14974 current_function_auto_return_pattern = restype;
14977 /* Start the statement-tree, start the tree now. */
14978 DECL_SAVED_TREE (decl1) = push_stmt_list ();
14980 /* If we are (erroneously) defining a function that we have already
14981 defined before, wipe out what we knew before. */
14982 if (!DECL_PENDING_INLINE_P (decl1))
14983 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
14985 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
14987 /* We know that this was set up by `grokclassfn'. We do not
14988 wait until `store_parm_decls', since evil parse errors may
14989 never get us to that point. Here we keep the consistency
14990 between `current_class_type' and `current_class_ptr'. */
14991 tree t = DECL_ARGUMENTS (decl1);
14993 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
14994 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
14996 cp_function_chain->x_current_class_ref
14997 = cp_build_fold_indirect_ref (t);
14998 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
14999 cp_function_chain->x_current_class_ptr = t;
15001 /* Constructors and destructors need to know whether they're "in
15002 charge" of initializing virtual base classes. */
15003 t = DECL_CHAIN (t);
15004 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15006 current_in_charge_parm = t;
15007 t = DECL_CHAIN (t);
15009 if (DECL_HAS_VTT_PARM_P (decl1))
15011 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15012 current_vtt_parm = t;
15016 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15017 /* Implicitly-defined methods (like the
15018 destructor for a class in which no destructor
15019 is explicitly declared) must not be defined
15020 until their definition is needed. So, we
15021 ignore interface specifications for
15022 compiler-generated functions. */
15023 && !DECL_ARTIFICIAL (decl1));
15025 if (processing_template_decl)
15026 /* Don't mess with interface flags. */;
15027 else if (DECL_INTERFACE_KNOWN (decl1))
15029 tree ctx = decl_function_context (decl1);
15031 if (DECL_NOT_REALLY_EXTERN (decl1))
15032 DECL_EXTERNAL (decl1) = 0;
15034 if (ctx != NULL_TREE && vague_linkage_p (ctx))
15035 /* This is a function in a local class in an extern inline
15036 or template function. */
15037 comdat_linkage (decl1);
15039 /* If this function belongs to an interface, it is public.
15040 If it belongs to someone else's interface, it is also external.
15041 This only affects inlines and template instantiations. */
15042 else if (!finfo->interface_unknown && honor_interface)
15044 if (DECL_DECLARED_INLINE_P (decl1)
15045 || DECL_TEMPLATE_INSTANTIATION (decl1))
15047 DECL_EXTERNAL (decl1)
15048 = (finfo->interface_only
15049 || (DECL_DECLARED_INLINE_P (decl1)
15050 && ! flag_implement_inlines
15051 && !DECL_VINDEX (decl1)));
15053 /* For WIN32 we also want to put these in linkonce sections. */
15054 maybe_make_one_only (decl1);
15056 else
15057 DECL_EXTERNAL (decl1) = 0;
15058 DECL_INTERFACE_KNOWN (decl1) = 1;
15059 /* If this function is in an interface implemented in this file,
15060 make sure that the back end knows to emit this function
15061 here. */
15062 if (!DECL_EXTERNAL (decl1))
15063 mark_needed (decl1);
15065 else if (finfo->interface_unknown && finfo->interface_only
15066 && honor_interface)
15068 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15069 interface, we will have both finfo->interface_unknown and
15070 finfo->interface_only set. In that case, we don't want to
15071 use the normal heuristics because someone will supply a
15072 #pragma implementation elsewhere, and deducing it here would
15073 produce a conflict. */
15074 comdat_linkage (decl1);
15075 DECL_EXTERNAL (decl1) = 0;
15076 DECL_INTERFACE_KNOWN (decl1) = 1;
15077 DECL_DEFER_OUTPUT (decl1) = 1;
15079 else
15081 /* This is a definition, not a reference.
15082 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15083 if (!GNU_INLINE_P (decl1))
15084 DECL_EXTERNAL (decl1) = 0;
15086 if ((DECL_DECLARED_INLINE_P (decl1)
15087 || DECL_TEMPLATE_INSTANTIATION (decl1))
15088 && ! DECL_INTERFACE_KNOWN (decl1))
15089 DECL_DEFER_OUTPUT (decl1) = 1;
15090 else
15091 DECL_INTERFACE_KNOWN (decl1) = 1;
15094 /* Determine the ELF visibility attribute for the function. We must not
15095 do this before calling "pushdecl", as we must allow "duplicate_decls"
15096 to merge any attributes appropriately. We also need to wait until
15097 linkage is set. */
15098 if (!DECL_CLONED_FUNCTION_P (decl1))
15099 determine_visibility (decl1);
15101 if (!processing_template_decl)
15102 maybe_instantiate_noexcept (decl1);
15104 begin_scope (sk_function_parms, decl1);
15106 ++function_depth;
15108 if (DECL_DESTRUCTOR_P (decl1)
15109 || (DECL_CONSTRUCTOR_P (decl1)
15110 && targetm.cxx.cdtor_returns_this ()))
15112 cdtor_label = create_artificial_label (input_location);
15113 LABEL_DECL_CDTOR (cdtor_label) = true;
15116 start_fname_decls ();
15118 store_parm_decls (current_function_parms);
15120 if (!processing_template_decl
15121 && (flag_lifetime_dse > 1)
15122 && DECL_CONSTRUCTOR_P (decl1)
15123 && !DECL_CLONED_FUNCTION_P (decl1)
15124 /* Clobbering an empty base is harmful if it overlays real data. */
15125 && !is_empty_class (current_class_type)
15126 /* We can't clobber safely for an implicitly-defined default constructor
15127 because part of the initialization might happen before we enter the
15128 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15129 && !implicit_default_ctor_p (decl1))
15130 finish_expr_stmt (build_clobber_this ());
15132 if (!processing_template_decl
15133 && DECL_CONSTRUCTOR_P (decl1)
15134 && sanitize_flags_p (SANITIZE_VPTR)
15135 && !DECL_CLONED_FUNCTION_P (decl1)
15136 && !implicit_default_ctor_p (decl1))
15137 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15139 start_lambda_scope (decl1);
15141 return true;
15145 /* Like start_preparsed_function, except that instead of a
15146 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15148 Returns true on success. If the DECLARATOR is not suitable
15149 for a function, we return false, which tells the parser to
15150 skip the entire function. */
15152 bool
15153 start_function (cp_decl_specifier_seq *declspecs,
15154 const cp_declarator *declarator,
15155 tree attrs)
15157 tree decl1;
15159 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15160 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15161 if (decl1 == error_mark_node)
15162 return false;
15163 /* If the declarator is not suitable for a function definition,
15164 cause a syntax error. */
15165 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15167 error ("invalid function declaration");
15168 return false;
15171 if (DECL_MAIN_P (decl1))
15172 /* main must return int. grokfndecl should have corrected it
15173 (and issued a diagnostic) if the user got it wrong. */
15174 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15175 integer_type_node));
15177 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15180 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15181 FN. */
15183 static bool
15184 use_eh_spec_block (tree fn)
15186 return (flag_exceptions && flag_enforce_eh_specs
15187 && !processing_template_decl
15188 && !type_throw_all_p (TREE_TYPE (fn))
15189 /* We insert the EH_SPEC_BLOCK only in the original
15190 function; then, it is copied automatically to the
15191 clones. */
15192 && !DECL_CLONED_FUNCTION_P (fn)
15193 /* Implicitly-generated constructors and destructors have
15194 exception specifications. However, those specifications
15195 are the union of the possible exceptions specified by the
15196 constructors/destructors for bases and members, so no
15197 unallowed exception will ever reach this function. By
15198 not creating the EH_SPEC_BLOCK we save a little memory,
15199 and we avoid spurious warnings about unreachable
15200 code. */
15201 && !DECL_DEFAULTED_FN (fn));
15204 /* Store the parameter declarations into the current function declaration.
15205 This is called after parsing the parameter declarations, before
15206 digesting the body of the function.
15208 Also install to binding contour return value identifier, if any. */
15210 static void
15211 store_parm_decls (tree current_function_parms)
15213 tree fndecl = current_function_decl;
15214 tree parm;
15216 /* This is a chain of any other decls that came in among the parm
15217 declarations. If a parm is declared with enum {foo, bar} x;
15218 then CONST_DECLs for foo and bar are put here. */
15219 tree nonparms = NULL_TREE;
15221 if (current_function_parms)
15223 /* This case is when the function was defined with an ANSI prototype.
15224 The parms already have decls, so we need not do anything here
15225 except record them as in effect
15226 and complain if any redundant old-style parm decls were written. */
15228 tree specparms = current_function_parms;
15229 tree next;
15231 /* Must clear this because it might contain TYPE_DECLs declared
15232 at class level. */
15233 current_binding_level->names = NULL;
15235 /* If we're doing semantic analysis, then we'll call pushdecl
15236 for each of these. We must do them in reverse order so that
15237 they end in the correct forward order. */
15238 specparms = nreverse (specparms);
15240 for (parm = specparms; parm; parm = next)
15242 next = DECL_CHAIN (parm);
15243 if (TREE_CODE (parm) == PARM_DECL)
15244 pushdecl (parm);
15245 else
15247 /* If we find an enum constant or a type tag,
15248 put it aside for the moment. */
15249 TREE_CHAIN (parm) = NULL_TREE;
15250 nonparms = chainon (nonparms, parm);
15254 /* Get the decls in their original chain order and record in the
15255 function. This is all and only the PARM_DECLs that were
15256 pushed into scope by the loop above. */
15257 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15259 else
15260 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15262 /* Now store the final chain of decls for the arguments
15263 as the decl-chain of the current lexical scope.
15264 Put the enumerators in as well, at the front so that
15265 DECL_ARGUMENTS is not modified. */
15266 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15268 if (use_eh_spec_block (current_function_decl))
15269 current_eh_spec_block = begin_eh_spec_block ();
15273 /* We have finished doing semantic analysis on DECL, but have not yet
15274 generated RTL for its body. Save away our current state, so that
15275 when we want to generate RTL later we know what to do. */
15277 static void
15278 save_function_data (tree decl)
15280 struct language_function *f;
15282 /* Save the language-specific per-function data so that we can
15283 get it back when we really expand this function. */
15284 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15286 /* Make a copy. */
15287 f = ggc_alloc<language_function> ();
15288 memcpy (f, cp_function_chain, sizeof (struct language_function));
15289 DECL_SAVED_FUNCTION_DATA (decl) = f;
15291 /* Clear out the bits we don't need. */
15292 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15293 f->bindings = NULL;
15294 f->x_local_names = NULL;
15295 f->base.local_typedefs = NULL;
15299 /* Set the return value of the constructor (if present). */
15301 static void
15302 finish_constructor_body (void)
15304 tree val;
15305 tree exprstmt;
15307 if (targetm.cxx.cdtor_returns_this ())
15309 /* Any return from a constructor will end up here. */
15310 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15312 val = DECL_ARGUMENTS (current_function_decl);
15313 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15314 DECL_RESULT (current_function_decl), val);
15315 /* Return the address of the object. */
15316 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15317 add_stmt (exprstmt);
15321 /* Do all the processing for the beginning of a destructor; set up the
15322 vtable pointers and cleanups for bases and members. */
15324 static void
15325 begin_destructor_body (void)
15327 tree compound_stmt;
15329 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15330 issued an error message. We still want to try to process the
15331 body of the function, but initialize_vtbl_ptrs will crash if
15332 TYPE_BINFO is NULL. */
15333 if (COMPLETE_TYPE_P (current_class_type))
15335 compound_stmt = begin_compound_stmt (0);
15336 /* Make all virtual function table pointers in non-virtual base
15337 classes point to CURRENT_CLASS_TYPE's virtual function
15338 tables. */
15339 initialize_vtbl_ptrs (current_class_ptr);
15340 finish_compound_stmt (compound_stmt);
15342 if (flag_lifetime_dse
15343 /* Clobbering an empty base is harmful if it overlays real data. */
15344 && !is_empty_class (current_class_type))
15346 if (sanitize_flags_p (SANITIZE_VPTR)
15347 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15348 && TYPE_CONTAINS_VPTR_P (current_class_type))
15350 tree binfo = TYPE_BINFO (current_class_type);
15351 tree ref
15352 = cp_build_fold_indirect_ref (current_class_ptr);
15354 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15355 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15356 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15357 NOP_EXPR, vtbl,
15358 tf_warning_or_error);
15359 finish_decl_cleanup (NULL_TREE, stmt);
15361 else
15362 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15365 /* And insert cleanups for our bases and members so that they
15366 will be properly destroyed if we throw. */
15367 push_base_cleanups ();
15371 /* At the end of every destructor we generate code to delete the object if
15372 necessary. Do that now. */
15374 static void
15375 finish_destructor_body (void)
15377 tree exprstmt;
15379 /* Any return from a destructor will end up here; that way all base
15380 and member cleanups will be run when the function returns. */
15381 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15383 if (targetm.cxx.cdtor_returns_this ())
15385 tree val;
15387 val = DECL_ARGUMENTS (current_function_decl);
15388 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15389 DECL_RESULT (current_function_decl), val);
15390 /* Return the address of the object. */
15391 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15392 add_stmt (exprstmt);
15396 /* Do the necessary processing for the beginning of a function body, which
15397 in this case includes member-initializers, but not the catch clauses of
15398 a function-try-block. Currently, this means opening a binding level
15399 for the member-initializers (in a ctor), member cleanups (in a dtor),
15400 and capture proxies (in a lambda operator()). */
15402 tree
15403 begin_function_body (void)
15405 tree stmt;
15407 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15408 return NULL_TREE;
15410 if (processing_template_decl)
15411 /* Do nothing now. */;
15412 else
15413 /* Always keep the BLOCK node associated with the outermost pair of
15414 curly braces of a function. These are needed for correct
15415 operation of dwarfout.c. */
15416 keep_next_level (true);
15418 stmt = begin_compound_stmt (BCS_FN_BODY);
15420 if (processing_template_decl)
15421 /* Do nothing now. */;
15422 else if (DECL_DESTRUCTOR_P (current_function_decl))
15423 begin_destructor_body ();
15425 return stmt;
15428 /* Do the processing for the end of a function body. Currently, this means
15429 closing out the cleanups for fully-constructed bases and members, and in
15430 the case of the destructor, deleting the object if desired. Again, this
15431 is only meaningful for [cd]tors, since they are the only functions where
15432 there is a significant distinction between the main body and any
15433 function catch clauses. Handling, say, main() return semantics here
15434 would be wrong, as flowing off the end of a function catch clause for
15435 main() would also need to return 0. */
15437 void
15438 finish_function_body (tree compstmt)
15440 if (compstmt == NULL_TREE)
15441 return;
15443 /* Close the block. */
15444 finish_compound_stmt (compstmt);
15446 if (processing_template_decl)
15447 /* Do nothing now. */;
15448 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15449 finish_constructor_body ();
15450 else if (DECL_DESTRUCTOR_P (current_function_decl))
15451 finish_destructor_body ();
15454 /* Given a function, returns the BLOCK corresponding to the outermost level
15455 of curly braces, skipping the artificial block created for constructor
15456 initializers. */
15458 tree
15459 outer_curly_brace_block (tree fndecl)
15461 tree block = DECL_INITIAL (fndecl);
15462 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15463 return block;
15464 block = BLOCK_SUBBLOCKS (block);
15465 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15466 return block;
15467 block = BLOCK_SUBBLOCKS (block);
15468 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15469 return block;
15472 /* If FNDECL is a class's key method, add the class to the list of
15473 keyed classes that should be emitted. */
15475 static void
15476 record_key_method_defined (tree fndecl)
15478 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15479 && DECL_VIRTUAL_P (fndecl)
15480 && !processing_template_decl)
15482 tree fnclass = DECL_CONTEXT (fndecl);
15483 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15484 vec_safe_push (keyed_classes, fnclass);
15488 /* Subroutine of finish_function.
15489 Save the body of constexpr functions for possible
15490 future compile time evaluation. */
15492 static void
15493 maybe_save_function_definition (tree fun)
15495 if (!processing_template_decl
15496 && DECL_DECLARED_CONSTEXPR_P (fun)
15497 && !cp_function_chain->invalid_constexpr
15498 && !DECL_CLONED_FUNCTION_P (fun))
15499 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15502 /* Finish up a function declaration and compile that function
15503 all the way to assembler language output. The free the storage
15504 for the function definition. INLINE_P is TRUE if we just
15505 finished processing the body of an in-class inline function
15506 definition. (This processing will have taken place after the
15507 class definition is complete.) */
15509 tree
15510 finish_function (bool inline_p)
15512 tree fndecl = current_function_decl;
15513 tree fntype, ctype = NULL_TREE;
15515 /* When we get some parse errors, we can end up without a
15516 current_function_decl, so cope. */
15517 if (fndecl == NULL_TREE)
15518 return error_mark_node;
15520 finish_lambda_scope ();
15522 if (c_dialect_objc ())
15523 objc_finish_function ();
15525 record_key_method_defined (fndecl);
15527 fntype = TREE_TYPE (fndecl);
15529 /* TREE_READONLY (fndecl) = 1;
15530 This caused &foo to be of type ptr-to-const-function
15531 which then got a warning when stored in a ptr-to-function variable. */
15533 gcc_assert (building_stmt_list_p ());
15534 /* The current function is being defined, so its DECL_INITIAL should
15535 be set, and unless there's a multiple definition, it should be
15536 error_mark_node. */
15537 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15539 /* For a cloned function, we've already got all the code we need;
15540 there's no need to add any extra bits. */
15541 if (!DECL_CLONED_FUNCTION_P (fndecl))
15543 /* Make it so that `main' always returns 0 by default. */
15544 if (DECL_MAIN_P (current_function_decl))
15545 finish_return_stmt (integer_zero_node);
15547 if (use_eh_spec_block (current_function_decl))
15548 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15549 (TREE_TYPE (current_function_decl)),
15550 current_eh_spec_block);
15553 /* If we're saving up tree structure, tie off the function now. */
15554 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15556 finish_fname_decls ();
15558 /* If this function can't throw any exceptions, remember that. */
15559 if (!processing_template_decl
15560 && !cp_function_chain->can_throw
15561 && !flag_non_call_exceptions
15562 && !decl_replaceable_p (fndecl))
15563 TREE_NOTHROW (fndecl) = 1;
15565 /* This must come after expand_function_end because cleanups might
15566 have declarations (from inline functions) that need to go into
15567 this function's blocks. */
15569 /* If the current binding level isn't the outermost binding level
15570 for this function, either there is a bug, or we have experienced
15571 syntax errors and the statement tree is malformed. */
15572 if (current_binding_level->kind != sk_function_parms)
15574 /* Make sure we have already experienced errors. */
15575 gcc_assert (errorcount);
15577 /* Throw away the broken statement tree and extra binding
15578 levels. */
15579 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15581 while (current_binding_level->kind != sk_function_parms)
15583 if (current_binding_level->kind == sk_class)
15584 pop_nested_class ();
15585 else
15586 poplevel (0, 0, 0);
15589 poplevel (1, 0, 1);
15591 /* Statements should always be full-expressions at the outermost set
15592 of curly braces for a function. */
15593 gcc_assert (stmts_are_full_exprs_p ());
15595 /* If there are no return statements in a function with auto return type,
15596 the return type is void. But if the declared type is something like
15597 auto*, this is an error. */
15598 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15599 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15601 if (is_auto (current_function_auto_return_pattern))
15603 apply_deduced_return_type (fndecl, void_type_node);
15604 fntype = TREE_TYPE (fndecl);
15606 else if (!current_function_returns_value
15607 && !current_function_returns_null)
15609 error ("no return statements in function returning %qT",
15610 current_function_auto_return_pattern);
15611 inform (input_location, "only plain %<auto%> return type can be "
15612 "deduced to %<void%>");
15616 // If this is a concept, check that the definition is reasonable.
15617 if (DECL_DECLARED_CONCEPT_P (fndecl))
15618 check_function_concept (fndecl);
15620 /* Lambda closure members are implicitly constexpr if possible. */
15621 if (cxx_dialect >= cxx17
15622 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15623 DECL_DECLARED_CONSTEXPR_P (fndecl)
15624 = ((processing_template_decl
15625 || is_valid_constexpr_fn (fndecl, /*complain*/false))
15626 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15628 /* Save constexpr function body before it gets munged by
15629 the NRV transformation. */
15630 maybe_save_function_definition (fndecl);
15632 /* Invoke the pre-genericize plugin before we start munging things. */
15633 if (!processing_template_decl)
15634 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15636 /* Perform delayed folding before NRV transformation. */
15637 if (!processing_template_decl)
15638 cp_fold_function (fndecl);
15640 /* Set up the named return value optimization, if we can. Candidate
15641 variables are selected in check_return_expr. */
15642 if (current_function_return_value)
15644 tree r = current_function_return_value;
15645 tree outer;
15647 if (r != error_mark_node
15648 /* This is only worth doing for fns that return in memory--and
15649 simpler, since we don't have to worry about promoted modes. */
15650 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15651 /* Only allow this for variables declared in the outer scope of
15652 the function so we know that their lifetime always ends with a
15653 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15654 we were to do this optimization in tree-ssa. */
15655 && (outer = outer_curly_brace_block (fndecl))
15656 && chain_member (r, BLOCK_VARS (outer)))
15657 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15659 current_function_return_value = NULL_TREE;
15662 /* Remember that we were in class scope. */
15663 if (current_class_name)
15664 ctype = current_class_type;
15666 /* Must mark the RESULT_DECL as being in this function. */
15667 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15669 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15670 to the FUNCTION_DECL node itself. */
15671 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15673 /* Save away current state, if appropriate. */
15674 if (!processing_template_decl)
15675 save_function_data (fndecl);
15677 /* Complain if there's just no return statement. */
15678 if (warn_return_type
15679 && !VOID_TYPE_P (TREE_TYPE (fntype))
15680 && !dependent_type_p (TREE_TYPE (fntype))
15681 && !current_function_returns_value && !current_function_returns_null
15682 /* Don't complain if we abort or throw. */
15683 && !current_function_returns_abnormally
15684 /* Don't complain if there's an infinite loop. */
15685 && !current_function_infinite_loop
15686 /* Don't complain if we are declared noreturn. */
15687 && !TREE_THIS_VOLATILE (fndecl)
15688 && !DECL_NAME (DECL_RESULT (fndecl))
15689 && !TREE_NO_WARNING (fndecl)
15690 /* Structor return values (if any) are set by the compiler. */
15691 && !DECL_CONSTRUCTOR_P (fndecl)
15692 && !DECL_DESTRUCTOR_P (fndecl)
15693 && targetm.warn_func_return (fndecl))
15695 warning (OPT_Wreturn_type,
15696 "no return statement in function returning non-void");
15697 TREE_NO_WARNING (fndecl) = 1;
15700 /* Store the end of the function, so that we get good line number
15701 info for the epilogue. */
15702 cfun->function_end_locus = input_location;
15704 /* Complain about parameters that are only set, but never otherwise used. */
15705 if (warn_unused_but_set_parameter
15706 && !processing_template_decl
15707 && errorcount == unused_but_set_errorcount
15708 && !DECL_CLONED_FUNCTION_P (fndecl))
15710 tree decl;
15712 for (decl = DECL_ARGUMENTS (fndecl);
15713 decl;
15714 decl = DECL_CHAIN (decl))
15715 if (TREE_USED (decl)
15716 && TREE_CODE (decl) == PARM_DECL
15717 && !DECL_READ_P (decl)
15718 && DECL_NAME (decl)
15719 && !DECL_ARTIFICIAL (decl)
15720 && !TREE_NO_WARNING (decl)
15721 && !DECL_IN_SYSTEM_HEADER (decl)
15722 && TREE_TYPE (decl) != error_mark_node
15723 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
15724 && (!CLASS_TYPE_P (TREE_TYPE (decl))
15725 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15726 warning_at (DECL_SOURCE_LOCATION (decl),
15727 OPT_Wunused_but_set_parameter,
15728 "parameter %qD set but not used", decl);
15729 unused_but_set_errorcount = errorcount;
15732 /* Complain about locally defined typedefs that are not used in this
15733 function. */
15734 maybe_warn_unused_local_typedefs ();
15736 /* Possibly warn about unused parameters. */
15737 if (warn_unused_parameter
15738 && !processing_template_decl
15739 && !DECL_CLONED_FUNCTION_P (fndecl))
15740 do_warn_unused_parameter (fndecl);
15742 /* Genericize before inlining. */
15743 if (!processing_template_decl)
15745 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15746 cp_genericize (fndecl);
15747 /* Clear out the bits we don't need. */
15748 f->x_current_class_ptr = NULL;
15749 f->x_current_class_ref = NULL;
15750 f->x_eh_spec_block = NULL;
15751 f->x_in_charge_parm = NULL;
15752 f->x_vtt_parm = NULL;
15753 f->x_return_value = NULL;
15754 f->bindings = NULL;
15755 f->extern_decl_map = NULL;
15756 f->infinite_loops = NULL;
15758 /* Clear out the bits we don't need. */
15759 local_names = NULL;
15761 /* We're leaving the context of this function, so zap cfun. It's still in
15762 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
15763 set_cfun (NULL);
15764 current_function_decl = NULL;
15766 /* If this is an in-class inline definition, we may have to pop the
15767 bindings for the template parameters that we added in
15768 maybe_begin_member_template_processing when start_function was
15769 called. */
15770 if (inline_p)
15771 maybe_end_member_template_processing ();
15773 /* Leave the scope of the class. */
15774 if (ctype)
15775 pop_nested_class ();
15777 --function_depth;
15779 /* Clean up. */
15780 current_function_decl = NULL_TREE;
15782 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
15783 return fndecl;
15786 /* Create the FUNCTION_DECL for a function definition.
15787 DECLSPECS and DECLARATOR are the parts of the declaration;
15788 they describe the return type and the name of the function,
15789 but twisted together in a fashion that parallels the syntax of C.
15791 This function creates a binding context for the function body
15792 as well as setting up the FUNCTION_DECL in current_function_decl.
15794 Returns a FUNCTION_DECL on success.
15796 If the DECLARATOR is not suitable for a function (it defines a datum
15797 instead), we return 0, which tells yyparse to report a parse error.
15799 May return void_type_node indicating that this method is actually
15800 a friend. See grokfield for more details.
15802 Came here with a `.pushlevel' .
15804 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15805 CHANGES TO CODE IN `grokfield'. */
15807 tree
15808 grokmethod (cp_decl_specifier_seq *declspecs,
15809 const cp_declarator *declarator, tree attrlist)
15811 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
15812 &attrlist);
15814 if (fndecl == error_mark_node)
15815 return error_mark_node;
15817 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
15819 error ("invalid member function declaration");
15820 return error_mark_node;
15823 if (attrlist)
15824 cplus_decl_attributes (&fndecl, attrlist, 0);
15826 /* Pass friends other than inline friend functions back. */
15827 if (fndecl == void_type_node)
15828 return fndecl;
15830 if (DECL_IN_AGGR_P (fndecl))
15832 if (DECL_CLASS_SCOPE_P (fndecl))
15833 error ("%qD is already defined in class %qT", fndecl,
15834 DECL_CONTEXT (fndecl));
15835 return error_mark_node;
15838 check_template_shadow (fndecl);
15840 if (TREE_PUBLIC (fndecl))
15841 DECL_COMDAT (fndecl) = 1;
15842 DECL_DECLARED_INLINE_P (fndecl) = 1;
15843 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
15845 /* We process method specializations in finish_struct_1. */
15846 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
15848 fndecl = push_template_decl (fndecl);
15849 if (fndecl == error_mark_node)
15850 return fndecl;
15853 if (! DECL_FRIEND_P (fndecl))
15855 if (DECL_CHAIN (fndecl))
15857 fndecl = copy_node (fndecl);
15858 TREE_CHAIN (fndecl) = NULL_TREE;
15862 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
15864 DECL_IN_AGGR_P (fndecl) = 1;
15865 return fndecl;
15869 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
15870 we can lay it out later, when and if its type becomes complete.
15872 Also handle constexpr variables where the initializer involves
15873 an unlowered PTRMEM_CST because the class isn't complete yet. */
15875 void
15876 maybe_register_incomplete_var (tree var)
15878 gcc_assert (VAR_P (var));
15880 /* Keep track of variables with incomplete types. */
15881 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
15882 && DECL_EXTERNAL (var))
15884 tree inner_type = TREE_TYPE (var);
15886 while (TREE_CODE (inner_type) == ARRAY_TYPE)
15887 inner_type = TREE_TYPE (inner_type);
15888 inner_type = TYPE_MAIN_VARIANT (inner_type);
15890 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
15891 /* RTTI TD entries are created while defining the type_info. */
15892 || (TYPE_LANG_SPECIFIC (inner_type)
15893 && TYPE_BEING_DEFINED (inner_type)))
15895 incomplete_var iv = {var, inner_type};
15896 vec_safe_push (incomplete_vars, iv);
15898 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
15899 && decl_constant_var_p (var)
15900 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
15902 /* When the outermost open class is complete we can resolve any
15903 pointers-to-members. */
15904 tree context = outermost_open_class ();
15905 incomplete_var iv = {var, context};
15906 vec_safe_push (incomplete_vars, iv);
15911 /* Called when a class type (given by TYPE) is defined. If there are
15912 any existing VAR_DECLs whose type has been completed by this
15913 declaration, update them now. */
15915 void
15916 complete_vars (tree type)
15918 unsigned ix;
15919 incomplete_var *iv;
15921 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
15923 if (same_type_p (type, iv->incomplete_type))
15925 tree var = iv->decl;
15926 tree type = TREE_TYPE (var);
15928 if (type != error_mark_node
15929 && (TYPE_MAIN_VARIANT (strip_array_types (type))
15930 == iv->incomplete_type))
15932 /* Complete the type of the variable. The VAR_DECL itself
15933 will be laid out in expand_expr. */
15934 complete_type (type);
15935 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
15938 /* Remove this entry from the list. */
15939 incomplete_vars->unordered_remove (ix);
15941 else
15942 ix++;
15945 /* Check for pending declarations which may have abstract type. */
15946 complete_type_check_abstract (type);
15949 /* If DECL is of a type which needs a cleanup, build and return an
15950 expression to perform that cleanup here. Return NULL_TREE if no
15951 cleanup need be done. DECL can also be a _REF when called from
15952 split_nonconstant_init_1. */
15954 tree
15955 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
15957 tree type;
15958 tree attr;
15959 tree cleanup;
15961 /* Assume no cleanup is required. */
15962 cleanup = NULL_TREE;
15964 if (error_operand_p (decl))
15965 return cleanup;
15967 /* Handle "__attribute__((cleanup))". We run the cleanup function
15968 before the destructor since the destructor is what actually
15969 terminates the lifetime of the object. */
15970 if (DECL_P (decl))
15971 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
15972 else
15973 attr = NULL_TREE;
15974 if (attr)
15976 tree id;
15977 tree fn;
15978 tree arg;
15980 /* Get the name specified by the user for the cleanup function. */
15981 id = TREE_VALUE (TREE_VALUE (attr));
15982 /* Look up the name to find the cleanup function to call. It is
15983 important to use lookup_name here because that is what is
15984 used in c-common.c:handle_cleanup_attribute when performing
15985 initial checks on the attribute. Note that those checks
15986 include ensuring that the function found is not an overloaded
15987 function, or an object with an overloaded call operator,
15988 etc.; we can rely on the fact that the function found is an
15989 ordinary FUNCTION_DECL. */
15990 fn = lookup_name (id);
15991 arg = build_address (decl);
15992 if (!mark_used (decl, complain) && !(complain & tf_error))
15993 return error_mark_node;
15994 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
15995 if (cleanup == error_mark_node)
15996 return error_mark_node;
15998 /* Handle ordinary C++ destructors. */
15999 type = TREE_TYPE (decl);
16000 if (type_build_dtor_call (type))
16002 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16003 tree addr;
16004 tree call;
16006 if (TREE_CODE (type) == ARRAY_TYPE)
16007 addr = decl;
16008 else
16009 addr = build_address (decl);
16011 call = build_delete (TREE_TYPE (addr), addr,
16012 sfk_complete_destructor, flags, 0, complain);
16013 if (call == error_mark_node)
16014 cleanup = error_mark_node;
16015 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16016 /* Discard the call. */;
16017 else if (cleanup)
16018 cleanup = cp_build_compound_expr (cleanup, call, complain);
16019 else
16020 cleanup = call;
16023 /* build_delete sets the location of the destructor call to the
16024 current location, even though the destructor is going to be
16025 called later, at the end of the current scope. This can lead to
16026 a "jumpy" behavior for users of debuggers when they step around
16027 the end of the block. So let's unset the location of the
16028 destructor call instead. */
16029 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16031 if (cleanup
16032 && DECL_P (decl)
16033 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16034 /* Treat objects with destructors as used; the destructor may do
16035 something substantive. */
16036 && !mark_used (decl, complain) && !(complain & tf_error))
16037 return error_mark_node;
16039 return cleanup;
16043 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16044 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16045 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16047 tree
16048 static_fn_type (tree memfntype)
16050 tree fntype;
16051 tree args;
16053 if (TYPE_PTRMEMFUNC_P (memfntype))
16054 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16055 if (POINTER_TYPE_P (memfntype)
16056 || TREE_CODE (memfntype) == FUNCTION_DECL)
16057 memfntype = TREE_TYPE (memfntype);
16058 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16059 return memfntype;
16060 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16061 args = TYPE_ARG_TYPES (memfntype);
16062 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
16063 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16064 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
16065 fntype = (cp_build_type_attribute_variant
16066 (fntype, TYPE_ATTRIBUTES (memfntype)));
16067 fntype = (build_exception_variant
16068 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
16069 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
16070 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
16071 return fntype;
16074 /* DECL was originally constructed as a non-static member function,
16075 but turned out to be static. Update it accordingly. */
16077 void
16078 revert_static_member_fn (tree decl)
16080 tree stype = static_fn_type (decl);
16081 cp_cv_quals quals = type_memfn_quals (stype);
16082 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16084 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16085 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16087 TREE_TYPE (decl) = stype;
16089 if (DECL_ARGUMENTS (decl))
16090 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16091 DECL_STATIC_FUNCTION_P (decl) = 1;
16094 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16095 one of the language-independent trees. */
16097 enum cp_tree_node_structure_enum
16098 cp_tree_node_structure (union lang_tree_node * t)
16100 switch (TREE_CODE (&t->generic))
16102 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16103 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16104 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16105 case OVERLOAD: return TS_CP_OVERLOAD;
16106 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16107 case PTRMEM_CST: return TS_CP_PTRMEM;
16108 case BASELINK: return TS_CP_BASELINK;
16109 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16110 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16111 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16112 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16113 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16114 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16115 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16116 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16117 default: return TS_CP_GENERIC;
16121 /* Build the void_list_node (void_type_node having been created). */
16122 tree
16123 build_void_list_node (void)
16125 tree t = build_tree_list (NULL_TREE, void_type_node);
16126 return t;
16129 bool
16130 cp_missing_noreturn_ok_p (tree decl)
16132 /* A missing noreturn is ok for the `main' function. */
16133 return DECL_MAIN_P (decl);
16136 /* Return the decl used to identify the COMDAT group into which DECL should
16137 be placed. */
16139 tree
16140 cxx_comdat_group (tree decl)
16142 /* Virtual tables, construction virtual tables, and virtual table
16143 tables all go in a single COMDAT group, named after the primary
16144 virtual table. */
16145 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16146 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16147 /* For all other DECLs, the COMDAT group is the mangled name of the
16148 declaration itself. */
16149 else
16151 while (DECL_THUNK_P (decl))
16153 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16154 into the same section as the target function. In that case
16155 we must return target's name. */
16156 tree target = THUNK_TARGET (decl);
16157 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16158 && DECL_SECTION_NAME (target) != NULL
16159 && DECL_ONE_ONLY (target))
16160 decl = target;
16161 else
16162 break;
16166 return decl;
16169 /* Returns the return type for FN as written by the user, which may include
16170 a placeholder for a deduced return type. */
16172 tree
16173 fndecl_declared_return_type (tree fn)
16175 fn = STRIP_TEMPLATE (fn);
16176 if (FNDECL_USED_AUTO (fn))
16178 struct language_function *f = NULL;
16179 if (DECL_STRUCT_FUNCTION (fn))
16180 f = DECL_STRUCT_FUNCTION (fn)->language;
16181 if (f == NULL)
16182 f = DECL_SAVED_FUNCTION_DATA (fn);
16183 return f->x_auto_return_pattern;
16185 return TREE_TYPE (TREE_TYPE (fn));
16188 /* Returns true iff DECL was declared with an auto type and it has
16189 not yet been deduced to a real type. */
16191 bool
16192 undeduced_auto_decl (tree decl)
16194 if (cxx_dialect < cxx11)
16195 return false;
16196 return type_uses_auto (TREE_TYPE (decl));
16199 /* Complain if DECL has an undeduced return type. */
16201 bool
16202 require_deduced_type (tree decl, tsubst_flags_t complain)
16204 if (undeduced_auto_decl (decl))
16206 if (complain & tf_error)
16207 error ("use of %qD before deduction of %<auto%>", decl);
16208 return false;
16210 return true;
16213 #include "gt-cp-decl.h"