P0646R1 Improving the Return Value of Erase-Like Algorithms I
[official-gcc.git] / gcc / cp / decl.c
blob0ea3c4a3490808739b3d326d32e3d4ec0f477724
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 tree local_variable_p_walkfn (tree *, int *, void *);
76 static const char *tag_name (enum tag_types);
77 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
78 static void maybe_deduce_size_from_array_init (tree, tree);
79 static void layout_var_decl (tree);
80 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
81 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
82 static void save_function_data (tree);
83 static void copy_type_enum (tree , tree);
84 static void check_function_type (tree, tree);
85 static void finish_constructor_body (void);
86 static void begin_destructor_body (void);
87 static void finish_destructor_body (void);
88 static void record_key_method_defined (tree);
89 static tree create_array_type_for_decl (tree, tree, tree);
90 static tree get_atexit_node (void);
91 static tree get_dso_handle_node (void);
92 static tree start_cleanup_fn (void);
93 static void end_cleanup_fn (void);
94 static tree cp_make_fname_decl (location_t, tree, int);
95 static void initialize_predefined_identifiers (void);
96 static tree check_special_function_return_type
97 (special_function_kind, tree, tree, int, const location_t*);
98 static tree push_cp_library_fn (enum tree_code, tree, int);
99 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
100 static void store_parm_decls (tree);
101 static void initialize_local_var (tree, tree);
102 static void expand_static_init (tree, tree);
104 /* The following symbols are subsumed in the cp_global_trees array, and
105 listed here individually for documentation purposes.
107 C++ extensions
108 tree wchar_decl_node;
110 tree vtable_entry_type;
111 tree delta_type_node;
112 tree __t_desc_type_node;
114 tree class_type_node;
115 tree unknown_type_node;
117 Array type `vtable_entry_type[]'
119 tree vtbl_type_node;
120 tree vtbl_ptr_type_node;
122 Namespaces,
124 tree std_node;
125 tree abi_node;
127 A FUNCTION_DECL which can call `abort'. Not necessarily the
128 one that the user will declare, but sufficient to be called
129 by routines that want to abort the program.
131 tree abort_fndecl;
133 Used by RTTI
134 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
135 tree tinfo_var_id; */
137 tree cp_global_trees[CPTI_MAX];
139 #define local_names cp_function_chain->x_local_names
141 /* A list of objects which have constructors or destructors
142 which reside in the global scope. The decl is stored in
143 the TREE_VALUE slot and the initializer is stored
144 in the TREE_PURPOSE slot. */
145 tree static_aggregates;
147 /* Like static_aggregates, but for thread_local variables. */
148 tree tls_aggregates;
150 /* -- end of C++ */
152 /* A node for the integer constant 2. */
154 tree integer_two_node;
156 /* vector of static decls. */
157 vec<tree, va_gc> *static_decls;
159 /* vector of keyed classes. */
160 vec<tree, va_gc> *keyed_classes;
162 /* Used only for jumps to as-yet undefined labels, since jumps to
163 defined labels can have their validity checked immediately. */
165 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
166 struct named_label_use_entry *next;
167 /* The binding level to which this entry is *currently* attached.
168 This is initially the binding level in which the goto appeared,
169 but is modified as scopes are closed. */
170 cp_binding_level *binding_level;
171 /* The head of the names list that was current when the goto appeared,
172 or the inner scope popped. These are the decls that will *not* be
173 skipped when jumping to the label. */
174 tree names_in_scope;
175 /* The location of the goto, for error reporting. */
176 location_t o_goto_locus;
177 /* True if an OpenMP structured block scope has been closed since
178 the goto appeared. This means that the branch from the label will
179 illegally exit an OpenMP scope. */
180 bool in_omp_scope;
183 /* A list of all LABEL_DECLs in the function that have names. Here so
184 we can clear out their names' definitions at the end of the
185 function, and so we can check the validity of jumps to these labels. */
187 struct GTY((for_user)) named_label_entry {
189 tree name; /* Name of decl. */
191 tree label_decl; /* LABEL_DECL, unless deleted local label. */
193 named_label_entry *outer; /* Outer shadowed chain. */
195 /* The binding level to which the label is *currently* attached.
196 This is initially set to the binding level in which the label
197 is defined, but is modified as scopes are closed. */
198 cp_binding_level *binding_level;
200 /* The head of the names list that was current when the label was
201 defined, or the inner scope popped. These are the decls that will
202 be skipped when jumping to the label. */
203 tree names_in_scope;
205 /* A vector of all decls from all binding levels that would be
206 crossed by a backward branch to the label. */
207 vec<tree, va_gc> *bad_decls;
209 /* A list of uses of the label, before the label is defined. */
210 named_label_use_entry *uses;
212 /* The following bits are set after the label is defined, and are
213 updated as scopes are popped. They indicate that a jump to the
214 label will illegally enter a scope of the given flavor. */
215 bool in_try_scope;
216 bool in_catch_scope;
217 bool in_omp_scope;
218 bool in_transaction_scope;
219 bool in_constexpr_if;
222 #define named_labels cp_function_chain->x_named_labels
224 /* The number of function bodies which we are currently processing.
225 (Zero if we are at namespace scope, one inside the body of a
226 function, two inside the body of a function in a local class, etc.) */
227 int function_depth;
229 /* Whether the exception-specifier is part of a function type (i.e. C++17). */
230 bool flag_noexcept_type;
232 /* States indicating how grokdeclarator() should handle declspecs marked
233 with __attribute__((deprecated)). An object declared as
234 __attribute__((deprecated)) suppresses warnings of uses of other
235 deprecated items. */
236 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
239 /* A list of VAR_DECLs whose type was incomplete at the time the
240 variable was declared. */
242 struct GTY(()) incomplete_var {
243 tree decl;
244 tree incomplete_type;
248 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
250 /* Returns the kind of template specialization we are currently
251 processing, given that it's declaration contained N_CLASS_SCOPES
252 explicit scope qualifications. */
254 tmpl_spec_kind
255 current_tmpl_spec_kind (int n_class_scopes)
257 int n_template_parm_scopes = 0;
258 int seen_specialization_p = 0;
259 int innermost_specialization_p = 0;
260 cp_binding_level *b;
262 /* Scan through the template parameter scopes. */
263 for (b = current_binding_level;
264 b->kind == sk_template_parms;
265 b = b->level_chain)
267 /* If we see a specialization scope inside a parameter scope,
268 then something is wrong. That corresponds to a declaration
269 like:
271 template <class T> template <> ...
273 which is always invalid since [temp.expl.spec] forbids the
274 specialization of a class member template if the enclosing
275 class templates are not explicitly specialized as well. */
276 if (b->explicit_spec_p)
278 if (n_template_parm_scopes == 0)
279 innermost_specialization_p = 1;
280 else
281 seen_specialization_p = 1;
283 else if (seen_specialization_p == 1)
284 return tsk_invalid_member_spec;
286 ++n_template_parm_scopes;
289 /* Handle explicit instantiations. */
290 if (processing_explicit_instantiation)
292 if (n_template_parm_scopes != 0)
293 /* We've seen a template parameter list during an explicit
294 instantiation. For example:
296 template <class T> template void f(int);
298 This is erroneous. */
299 return tsk_invalid_expl_inst;
300 else
301 return tsk_expl_inst;
304 if (n_template_parm_scopes < n_class_scopes)
305 /* We've not seen enough template headers to match all the
306 specialized classes present. For example:
308 template <class T> void R<T>::S<T>::f(int);
310 This is invalid; there needs to be one set of template
311 parameters for each class. */
312 return tsk_insufficient_parms;
313 else if (n_template_parm_scopes == n_class_scopes)
314 /* We're processing a non-template declaration (even though it may
315 be a member of a template class.) For example:
317 template <class T> void S<T>::f(int);
319 The `class T' matches the `S<T>', leaving no template headers
320 corresponding to the `f'. */
321 return tsk_none;
322 else if (n_template_parm_scopes > n_class_scopes + 1)
323 /* We've got too many template headers. For example:
325 template <> template <class T> void f (T);
327 There need to be more enclosing classes. */
328 return tsk_excessive_parms;
329 else
330 /* This must be a template. It's of the form:
332 template <class T> template <class U> void S<T>::f(U);
334 This is a specialization if the innermost level was a
335 specialization; otherwise it's just a definition of the
336 template. */
337 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
340 /* Exit the current scope. */
342 void
343 finish_scope (void)
345 poplevel (0, 0, 0);
348 /* When a label goes out of scope, check to see if that label was used
349 in a valid manner, and issue any appropriate warnings or errors. */
351 static void
352 check_label_used (tree label)
354 if (!processing_template_decl)
356 if (DECL_INITIAL (label) == NULL_TREE)
358 location_t location;
360 error ("label %q+D used but not defined", label);
361 location = input_location;
362 /* FIXME want (LOCATION_FILE (input_location), (line)0) */
363 /* Avoid crashing later. */
364 define_label (location, DECL_NAME (label));
366 else
367 warn_for_unused_label (label);
371 /* Helper function to sort named label entries in a vector by DECL_UID. */
373 static int
374 sort_labels (const void *a, const void *b)
376 tree label1 = *(tree const *) a;
377 tree label2 = *(tree const *) b;
379 /* DECL_UIDs can never be equal. */
380 return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1;
383 /* At the end of a function, all labels declared within the function
384 go out of scope. BLOCK is the top-level block for the
385 function. */
387 static void
388 pop_labels (tree block)
390 if (!named_labels)
391 return;
393 /* We need to add the labels to the block chain, so debug
394 information is emitted. But, we want the order to be stable so
395 need to sort them first. Otherwise the debug output could be
396 randomly ordered. I guess it's mostly stable, unless the hash
397 table implementation changes. */
398 auto_vec<tree, 32> labels (named_labels->elements ());
399 hash_table<named_label_hash>::iterator end (named_labels->end ());
400 for (hash_table<named_label_hash>::iterator iter
401 (named_labels->begin ()); iter != end; ++iter)
403 named_label_entry *ent = *iter;
405 gcc_checking_assert (!ent->outer);
406 if (ent->label_decl)
407 labels.quick_push (ent->label_decl);
408 ggc_free (ent);
410 named_labels = NULL;
411 labels.qsort (sort_labels);
413 while (labels.length ())
415 tree label = labels.pop ();
417 DECL_CHAIN (label) = BLOCK_VARS (block);
418 BLOCK_VARS (block) = label;
420 check_label_used (label);
424 /* At the end of a block with local labels, restore the outer definition. */
426 static void
427 pop_local_label (tree id, tree label)
429 check_label_used (label);
430 named_label_entry **slot = named_labels->find_slot_with_hash
431 (id, IDENTIFIER_HASH_VALUE (id), NO_INSERT);
432 named_label_entry *ent = *slot;
434 if (ent->outer)
435 ent = ent->outer;
436 else
438 ent = ggc_cleared_alloc<named_label_entry> ();
439 ent->name = id;
441 *slot = ent;
444 /* The following two routines are used to interface to Objective-C++.
445 The binding level is purposely treated as an opaque type. */
447 void *
448 objc_get_current_scope (void)
450 return current_binding_level;
453 /* The following routine is used by the NeXT-style SJLJ exceptions;
454 variables get marked 'volatile' so as to not be clobbered by
455 _setjmp()/_longjmp() calls. All variables in the current scope,
456 as well as parent scopes up to (but not including) ENCLOSING_BLK
457 shall be thusly marked. */
459 void
460 objc_mark_locals_volatile (void *enclosing_blk)
462 cp_binding_level *scope;
464 for (scope = current_binding_level;
465 scope && scope != enclosing_blk;
466 scope = scope->level_chain)
468 tree decl;
470 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
471 objc_volatilize_decl (decl);
473 /* Do not climb up past the current function. */
474 if (scope->kind == sk_function_parms)
475 break;
479 /* True if B is the level for the condition of a constexpr if. */
481 static bool
482 level_for_constexpr_if (cp_binding_level *b)
484 return (b->kind == sk_cond && b->this_entity
485 && TREE_CODE (b->this_entity) == IF_STMT
486 && IF_STMT_CONSTEXPR_P (b->this_entity));
489 /* Update data for defined and undefined labels when leaving a scope. */
492 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
494 named_label_entry *ent = *slot;
495 cp_binding_level *obl = bl->level_chain;
497 if (ent->binding_level == bl)
499 tree decl;
501 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
502 TREE_LISTs representing OVERLOADs, so be careful. */
503 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
504 ? DECL_CHAIN (decl)
505 : TREE_CHAIN (decl)))
506 if (decl_jump_unsafe (decl))
507 vec_safe_push (ent->bad_decls, decl);
509 ent->binding_level = obl;
510 ent->names_in_scope = obl->names;
511 switch (bl->kind)
513 case sk_try:
514 ent->in_try_scope = true;
515 break;
516 case sk_catch:
517 ent->in_catch_scope = true;
518 break;
519 case sk_omp:
520 ent->in_omp_scope = true;
521 break;
522 case sk_transaction:
523 ent->in_transaction_scope = true;
524 break;
525 case sk_block:
526 if (level_for_constexpr_if (bl->level_chain))
527 ent->in_constexpr_if = true;
528 break;
529 default:
530 break;
533 else if (ent->uses)
535 struct named_label_use_entry *use;
537 for (use = ent->uses; use ; use = use->next)
538 if (use->binding_level == bl)
540 use->binding_level = obl;
541 use->names_in_scope = obl->names;
542 if (bl->kind == sk_omp)
543 use->in_omp_scope = true;
547 return 1;
550 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
551 when errors were reported, except for -Werror-unused-but-set-*. */
552 static int unused_but_set_errorcount;
554 /* Exit a binding level.
555 Pop the level off, and restore the state of the identifier-decl mappings
556 that were in effect when this level was entered.
558 If KEEP == 1, this level had explicit declarations, so
559 and create a "block" (a BLOCK node) for the level
560 to record its declarations and subblocks for symbol table output.
562 If FUNCTIONBODY is nonzero, this level is the body of a function,
563 so create a block as if KEEP were set and also clear out all
564 label names.
566 If REVERSE is nonzero, reverse the order of decls before putting
567 them into the BLOCK. */
569 tree
570 poplevel (int keep, int reverse, int functionbody)
572 tree link;
573 /* The chain of decls was accumulated in reverse order.
574 Put it into forward order, just for cleanliness. */
575 tree decls;
576 tree subblocks;
577 tree block;
578 tree decl;
579 scope_kind kind;
581 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
582 restart:
584 block = NULL_TREE;
586 gcc_assert (current_binding_level->kind != sk_class
587 && current_binding_level->kind != sk_namespace);
589 if (current_binding_level->kind == sk_cleanup)
590 functionbody = 0;
591 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
593 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
595 /* We used to use KEEP == 2 to indicate that the new block should go
596 at the beginning of the list of blocks at this binding level,
597 rather than the end. This hack is no longer used. */
598 gcc_assert (keep == 0 || keep == 1);
600 if (current_binding_level->keep)
601 keep = 1;
603 /* Any uses of undefined labels, and any defined labels, now operate
604 under constraints of next binding contour. */
605 if (cfun && !functionbody && named_labels)
606 named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
607 (current_binding_level);
609 /* Get the decls in the order they were written.
610 Usually current_binding_level->names is in reverse order.
611 But parameter decls were previously put in forward order. */
613 decls = current_binding_level->names;
614 if (reverse)
616 decls = nreverse (decls);
617 current_binding_level->names = decls;
620 /* If there were any declarations or structure tags in that level,
621 or if this level is a function body,
622 create a BLOCK to record them for the life of this function. */
623 block = NULL_TREE;
624 /* Avoid function body block if possible. */
625 if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
626 keep = 0;
627 else if (keep == 1 || functionbody)
628 block = make_node (BLOCK);
629 if (block != NULL_TREE)
631 BLOCK_VARS (block) = decls;
632 BLOCK_SUBBLOCKS (block) = subblocks;
635 /* In each subblock, record that this is its superior. */
636 if (keep >= 0)
637 for (link = subblocks; link; link = BLOCK_CHAIN (link))
638 BLOCK_SUPERCONTEXT (link) = block;
640 /* Before we remove the declarations first check for unused variables. */
641 if ((warn_unused_variable || warn_unused_but_set_variable)
642 && current_binding_level->kind != sk_template_parms
643 && !processing_template_decl)
644 for (tree d = get_local_decls (); d; d = TREE_CHAIN (d))
646 /* There are cases where D itself is a TREE_LIST. See in
647 push_local_binding where the list of decls returned by
648 getdecls is built. */
649 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
651 tree type = TREE_TYPE (decl);
652 if (VAR_P (decl)
653 && (! TREE_USED (decl) || !DECL_READ_P (decl))
654 && ! DECL_IN_SYSTEM_HEADER (decl)
655 /* For structured bindings, consider only real variables, not
656 subobjects. */
657 && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl)
658 : (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)))
659 && type != error_mark_node
660 && (!CLASS_TYPE_P (type)
661 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
662 || lookup_attribute ("warn_unused",
663 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
665 if (! TREE_USED (decl))
667 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
668 warning_at (DECL_SOURCE_LOCATION (decl),
669 OPT_Wunused_variable,
670 "unused structured binding declaration");
671 else
672 warning_at (DECL_SOURCE_LOCATION (decl),
673 OPT_Wunused_variable, "unused variable %qD", decl);
675 else if (DECL_CONTEXT (decl) == current_function_decl
676 // For -Wunused-but-set-variable leave references alone.
677 && !TYPE_REF_P (TREE_TYPE (decl))
678 && errorcount == unused_but_set_errorcount)
680 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
681 warning_at (DECL_SOURCE_LOCATION (decl),
682 OPT_Wunused_but_set_variable, "structured "
683 "binding declaration set but not used");
684 else
685 warning_at (DECL_SOURCE_LOCATION (decl),
686 OPT_Wunused_but_set_variable,
687 "variable %qD set but not used", decl);
688 unused_but_set_errorcount = errorcount;
693 /* Remove declarations for all the DECLs in this level. */
694 for (link = decls; link; link = TREE_CHAIN (link))
696 decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link;
697 tree name = OVL_NAME (decl);
699 /* Remove the binding. */
700 if (TREE_CODE (decl) == LABEL_DECL)
701 pop_local_label (name, decl);
702 else
703 pop_local_binding (name, decl);
706 /* Restore the IDENTIFIER_TYPE_VALUEs. */
707 for (link = current_binding_level->type_shadowed;
708 link; link = TREE_CHAIN (link))
709 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
711 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
712 list if a `using' declaration put them there. The debugging
713 back ends won't understand OVERLOAD, so we remove them here.
714 Because the BLOCK_VARS are (temporarily) shared with
715 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
716 popped all the bindings. Also remove undeduced 'auto' decls,
717 which LTO doesn't understand, and can't have been used by anything. */
718 if (block)
720 tree* d;
722 for (d = &BLOCK_VARS (block); *d; )
724 if (TREE_CODE (*d) == TREE_LIST
725 || (!processing_template_decl
726 && undeduced_auto_decl (*d)))
727 *d = TREE_CHAIN (*d);
728 else
729 d = &DECL_CHAIN (*d);
733 /* If the level being exited is the top level of a function,
734 check over all the labels. */
735 if (functionbody)
737 if (block)
739 /* Since this is the top level block of a function, the vars are
740 the function's parameters. Don't leave them in the BLOCK
741 because they are found in the FUNCTION_DECL instead. */
742 BLOCK_VARS (block) = 0;
743 pop_labels (block);
745 else
746 pop_labels (subblocks);
749 kind = current_binding_level->kind;
750 if (kind == sk_cleanup)
752 tree stmt;
754 /* If this is a temporary binding created for a cleanup, then we'll
755 have pushed a statement list level. Pop that, create a new
756 BIND_EXPR for the block, and insert it into the stream. */
757 stmt = pop_stmt_list (current_binding_level->statement_list);
758 stmt = c_build_bind_expr (input_location, block, stmt);
759 add_stmt (stmt);
762 leave_scope ();
763 if (functionbody)
765 /* The current function is being defined, so its DECL_INITIAL
766 should be error_mark_node. */
767 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
768 DECL_INITIAL (current_function_decl) = block ? block : subblocks;
769 if (subblocks)
771 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
773 if (BLOCK_SUBBLOCKS (subblocks))
774 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
776 else
777 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
780 else if (block)
781 current_binding_level->blocks
782 = block_chainon (current_binding_level->blocks, block);
784 /* If we did not make a block for the level just exited,
785 any blocks made for inner levels
786 (since they cannot be recorded as subblocks in that level)
787 must be carried forward so they will later become subblocks
788 of something else. */
789 else if (subblocks)
790 current_binding_level->blocks
791 = block_chainon (current_binding_level->blocks, subblocks);
793 /* Each and every BLOCK node created here in `poplevel' is important
794 (e.g. for proper debugging information) so if we created one
795 earlier, mark it as "used". */
796 if (block)
797 TREE_USED (block) = 1;
799 /* All temporary bindings created for cleanups are popped silently. */
800 if (kind == sk_cleanup)
801 goto restart;
803 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
804 return block;
807 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
808 /* Diagnose odr-used extern inline variables without definitions
809 in the current TU. */
812 wrapup_namespace_globals ()
814 if (vec<tree, va_gc> *statics = static_decls)
816 tree decl;
817 unsigned int i;
818 FOR_EACH_VEC_ELT (*statics, i, decl)
820 if (warn_unused_function
821 && TREE_CODE (decl) == FUNCTION_DECL
822 && DECL_INITIAL (decl) == 0
823 && DECL_EXTERNAL (decl)
824 && !TREE_PUBLIC (decl)
825 && !DECL_ARTIFICIAL (decl)
826 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
827 && !TREE_NO_WARNING (decl))
828 warning_at (DECL_SOURCE_LOCATION (decl),
829 OPT_Wunused_function,
830 "%qF declared %<static%> but never defined", decl);
832 if (VAR_P (decl)
833 && DECL_EXTERNAL (decl)
834 && DECL_INLINE_VAR_P (decl)
835 && DECL_ODR_USED (decl))
836 error_at (DECL_SOURCE_LOCATION (decl),
837 "odr-used inline variable %qD is not defined", decl);
840 /* Clear out the list, so we don't rescan next time. */
841 static_decls = NULL;
843 /* Write out any globals that need to be output. */
844 return wrapup_global_declarations (statics->address (),
845 statics->length ());
847 return 0;
850 /* In C++, you don't have to write `struct S' to refer to `S'; you
851 can just use `S'. We accomplish this by creating a TYPE_DECL as
852 if the user had written `typedef struct S S'. Create and return
853 the TYPE_DECL for TYPE. */
855 tree
856 create_implicit_typedef (tree name, tree type)
858 tree decl;
860 decl = build_decl (input_location, TYPE_DECL, name, type);
861 DECL_ARTIFICIAL (decl) = 1;
862 /* There are other implicit type declarations, like the one *within*
863 a class that allows you to write `S::S'. We must distinguish
864 amongst these. */
865 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
866 TYPE_NAME (type) = decl;
867 TYPE_STUB_DECL (type) = decl;
869 return decl;
872 /* Remember a local name for name-mangling purposes. */
874 static void
875 push_local_name (tree decl)
877 size_t i, nelts;
878 tree t, name;
880 timevar_start (TV_NAME_LOOKUP);
882 name = DECL_NAME (decl);
884 nelts = vec_safe_length (local_names);
885 for (i = 0; i < nelts; i++)
887 t = (*local_names)[i];
888 if (DECL_NAME (t) == name)
890 retrofit_lang_decl (decl);
891 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
892 if (DECL_DISCRIMINATOR_SET_P (t))
893 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
894 else
895 DECL_DISCRIMINATOR (decl) = 1;
897 (*local_names)[i] = decl;
898 timevar_stop (TV_NAME_LOOKUP);
899 return;
903 vec_safe_push (local_names, decl);
904 timevar_stop (TV_NAME_LOOKUP);
907 /* Subroutine of duplicate_decls: return truthvalue of whether
908 or not types of these decls match.
910 For C++, we must compare the parameter list so that `int' can match
911 `int&' in a parameter position, but `int&' is not confused with
912 `const int&'. */
915 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
917 int types_match;
919 if (newdecl == olddecl)
920 return 1;
922 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
923 /* If the two DECLs are not even the same kind of thing, we're not
924 interested in their types. */
925 return 0;
927 gcc_assert (DECL_P (newdecl));
929 if (TREE_CODE (newdecl) == FUNCTION_DECL)
931 tree f1 = TREE_TYPE (newdecl);
932 tree f2 = TREE_TYPE (olddecl);
933 tree p1 = TYPE_ARG_TYPES (f1);
934 tree p2 = TYPE_ARG_TYPES (f2);
935 tree r2;
937 /* Specializations of different templates are different functions
938 even if they have the same type. */
939 tree t1 = (DECL_USE_TEMPLATE (newdecl)
940 ? DECL_TI_TEMPLATE (newdecl)
941 : NULL_TREE);
942 tree t2 = (DECL_USE_TEMPLATE (olddecl)
943 ? DECL_TI_TEMPLATE (olddecl)
944 : NULL_TREE);
945 if (t1 != t2)
946 return 0;
948 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
949 && ! (DECL_EXTERN_C_P (newdecl)
950 && DECL_EXTERN_C_P (olddecl)))
951 return 0;
953 /* A new declaration doesn't match a built-in one unless it
954 is also extern "C". */
955 if (DECL_IS_BUILTIN (olddecl)
956 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
957 return 0;
959 if (TREE_CODE (f1) != TREE_CODE (f2))
960 return 0;
962 /* A declaration with deduced return type should use its pre-deduction
963 type for declaration matching. */
964 r2 = fndecl_declared_return_type (olddecl);
966 if (same_type_p (TREE_TYPE (f1), r2))
968 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
969 && (DECL_BUILT_IN (olddecl)
970 #ifndef NO_IMPLICIT_EXTERN_C
971 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
972 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
973 #endif
976 types_match = self_promoting_args_p (p1);
977 if (p1 == void_list_node)
978 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
980 #ifndef NO_IMPLICIT_EXTERN_C
981 else if (!prototype_p (f1)
982 && (DECL_EXTERN_C_P (olddecl)
983 && DECL_IN_SYSTEM_HEADER (olddecl)
984 && !DECL_CLASS_SCOPE_P (olddecl))
985 && (DECL_EXTERN_C_P (newdecl)
986 && DECL_IN_SYSTEM_HEADER (newdecl)
987 && !DECL_CLASS_SCOPE_P (newdecl)))
989 types_match = self_promoting_args_p (p2);
990 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
992 #endif
993 else
994 types_match =
995 compparms (p1, p2)
996 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
997 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
998 || comp_type_attributes (TREE_TYPE (newdecl),
999 TREE_TYPE (olddecl)) != 0);
1001 else
1002 types_match = 0;
1004 /* The decls dont match if they correspond to two different versions
1005 of the same function. Disallow extern "C" functions to be
1006 versions for now. */
1007 if (types_match
1008 && !DECL_EXTERN_C_P (newdecl)
1009 && !DECL_EXTERN_C_P (olddecl)
1010 && record_versions
1011 && maybe_version_functions (newdecl, olddecl,
1012 (!DECL_FUNCTION_VERSIONED (newdecl)
1013 || !DECL_FUNCTION_VERSIONED (olddecl))))
1014 return 0;
1016 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1018 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1019 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1021 if (TREE_CODE (newres) != TREE_CODE (oldres))
1022 return 0;
1024 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1025 DECL_TEMPLATE_PARMS (olddecl)))
1026 return 0;
1028 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1029 types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres))
1030 && equivalently_constrained (olddecl, newdecl));
1031 else
1032 // We don't need to check equivalently_constrained for variable and
1033 // function templates because we check it on the results.
1034 types_match = decls_match (oldres, newres);
1036 else
1038 /* Need to check scope for variable declaration (VAR_DECL).
1039 For typedef (TYPE_DECL), scope is ignored. */
1040 if (VAR_P (newdecl)
1041 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1042 /* [dcl.link]
1043 Two declarations for an object with C language linkage
1044 with the same name (ignoring the namespace that qualify
1045 it) that appear in different namespace scopes refer to
1046 the same object. */
1047 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1048 return 0;
1050 if (TREE_TYPE (newdecl) == error_mark_node)
1051 types_match = TREE_TYPE (olddecl) == error_mark_node;
1052 else if (TREE_TYPE (olddecl) == NULL_TREE)
1053 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1054 else if (TREE_TYPE (newdecl) == NULL_TREE)
1055 types_match = 0;
1056 else
1057 types_match = comptypes (TREE_TYPE (newdecl),
1058 TREE_TYPE (olddecl),
1059 COMPARE_REDECLARATION);
1062 // Normal functions can be constrained, as can variable partial
1063 // specializations.
1064 if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl))
1065 types_match = equivalently_constrained (newdecl, olddecl);
1067 return types_match;
1070 /* NEWDECL and OLDDECL have identical signatures. If they are
1071 different versions adjust them and return true.
1072 If RECORD is set to true, record function versions. */
1074 bool
1075 maybe_version_functions (tree newdecl, tree olddecl, bool record)
1077 if (!targetm.target_option.function_versions (newdecl, olddecl))
1078 return false;
1080 if (!DECL_FUNCTION_VERSIONED (olddecl))
1082 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1083 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1084 mangle_decl (olddecl);
1087 if (!DECL_FUNCTION_VERSIONED (newdecl))
1089 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1090 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1091 mangle_decl (newdecl);
1094 if (record)
1095 cgraph_node::record_function_versions (olddecl, newdecl);
1097 return true;
1100 /* If NEWDECL is `static' and an `extern' was seen previously,
1101 warn about it. OLDDECL is the previous declaration.
1103 Note that this does not apply to the C++ case of declaring
1104 a variable `extern const' and then later `const'.
1106 Don't complain about built-in functions, since they are beyond
1107 the user's control. */
1109 void
1110 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1112 if (TREE_CODE (newdecl) == TYPE_DECL
1113 || TREE_CODE (newdecl) == TEMPLATE_DECL
1114 || TREE_CODE (newdecl) == CONST_DECL
1115 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1116 return;
1118 /* Don't get confused by static member functions; that's a different
1119 use of `static'. */
1120 if (TREE_CODE (newdecl) == FUNCTION_DECL
1121 && DECL_STATIC_FUNCTION_P (newdecl))
1122 return;
1124 /* If the old declaration was `static', or the new one isn't, then
1125 everything is OK. */
1126 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1127 return;
1129 /* It's OK to declare a builtin function as `static'. */
1130 if (TREE_CODE (olddecl) == FUNCTION_DECL
1131 && DECL_ARTIFICIAL (olddecl))
1132 return;
1134 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1135 "%qD was declared %<extern%> and later %<static%>", newdecl))
1136 inform (DECL_SOURCE_LOCATION (olddecl),
1137 "previous declaration of %qD", olddecl);
1140 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1141 function templates. If their exception specifications do not
1142 match, issue a diagnostic. */
1144 static void
1145 check_redeclaration_exception_specification (tree new_decl,
1146 tree old_decl)
1148 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1149 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1151 /* Two default specs are equivalent, don't force evaluation. */
1152 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1153 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1154 return;
1156 if (!type_dependent_expression_p (old_decl))
1158 maybe_instantiate_noexcept (new_decl);
1159 maybe_instantiate_noexcept (old_decl);
1161 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1162 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1164 /* [except.spec]
1166 If any declaration of a function has an exception-specification,
1167 all declarations, including the definition and an explicit
1168 specialization, of that function shall have an
1169 exception-specification with the same set of type-ids. */
1170 if (! DECL_IS_BUILTIN (old_decl)
1171 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1173 const char *const msg
1174 = G_("declaration of %qF has a different exception specifier");
1175 bool complained = true;
1176 location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1177 if (DECL_IN_SYSTEM_HEADER (old_decl))
1178 complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl);
1179 else if (!flag_exceptions)
1180 /* We used to silently permit mismatched eh specs with
1181 -fno-exceptions, so make them a pedwarn now. */
1182 complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl);
1183 else
1184 error_at (new_loc, msg, new_decl);
1185 if (complained)
1186 inform (DECL_SOURCE_LOCATION (old_decl),
1187 "from previous declaration %qF", old_decl);
1191 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1192 Otherwise issue diagnostics. */
1194 static bool
1195 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1197 old_decl = STRIP_TEMPLATE (old_decl);
1198 new_decl = STRIP_TEMPLATE (new_decl);
1199 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1200 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1201 return true;
1202 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1203 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1204 return true;
1205 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1207 if (DECL_BUILT_IN (old_decl))
1209 /* Hide a built-in declaration. */
1210 DECL_DECLARED_CONSTEXPR_P (old_decl)
1211 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1212 return true;
1214 /* 7.1.5 [dcl.constexpr]
1215 Note: An explicit specialization can differ from the template
1216 declaration with respect to the constexpr specifier. */
1217 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1218 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1219 return true;
1221 error_at (DECL_SOURCE_LOCATION (new_decl),
1222 "redeclaration %qD differs in %<constexpr%> "
1223 "from previous declaration", new_decl);
1224 inform (DECL_SOURCE_LOCATION (old_decl),
1225 "previous declaration %qD", old_decl);
1226 return false;
1228 return true;
1231 // If OLDDECL and NEWDECL are concept declarations with the same type
1232 // (i.e., and template parameters), but different requirements,
1233 // emit diagnostics and return true. Otherwise, return false.
1234 static inline bool
1235 check_concept_refinement (tree olddecl, tree newdecl)
1237 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1238 return false;
1240 tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1241 tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1242 if (TREE_CODE (d1) != TREE_CODE (d2))
1243 return false;
1245 tree t1 = TREE_TYPE (d1);
1246 tree t2 = TREE_TYPE (d2);
1247 if (TREE_CODE (d1) == FUNCTION_DECL)
1249 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1250 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1251 DECL_TEMPLATE_PARMS (newdecl))
1252 && !equivalently_constrained (olddecl, newdecl))
1254 error ("cannot specialize concept %q#D", olddecl);
1255 return true;
1258 return false;
1261 /* DECL is a redeclaration of a function or function template. If
1262 it does have default arguments issue a diagnostic. Note: this
1263 function is used to enforce the requirements in C++11 8.3.6 about
1264 no default arguments in redeclarations. */
1266 static void
1267 check_redeclaration_no_default_args (tree decl)
1269 gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1271 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1272 t && t != void_list_node; t = TREE_CHAIN (t))
1273 if (TREE_PURPOSE (t))
1275 permerror (DECL_SOURCE_LOCATION (decl),
1276 "redeclaration of %q#D may not have default "
1277 "arguments", decl);
1278 return;
1282 /* Merge tree bits that correspond to attributes noreturn, nothrow,
1283 const, malloc, and pure from NEWDECL with those of OLDDECL. */
1285 static void
1286 merge_attribute_bits (tree newdecl, tree olddecl)
1288 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1289 TREE_THIS_VOLATILE (olddecl) |= TREE_THIS_VOLATILE (newdecl);
1290 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1291 TREE_NOTHROW (olddecl) |= TREE_NOTHROW (newdecl);
1292 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1293 TREE_READONLY (olddecl) |= TREE_READONLY (newdecl);
1294 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1295 DECL_IS_MALLOC (olddecl) |= DECL_IS_MALLOC (newdecl);
1296 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1297 DECL_PURE_P (olddecl) |= DECL_PURE_P (newdecl);
1298 DECL_UNINLINABLE (newdecl) |= DECL_UNINLINABLE (olddecl);
1299 DECL_UNINLINABLE (olddecl) |= DECL_UNINLINABLE (newdecl);
1302 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1303 && lookup_attribute ("gnu_inline", \
1304 DECL_ATTRIBUTES (fn)))
1306 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1307 If the redeclaration is invalid, a diagnostic is issued, and the
1308 error_mark_node is returned. Otherwise, OLDDECL is returned.
1310 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1311 returned.
1313 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1315 tree
1316 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1318 unsigned olddecl_uid = DECL_UID (olddecl);
1319 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1320 int new_defines_function = 0;
1321 tree new_template_info;
1322 location_t olddecl_loc = DECL_SOURCE_LOCATION (olddecl);
1323 location_t newdecl_loc = DECL_SOURCE_LOCATION (newdecl);
1325 if (newdecl == olddecl)
1326 return olddecl;
1328 types_match = decls_match (newdecl, olddecl);
1330 /* If either the type of the new decl or the type of the old decl is an
1331 error_mark_node, then that implies that we have already issued an
1332 error (earlier) for some bogus type specification, and in that case,
1333 it is rather pointless to harass the user with yet more error message
1334 about the same declaration, so just pretend the types match here. */
1335 if (TREE_TYPE (newdecl) == error_mark_node
1336 || TREE_TYPE (olddecl) == error_mark_node)
1337 return error_mark_node;
1339 if (DECL_NAME (newdecl)
1340 && DECL_NAME (olddecl)
1341 && UDLIT_OPER_P (DECL_NAME (newdecl))
1342 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1344 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1345 && TREE_CODE (olddecl) != TEMPLATE_DECL
1346 && check_raw_literal_operator (olddecl))
1347 error_at (newdecl_loc,
1348 "literal operator template %qD conflicts with"
1349 " raw literal operator %qD", newdecl, olddecl);
1350 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1351 && TREE_CODE (olddecl) == TEMPLATE_DECL
1352 && check_raw_literal_operator (newdecl))
1353 error_at (newdecl_loc,
1354 "raw literal operator %qD conflicts with"
1355 " literal operator template %qD", newdecl, olddecl);
1358 /* True to merge attributes between the declarations, false to
1359 set OLDDECL's attributes to those of NEWDECL (for template
1360 explicit specializations that specify their own attributes
1361 independent of those specified for the primary template). */
1362 const bool merge_attr = (TREE_CODE (newdecl) != FUNCTION_DECL
1363 || !DECL_TEMPLATE_SPECIALIZATION (newdecl)
1364 || DECL_TEMPLATE_SPECIALIZATION (olddecl));
1366 if (DECL_P (olddecl)
1367 && TREE_CODE (newdecl) == FUNCTION_DECL
1368 && TREE_CODE (olddecl) == FUNCTION_DECL
1369 && merge_attr
1370 && diagnose_mismatched_attributes (olddecl, newdecl))
1372 if (DECL_INITIAL (olddecl))
1373 inform (olddecl_loc,
1374 "previous definition of %qD was here", olddecl);
1375 else
1376 inform (olddecl_loc,
1377 "previous declaration of %qD was here", olddecl);
1380 /* Check for redeclaration and other discrepancies. */
1381 if (TREE_CODE (olddecl) == FUNCTION_DECL
1382 && DECL_ARTIFICIAL (olddecl))
1384 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1385 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1387 /* Avoid warnings redeclaring built-ins which have not been
1388 explicitly declared. */
1389 if (DECL_ANTICIPATED (olddecl))
1391 if (TREE_PUBLIC (newdecl)
1392 && CP_DECL_CONTEXT (newdecl) == global_namespace)
1393 warning_at (newdecl_loc,
1394 OPT_Wbuiltin_declaration_mismatch,
1395 "built-in function %qD declared as non-function",
1396 newdecl);
1397 return NULL_TREE;
1400 /* If you declare a built-in or predefined function name as static,
1401 the old definition is overridden, but optionally warn this was a
1402 bad choice of name. */
1403 if (! TREE_PUBLIC (newdecl))
1405 warning_at (newdecl_loc,
1406 OPT_Wshadow,
1407 DECL_BUILT_IN (olddecl)
1408 ? G_("shadowing built-in function %q#D")
1409 : G_("shadowing library function %q#D"), olddecl);
1410 /* Discard the old built-in function. */
1411 return NULL_TREE;
1413 /* If the built-in is not ansi, then programs can override
1414 it even globally without an error. */
1415 else if (! DECL_BUILT_IN (olddecl))
1416 warning_at (newdecl_loc, 0,
1417 "library function %q#D redeclared as non-function %q#D",
1418 olddecl, newdecl);
1419 else
1420 error_at (newdecl_loc,
1421 "declaration of %q#D conflicts with built-in "
1422 "declaration %q#D", newdecl, olddecl);
1423 return NULL_TREE;
1425 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1427 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1428 error_at (newdecl_loc,
1429 "redeclaration of %<pragma omp declare reduction%>");
1430 inform (olddecl_loc,
1431 "previous %<pragma omp declare reduction%> declaration");
1432 return error_mark_node;
1434 else if (!types_match)
1436 /* Avoid warnings redeclaring built-ins which have not been
1437 explicitly declared. */
1438 if (DECL_ANTICIPATED (olddecl))
1440 tree t1, t2;
1442 /* A new declaration doesn't match a built-in one unless it
1443 is also extern "C". */
1444 gcc_assert (DECL_IS_BUILTIN (olddecl));
1445 gcc_assert (DECL_EXTERN_C_P (olddecl));
1446 if (!DECL_EXTERN_C_P (newdecl))
1447 return NULL_TREE;
1449 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1450 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1451 t1 || t2;
1452 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1454 if (!t1 || !t2)
1455 break;
1456 /* FILE, tm types are not known at the time
1457 we create the builtins. */
1458 for (unsigned i = 0;
1459 i < sizeof (builtin_structptr_types)
1460 / sizeof (builtin_structptr_type);
1461 ++i)
1462 if (TREE_VALUE (t2) == builtin_structptr_types[i].node)
1464 tree t = TREE_VALUE (t1);
1466 if (TYPE_PTR_P (t)
1467 && TYPE_IDENTIFIER (TREE_TYPE (t))
1468 == get_identifier (builtin_structptr_types[i].str)
1469 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1471 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1473 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1474 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1475 types_match = decls_match (newdecl, olddecl);
1476 if (types_match)
1477 return duplicate_decls (newdecl, olddecl,
1478 newdecl_is_friend);
1479 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1481 goto next_arg;
1484 if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1485 break;
1486 next_arg:;
1489 warning_at (newdecl_loc,
1490 OPT_Wbuiltin_declaration_mismatch,
1491 "declaration of %q#D conflicts with built-in "
1492 "declaration %q#D", newdecl, olddecl);
1494 else if ((DECL_EXTERN_C_P (newdecl)
1495 && DECL_EXTERN_C_P (olddecl))
1496 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1497 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1499 /* Don't really override olddecl for __* prefixed builtins
1500 except for __[^b]*_chk, the compiler might be using those
1501 explicitly. */
1502 if (DECL_BUILT_IN (olddecl))
1504 tree id = DECL_NAME (olddecl);
1505 const char *name = IDENTIFIER_POINTER (id);
1506 size_t len;
1508 if (name[0] == '_'
1509 && name[1] == '_'
1510 && (strncmp (name + 2, "builtin_",
1511 strlen ("builtin_")) == 0
1512 || (len = strlen (name)) <= strlen ("___chk")
1513 || memcmp (name + len - strlen ("_chk"),
1514 "_chk", strlen ("_chk") + 1) != 0))
1516 if (DECL_INITIAL (newdecl))
1518 error_at (newdecl_loc,
1519 "definition of %q#D ambiguates built-in "
1520 "declaration %q#D", newdecl, olddecl);
1521 return error_mark_node;
1523 if (permerror (newdecl_loc,
1524 "new declaration %q#D ambiguates built-in"
1525 " declaration %q#D", newdecl, olddecl)
1526 && flag_permissive)
1527 inform (newdecl_loc,
1528 "ignoring the %q#D declaration", newdecl);
1529 return flag_permissive ? olddecl : error_mark_node;
1533 /* A near match; override the builtin. */
1535 if (TREE_PUBLIC (newdecl))
1536 warning_at (newdecl_loc,
1537 OPT_Wbuiltin_declaration_mismatch,
1538 "new declaration %q#D ambiguates built-in "
1539 "declaration %q#D", newdecl, olddecl);
1540 else
1541 warning (OPT_Wshadow,
1542 DECL_BUILT_IN (olddecl)
1543 ? G_("shadowing built-in function %q#D")
1544 : G_("shadowing library function %q#D"), olddecl);
1546 else
1547 /* Discard the old built-in function. */
1548 return NULL_TREE;
1550 /* Replace the old RTL to avoid problems with inlining. */
1551 COPY_DECL_RTL (newdecl, olddecl);
1553 /* Even if the types match, prefer the new declarations type for
1554 built-ins which have not been explicitly declared, for
1555 exception lists, etc... */
1556 else if (DECL_IS_BUILTIN (olddecl))
1558 tree type = TREE_TYPE (newdecl);
1559 tree attribs = (*targetm.merge_type_attributes)
1560 (TREE_TYPE (olddecl), type);
1562 type = cp_build_type_attribute_variant (type, attribs);
1563 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1566 /* If a function is explicitly declared "throw ()", propagate that to
1567 the corresponding builtin. */
1568 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1569 && DECL_ANTICIPATED (olddecl)
1570 && TREE_NOTHROW (newdecl)
1571 && !TREE_NOTHROW (olddecl))
1573 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1574 tree tmpdecl = builtin_decl_explicit (fncode);
1575 if (tmpdecl && tmpdecl != olddecl && types_match)
1576 TREE_NOTHROW (tmpdecl) = 1;
1579 /* Whether or not the builtin can throw exceptions has no
1580 bearing on this declarator. */
1581 TREE_NOTHROW (olddecl) = 0;
1583 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1585 /* If a builtin function is redeclared as `static', merge
1586 the declarations, but make the original one static. */
1587 DECL_THIS_STATIC (olddecl) = 1;
1588 TREE_PUBLIC (olddecl) = 0;
1590 /* Make the old declaration consistent with the new one so
1591 that all remnants of the builtin-ness of this function
1592 will be banished. */
1593 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1594 COPY_DECL_RTL (newdecl, olddecl);
1597 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1599 /* C++ Standard, 3.3, clause 4:
1600 "[Note: a namespace name or a class template name must be unique
1601 in its declarative region (7.3.2, clause 14). ]" */
1602 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1603 && TREE_CODE (newdecl) != NAMESPACE_DECL
1604 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1605 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1606 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1607 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1609 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1610 && TREE_CODE (newdecl) != TYPE_DECL)
1611 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1612 && TREE_CODE (olddecl) != TYPE_DECL))
1614 /* We do nothing special here, because C++ does such nasty
1615 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1616 get shadowed, and know that if we need to find a TYPE_DECL
1617 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1618 slot of the identifier. */
1619 return NULL_TREE;
1622 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1623 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1624 || (TREE_CODE (olddecl) == FUNCTION_DECL
1625 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1626 return NULL_TREE;
1629 error ("%q#D redeclared as different kind of symbol", newdecl);
1630 if (TREE_CODE (olddecl) == TREE_LIST)
1631 olddecl = TREE_VALUE (olddecl);
1632 inform (olddecl_loc,
1633 "previous declaration %q#D", olddecl);
1635 return error_mark_node;
1637 else if (!types_match)
1639 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1640 /* These are certainly not duplicate declarations; they're
1641 from different scopes. */
1642 return NULL_TREE;
1644 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1646 /* The name of a class template may not be declared to refer to
1647 any other template, class, function, object, namespace, value,
1648 or type in the same scope. */
1649 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1650 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1652 error_at (newdecl_loc,
1653 "conflicting declaration of template %q#D", newdecl);
1654 inform (olddecl_loc,
1655 "previous declaration %q#D", olddecl);
1656 return error_mark_node;
1658 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1659 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1660 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1661 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1662 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1663 DECL_TEMPLATE_PARMS (olddecl))
1664 /* Template functions can be disambiguated by
1665 return type. */
1666 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1667 TREE_TYPE (TREE_TYPE (olddecl)))
1668 // Template functions can also be disambiguated by
1669 // constraints.
1670 && equivalently_constrained (olddecl, newdecl))
1672 error_at (newdecl_loc, "ambiguating new declaration %q#D",
1673 newdecl);
1674 inform (olddecl_loc,
1675 "old declaration %q#D", olddecl);
1677 else if (check_concept_refinement (olddecl, newdecl))
1678 return error_mark_node;
1679 return NULL_TREE;
1681 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1683 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1685 error_at (newdecl_loc,
1686 "conflicting declaration of C function %q#D",
1687 newdecl);
1688 inform (olddecl_loc,
1689 "previous declaration %q#D", olddecl);
1690 return NULL_TREE;
1692 /* For function versions, params and types match, but they
1693 are not ambiguous. */
1694 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1695 && !DECL_FUNCTION_VERSIONED (olddecl))
1696 // The functions have the same parameter types.
1697 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1698 TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1699 // And the same constraints.
1700 && equivalently_constrained (newdecl, olddecl))
1702 error_at (newdecl_loc,
1703 "ambiguating new declaration of %q#D", newdecl);
1704 inform (olddecl_loc,
1705 "old declaration %q#D", olddecl);
1706 return error_mark_node;
1708 else
1709 return NULL_TREE;
1711 else
1713 error_at (newdecl_loc, "conflicting declaration %q#D", newdecl);
1714 inform (olddecl_loc,
1715 "previous declaration as %q#D", olddecl);
1716 return error_mark_node;
1719 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1720 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1721 && (!DECL_TEMPLATE_INFO (newdecl)
1722 || (DECL_TI_TEMPLATE (newdecl)
1723 != DECL_TI_TEMPLATE (olddecl))))
1724 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1725 && (!DECL_TEMPLATE_INFO (olddecl)
1726 || (DECL_TI_TEMPLATE (olddecl)
1727 != DECL_TI_TEMPLATE (newdecl))))))
1728 /* It's OK to have a template specialization and a non-template
1729 with the same type, or to have specializations of two
1730 different templates with the same type. Note that if one is a
1731 specialization, and the other is an instantiation of the same
1732 template, that we do not exit at this point. That situation
1733 can occur if we instantiate a template class, and then
1734 specialize one of its methods. This situation is valid, but
1735 the declarations must be merged in the usual way. */
1736 return NULL_TREE;
1737 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1738 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1739 && !DECL_USE_TEMPLATE (newdecl))
1740 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1741 && !DECL_USE_TEMPLATE (olddecl))))
1742 /* One of the declarations is a template instantiation, and the
1743 other is not a template at all. That's OK. */
1744 return NULL_TREE;
1745 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1747 /* In [namespace.alias] we have:
1749 In a declarative region, a namespace-alias-definition can be
1750 used to redefine a namespace-alias declared in that declarative
1751 region to refer only to the namespace to which it already
1752 refers.
1754 Therefore, if we encounter a second alias directive for the same
1755 alias, we can just ignore the second directive. */
1756 if (DECL_NAMESPACE_ALIAS (newdecl)
1757 && (DECL_NAMESPACE_ALIAS (newdecl)
1758 == DECL_NAMESPACE_ALIAS (olddecl)))
1759 return olddecl;
1761 /* Leave it to update_binding to merge or report error. */
1762 return NULL_TREE;
1764 else
1766 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1767 if (errmsg)
1769 error_at (newdecl_loc, errmsg, newdecl);
1770 if (DECL_NAME (olddecl) != NULL_TREE)
1771 inform (olddecl_loc,
1772 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1773 ? G_("%q#D previously defined here")
1774 : G_("%q#D previously declared here"), olddecl);
1775 return error_mark_node;
1777 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1778 && DECL_INITIAL (olddecl) != NULL_TREE
1779 && !prototype_p (TREE_TYPE (olddecl))
1780 && prototype_p (TREE_TYPE (newdecl)))
1782 /* Prototype decl follows defn w/o prototype. */
1783 if (warning_at (newdecl_loc, 0,
1784 "prototype specified for %q#D", newdecl))
1785 inform (olddecl_loc,
1786 "previous non-prototype definition here");
1788 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1789 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1791 /* [dcl.link]
1792 If two declarations of the same function or object
1793 specify different linkage-specifications ..., the program
1794 is ill-formed.... Except for functions with C++ linkage,
1795 a function declaration without a linkage specification
1796 shall not precede the first linkage specification for
1797 that function. A function can be declared without a
1798 linkage specification after an explicit linkage
1799 specification has been seen; the linkage explicitly
1800 specified in the earlier declaration is not affected by
1801 such a function declaration.
1803 DR 563 raises the question why the restrictions on
1804 functions should not also apply to objects. Older
1805 versions of G++ silently ignore the linkage-specification
1806 for this example:
1808 namespace N {
1809 extern int i;
1810 extern "C" int i;
1813 which is clearly wrong. Therefore, we now treat objects
1814 like functions. */
1815 if (current_lang_depth () == 0)
1817 /* There is no explicit linkage-specification, so we use
1818 the linkage from the previous declaration. */
1819 retrofit_lang_decl (newdecl);
1820 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1822 else
1824 error_at (newdecl_loc,
1825 "conflicting declaration of %q#D with %qL linkage",
1826 newdecl, DECL_LANGUAGE (newdecl));
1827 inform (olddecl_loc,
1828 "previous declaration with %qL linkage",
1829 DECL_LANGUAGE (olddecl));
1833 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1835 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1837 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */
1838 if (DECL_FUNCTION_MEMBER_P (olddecl)
1839 && (/* grokfndecl passes member function templates too
1840 as FUNCTION_DECLs. */
1841 DECL_TEMPLATE_INFO (olddecl)
1842 /* C++11 8.3.6/6.
1843 Default arguments for a member function of a class
1844 template shall be specified on the initial declaration
1845 of the member function within the class template. */
1846 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1847 check_redeclaration_no_default_args (newdecl);
1848 else
1850 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1851 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1852 int i = 1;
1854 for (; t1 && t1 != void_list_node;
1855 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1856 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1858 if (simple_cst_equal (TREE_PURPOSE (t1),
1859 TREE_PURPOSE (t2)) == 1)
1861 if (permerror (newdecl_loc,
1862 "default argument given for parameter "
1863 "%d of %q#D", i, newdecl))
1864 inform (olddecl_loc,
1865 "previous specification in %q#D here",
1866 olddecl);
1868 else
1870 error_at (newdecl_loc,
1871 "default argument given for parameter %d "
1872 "of %q#D", i, newdecl);
1873 inform (olddecl_loc,
1874 "previous specification in %q#D here",
1875 olddecl);
1882 /* Do not merge an implicit typedef with an explicit one. In:
1884 class A;
1886 typedef class A A __attribute__ ((foo));
1888 the attribute should apply only to the typedef. */
1889 if (TREE_CODE (olddecl) == TYPE_DECL
1890 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1891 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1892 return NULL_TREE;
1894 /* If new decl is `static' and an `extern' was seen previously,
1895 warn about it. */
1896 warn_extern_redeclared_static (newdecl, olddecl);
1898 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1899 return error_mark_node;
1901 /* We have committed to returning 1 at this point. */
1902 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1904 /* Now that functions must hold information normally held
1905 by field decls, there is extra work to do so that
1906 declaration information does not get destroyed during
1907 definition. */
1908 if (DECL_VINDEX (olddecl))
1909 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1910 if (DECL_CONTEXT (olddecl))
1911 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1912 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1913 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1914 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1915 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1916 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1917 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1918 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1919 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1920 if (DECL_OVERLOADED_OPERATOR_P (olddecl))
1921 DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
1922 = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
1923 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1925 /* Optionally warn about more than one declaration for the same
1926 name, but don't warn about a function declaration followed by a
1927 definition. */
1928 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1929 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1930 /* Don't warn about extern decl followed by definition. */
1931 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1932 /* Don't warn about friends, let add_friend take care of it. */
1933 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1934 /* Don't warn about declaration followed by specialization. */
1935 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1936 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1938 if (warning_at (newdecl_loc,
1939 OPT_Wredundant_decls,
1940 "redundant redeclaration of %qD in same scope",
1941 newdecl))
1942 inform (olddecl_loc,
1943 "previous declaration of %qD", olddecl);
1946 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1947 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1949 if (DECL_DELETED_FN (newdecl))
1951 error_at (newdecl_loc, "deleted definition of %qD", newdecl);
1952 inform (olddecl_loc,
1953 "previous declaration of %qD", olddecl);
1955 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1959 /* Deal with C++: must preserve virtual function table size. */
1960 if (TREE_CODE (olddecl) == TYPE_DECL)
1962 tree newtype = TREE_TYPE (newdecl);
1963 tree oldtype = TREE_TYPE (olddecl);
1965 if (newtype != error_mark_node && oldtype != error_mark_node
1966 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1967 CLASSTYPE_FRIEND_CLASSES (newtype)
1968 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1970 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1973 /* Copy all the DECL_... slots specified in the new decl except for
1974 any that we copy here from the old type. */
1975 if (merge_attr)
1976 DECL_ATTRIBUTES (newdecl)
1977 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1978 else
1979 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
1981 if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
1983 olddecl_friend = DECL_FRIEND_P (olddecl);
1984 hidden_friend = (DECL_ANTICIPATED (olddecl)
1985 && DECL_HIDDEN_FRIEND_P (olddecl)
1986 && newdecl_is_friend);
1987 if (!hidden_friend)
1989 DECL_ANTICIPATED (olddecl) = 0;
1990 DECL_HIDDEN_FRIEND_P (olddecl) = 0;
1994 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1996 tree old_result;
1997 tree new_result;
1998 old_result = DECL_TEMPLATE_RESULT (olddecl);
1999 new_result = DECL_TEMPLATE_RESULT (newdecl);
2000 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2001 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
2002 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
2003 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2005 DECL_ATTRIBUTES (old_result)
2006 = (*targetm.merge_decl_attributes) (old_result, new_result);
2008 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2010 /* Per C++11 8.3.6/4, default arguments cannot be added in later
2011 declarations of a function template. */
2012 if (DECL_SOURCE_LOCATION (newdecl)
2013 != DECL_SOURCE_LOCATION (olddecl))
2014 check_redeclaration_no_default_args (newdecl);
2016 check_default_args (newdecl);
2018 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2019 && DECL_INITIAL (new_result))
2021 if (DECL_INITIAL (old_result))
2022 DECL_UNINLINABLE (old_result) = 1;
2023 else
2024 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2025 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2026 DECL_NOT_REALLY_EXTERN (old_result)
2027 = DECL_NOT_REALLY_EXTERN (new_result);
2028 DECL_INTERFACE_KNOWN (old_result)
2029 = DECL_INTERFACE_KNOWN (new_result);
2030 DECL_DECLARED_INLINE_P (old_result)
2031 = DECL_DECLARED_INLINE_P (new_result);
2032 DECL_DISREGARD_INLINE_LIMITS (old_result)
2033 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2036 else
2038 DECL_DECLARED_INLINE_P (old_result)
2039 |= DECL_DECLARED_INLINE_P (new_result);
2040 DECL_DISREGARD_INLINE_LIMITS (old_result)
2041 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2042 check_redeclaration_exception_specification (newdecl, olddecl);
2044 merge_attribute_bits (new_result, old_result);
2048 /* If the new declaration is a definition, update the file and
2049 line information on the declaration, and also make
2050 the old declaration the same definition. */
2051 if (DECL_INITIAL (new_result) != NULL_TREE)
2053 DECL_SOURCE_LOCATION (olddecl)
2054 = DECL_SOURCE_LOCATION (old_result)
2055 = DECL_SOURCE_LOCATION (newdecl);
2056 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2057 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2059 tree parm;
2060 DECL_ARGUMENTS (old_result)
2061 = DECL_ARGUMENTS (new_result);
2062 for (parm = DECL_ARGUMENTS (old_result); parm;
2063 parm = DECL_CHAIN (parm))
2064 DECL_CONTEXT (parm) = old_result;
2068 return olddecl;
2071 if (types_match)
2073 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2074 check_redeclaration_exception_specification (newdecl, olddecl);
2076 /* Automatically handles default parameters. */
2077 tree oldtype = TREE_TYPE (olddecl);
2078 tree newtype;
2080 /* For typedefs use the old type, as the new type's DECL_NAME points
2081 at newdecl, which will be ggc_freed. */
2082 if (TREE_CODE (newdecl) == TYPE_DECL)
2084 /* But NEWTYPE might have an attribute, honor that. */
2085 tree tem = TREE_TYPE (newdecl);
2086 newtype = oldtype;
2088 if (TYPE_USER_ALIGN (tem))
2090 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2091 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2092 TYPE_USER_ALIGN (newtype) = true;
2095 /* And remove the new type from the variants list. */
2096 if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2098 tree remove = TREE_TYPE (newdecl);
2099 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2100 t = TYPE_NEXT_VARIANT (t))
2101 if (TYPE_NEXT_VARIANT (t) == remove)
2103 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2104 break;
2108 else if (merge_attr)
2109 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2110 else
2111 newtype = TREE_TYPE (newdecl);
2113 if (VAR_P (newdecl))
2115 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2116 /* For already initialized vars, TREE_READONLY could have been
2117 cleared in cp_finish_decl, because the var needs runtime
2118 initialization or destruction. Make sure not to set
2119 TREE_READONLY on it again. */
2120 if (DECL_INITIALIZED_P (olddecl)
2121 && !DECL_EXTERNAL (olddecl)
2122 && !TREE_READONLY (olddecl))
2123 TREE_READONLY (newdecl) = 0;
2124 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2125 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2126 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2127 if (DECL_DEPENDENT_INIT_P (olddecl))
2128 SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2129 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2130 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2131 if (DECL_CLASS_SCOPE_P (olddecl))
2132 DECL_DECLARED_CONSTEXPR_P (newdecl)
2133 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2135 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2136 if (DECL_LANG_SPECIFIC (olddecl)
2137 && CP_DECL_THREADPRIVATE_P (olddecl))
2139 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2140 retrofit_lang_decl (newdecl);
2141 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2145 /* An explicit specialization of a function template or of a member
2146 function of a class template can be declared transaction_safe
2147 independently of whether the corresponding template entity is declared
2148 transaction_safe. */
2149 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2150 && DECL_TEMPLATE_INSTANTIATION (olddecl)
2151 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2152 && tx_safe_fn_type_p (newtype)
2153 && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2154 newtype = tx_unsafe_fn_variant (newtype);
2156 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2158 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2159 check_default_args (newdecl);
2161 /* Lay the type out, unless already done. */
2162 if (! same_type_p (newtype, oldtype)
2163 && TREE_TYPE (newdecl) != error_mark_node
2164 && !(processing_template_decl && uses_template_parms (newdecl)))
2165 layout_type (TREE_TYPE (newdecl));
2167 if ((VAR_P (newdecl)
2168 || TREE_CODE (newdecl) == PARM_DECL
2169 || TREE_CODE (newdecl) == RESULT_DECL
2170 || TREE_CODE (newdecl) == FIELD_DECL
2171 || TREE_CODE (newdecl) == TYPE_DECL)
2172 && !(processing_template_decl && uses_template_parms (newdecl)))
2173 layout_decl (newdecl, 0);
2175 /* Merge deprecatedness. */
2176 if (TREE_DEPRECATED (newdecl))
2177 TREE_DEPRECATED (olddecl) = 1;
2179 /* Preserve function specific target and optimization options */
2180 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2182 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2183 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2184 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2185 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2187 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2188 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2189 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2190 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2192 else
2194 /* Merge the const type qualifier. */
2195 if (TREE_READONLY (newdecl))
2196 TREE_READONLY (olddecl) = 1;
2197 /* Merge the volatile type qualifier. */
2198 if (TREE_THIS_VOLATILE (newdecl))
2199 TREE_THIS_VOLATILE (olddecl) = 1;
2202 /* Merge the initialization information. */
2203 if (DECL_INITIAL (newdecl) == NULL_TREE
2204 && DECL_INITIAL (olddecl) != NULL_TREE)
2206 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2207 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2208 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2210 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2211 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2215 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2217 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2218 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2219 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2220 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2221 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2222 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2224 if (merge_attr)
2225 merge_attribute_bits (newdecl, olddecl);
2226 else
2228 /* Merge the noreturn bit. */
2229 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2230 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2231 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2232 DECL_IS_MALLOC (olddecl) = DECL_IS_MALLOC (newdecl);
2233 DECL_PURE_P (olddecl) = DECL_PURE_P (newdecl);
2235 /* Keep the old RTL. */
2236 COPY_DECL_RTL (olddecl, newdecl);
2238 else if (VAR_P (newdecl)
2239 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2241 /* Keep the old RTL. We cannot keep the old RTL if the old
2242 declaration was for an incomplete object and the new
2243 declaration is not since many attributes of the RTL will
2244 change. */
2245 COPY_DECL_RTL (olddecl, newdecl);
2248 /* If cannot merge, then use the new type and qualifiers,
2249 and don't preserve the old rtl. */
2250 else
2252 /* Clean out any memory we had of the old declaration. */
2253 tree oldstatic = value_member (olddecl, static_aggregates);
2254 if (oldstatic)
2255 TREE_VALUE (oldstatic) = error_mark_node;
2257 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2258 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2259 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2260 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2261 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2264 /* Merge the storage class information. */
2265 merge_weak (newdecl, olddecl);
2267 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2268 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2269 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2270 if (! DECL_EXTERNAL (olddecl))
2271 DECL_EXTERNAL (newdecl) = 0;
2272 if (! DECL_COMDAT (olddecl))
2273 DECL_COMDAT (newdecl) = 0;
2275 new_template_info = NULL_TREE;
2276 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2278 bool new_redefines_gnu_inline = false;
2280 if (new_defines_function
2281 && ((DECL_INTERFACE_KNOWN (olddecl)
2282 && TREE_CODE (olddecl) == FUNCTION_DECL)
2283 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2284 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2285 == FUNCTION_DECL))))
2287 tree fn = olddecl;
2289 if (TREE_CODE (fn) == TEMPLATE_DECL)
2290 fn = DECL_TEMPLATE_RESULT (olddecl);
2292 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2295 if (!new_redefines_gnu_inline)
2297 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2298 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2299 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2301 DECL_TEMPLATE_INSTANTIATED (newdecl)
2302 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2303 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2305 /* If the OLDDECL is an instantiation and/or specialization,
2306 then the NEWDECL must be too. But, it may not yet be marked
2307 as such if the caller has created NEWDECL, but has not yet
2308 figured out that it is a redeclaration. */
2309 if (!DECL_USE_TEMPLATE (newdecl))
2310 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2312 /* Don't really know how much of the language-specific
2313 values we should copy from old to new. */
2314 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2315 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2316 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2317 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2319 if (LANG_DECL_HAS_MIN (newdecl))
2321 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2322 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2323 if (DECL_TEMPLATE_INFO (newdecl))
2325 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2326 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2327 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2328 /* Remember the presence of explicit specialization args. */
2329 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2330 = TINFO_USED_TEMPLATE_ID (new_template_info);
2332 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2334 /* Only functions have these fields. */
2335 if (DECL_DECLARES_FUNCTION_P (newdecl))
2337 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2338 DECL_BEFRIENDING_CLASSES (newdecl)
2339 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2340 DECL_BEFRIENDING_CLASSES (olddecl));
2341 /* DECL_THUNKS is only valid for virtual functions,
2342 otherwise it is a DECL_FRIEND_CONTEXT. */
2343 if (DECL_VIRTUAL_P (newdecl))
2344 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2346 /* Only variables have this field. */
2347 else if (VAR_P (newdecl)
2348 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2349 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2352 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2354 tree parm;
2356 /* Merge parameter attributes. */
2357 tree oldarg, newarg;
2358 for (oldarg = DECL_ARGUMENTS(olddecl),
2359 newarg = DECL_ARGUMENTS(newdecl);
2360 oldarg && newarg;
2361 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2362 DECL_ATTRIBUTES (newarg)
2363 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2364 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2367 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2368 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2370 /* If newdecl is not a specialization, then it is not a
2371 template-related function at all. And that means that we
2372 should have exited above, returning 0. */
2373 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2375 if (DECL_ODR_USED (olddecl))
2376 /* From [temp.expl.spec]:
2378 If a template, a member template or the member of a class
2379 template is explicitly specialized then that
2380 specialization shall be declared before the first use of
2381 that specialization that would cause an implicit
2382 instantiation to take place, in every translation unit in
2383 which such a use occurs. */
2384 error ("explicit specialization of %qD after first use",
2385 olddecl);
2387 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2388 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2389 && DECL_DECLARED_INLINE_P (newdecl));
2391 /* Don't propagate visibility from the template to the
2392 specialization here. We'll do that in determine_visibility if
2393 appropriate. */
2394 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2396 /* [temp.expl.spec/14] We don't inline explicit specialization
2397 just because the primary template says so. */
2398 gcc_assert (!merge_attr);
2400 DECL_DECLARED_INLINE_P (olddecl)
2401 = DECL_DECLARED_INLINE_P (newdecl);
2403 DECL_DISREGARD_INLINE_LIMITS (olddecl)
2404 = DECL_DISREGARD_INLINE_LIMITS (newdecl);
2406 DECL_UNINLINABLE (olddecl) = DECL_UNINLINABLE (newdecl);
2408 else if (new_defines_function && DECL_INITIAL (olddecl))
2410 /* Never inline re-defined extern inline functions.
2411 FIXME: this could be better handled by keeping both
2412 function as separate declarations. */
2413 DECL_UNINLINABLE (newdecl) = 1;
2415 else
2417 if (DECL_PENDING_INLINE_P (olddecl))
2419 DECL_PENDING_INLINE_P (newdecl) = 1;
2420 DECL_PENDING_INLINE_INFO (newdecl)
2421 = DECL_PENDING_INLINE_INFO (olddecl);
2423 else if (DECL_PENDING_INLINE_P (newdecl))
2425 else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
2426 DECL_SAVED_FUNCTION_DATA (newdecl)
2427 = DECL_SAVED_FUNCTION_DATA (olddecl);
2429 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2431 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2432 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2434 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2435 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2436 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2437 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2440 /* Preserve abstractness on cloned [cd]tors. */
2441 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2443 /* Update newdecl's parms to point at olddecl. */
2444 for (parm = DECL_ARGUMENTS (newdecl); parm;
2445 parm = DECL_CHAIN (parm))
2446 DECL_CONTEXT (parm) = olddecl;
2448 if (! types_match)
2450 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2451 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2452 COPY_DECL_RTL (newdecl, olddecl);
2454 if (! types_match || new_defines_function)
2456 /* These need to be copied so that the names are available.
2457 Note that if the types do match, we'll preserve inline
2458 info and other bits, but if not, we won't. */
2459 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2460 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2462 /* If redeclaring a builtin function, it stays built in
2463 if newdecl is a gnu_inline definition, or if newdecl is just
2464 a declaration. */
2465 if (DECL_BUILT_IN (olddecl)
2466 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2468 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2469 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2470 /* If we're keeping the built-in definition, keep the rtl,
2471 regardless of declaration matches. */
2472 COPY_DECL_RTL (olddecl, newdecl);
2473 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2475 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2476 switch (fncode)
2478 /* If a compatible prototype of these builtin functions
2479 is seen, assume the runtime implements it with the
2480 expected semantics. */
2481 case BUILT_IN_STPCPY:
2482 if (builtin_decl_explicit_p (fncode))
2483 set_builtin_decl_implicit_p (fncode, true);
2484 break;
2485 default:
2486 if (builtin_decl_explicit_p (fncode))
2487 set_builtin_decl_declared_p (fncode, true);
2488 break;
2492 copy_attributes_to_builtin (newdecl);
2494 if (new_defines_function)
2495 /* If defining a function declared with other language
2496 linkage, use the previously declared language linkage. */
2497 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2498 else if (types_match)
2500 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2501 /* Don't clear out the arguments if we're just redeclaring a
2502 function. */
2503 if (DECL_ARGUMENTS (olddecl))
2504 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2507 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2508 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2510 /* Now preserve various other info from the definition. */
2511 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2512 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2513 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2514 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2516 /* Warn about conflicting visibility specifications. */
2517 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2518 && DECL_VISIBILITY_SPECIFIED (newdecl)
2519 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2521 if (warning_at (newdecl_loc, OPT_Wattributes,
2522 "%qD: visibility attribute ignored because it "
2523 "conflicts with previous declaration", newdecl))
2524 inform (olddecl_loc,
2525 "previous declaration of %qD", olddecl);
2527 /* Choose the declaration which specified visibility. */
2528 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2530 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2531 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2533 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2534 so keep this behavior. */
2535 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2537 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2538 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2540 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2541 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2543 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2544 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2546 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2547 if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2548 > DECL_WARN_IF_NOT_ALIGN (newdecl))
2549 SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2550 DECL_WARN_IF_NOT_ALIGN (olddecl));
2551 if (TREE_CODE (newdecl) == FIELD_DECL)
2552 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2554 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2555 with that from NEWDECL below. */
2556 if (DECL_LANG_SPECIFIC (olddecl))
2558 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2559 != DECL_LANG_SPECIFIC (newdecl));
2560 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2563 /* Merge the USED information. */
2564 if (TREE_USED (olddecl))
2565 TREE_USED (newdecl) = 1;
2566 else if (TREE_USED (newdecl))
2567 TREE_USED (olddecl) = 1;
2568 if (VAR_P (newdecl))
2570 if (DECL_READ_P (olddecl))
2571 DECL_READ_P (newdecl) = 1;
2572 else if (DECL_READ_P (newdecl))
2573 DECL_READ_P (olddecl) = 1;
2575 if (DECL_PRESERVE_P (olddecl))
2576 DECL_PRESERVE_P (newdecl) = 1;
2577 else if (DECL_PRESERVE_P (newdecl))
2578 DECL_PRESERVE_P (olddecl) = 1;
2580 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2581 to olddecl and deleted. */
2582 if (TREE_CODE (newdecl) == FUNCTION_DECL
2583 && DECL_FUNCTION_VERSIONED (olddecl))
2585 /* Set the flag for newdecl so that it gets copied to olddecl. */
2586 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2587 /* newdecl will be purged after copying to olddecl and is no longer
2588 a version. */
2589 cgraph_node::delete_function_version_by_decl (newdecl);
2592 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2594 int function_size;
2595 struct symtab_node *snode = symtab_node::get (olddecl);
2597 function_size = sizeof (struct tree_decl_common);
2599 memcpy ((char *) olddecl + sizeof (struct tree_common),
2600 (char *) newdecl + sizeof (struct tree_common),
2601 function_size - sizeof (struct tree_common));
2603 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2604 (char *) newdecl + sizeof (struct tree_decl_common),
2605 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2607 /* Preserve symtab node mapping. */
2608 olddecl->decl_with_vis.symtab_node = snode;
2610 if (new_template_info)
2611 /* If newdecl is a template instantiation, it is possible that
2612 the following sequence of events has occurred:
2614 o A friend function was declared in a class template. The
2615 class template was instantiated.
2617 o The instantiation of the friend declaration was
2618 recorded on the instantiation list, and is newdecl.
2620 o Later, however, instantiate_class_template called pushdecl
2621 on the newdecl to perform name injection. But, pushdecl in
2622 turn called duplicate_decls when it discovered that another
2623 declaration of a global function with the same name already
2624 existed.
2626 o Here, in duplicate_decls, we decided to clobber newdecl.
2628 If we're going to do that, we'd better make sure that
2629 olddecl, and not newdecl, is on the list of
2630 instantiations so that if we try to do the instantiation
2631 again we won't get the clobbered declaration. */
2632 reregister_specialization (newdecl,
2633 new_template_info,
2634 olddecl);
2636 else
2638 size_t size = tree_code_size (TREE_CODE (newdecl));
2640 memcpy ((char *) olddecl + sizeof (struct tree_common),
2641 (char *) newdecl + sizeof (struct tree_common),
2642 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2643 switch (TREE_CODE (newdecl))
2645 case LABEL_DECL:
2646 case VAR_DECL:
2647 case RESULT_DECL:
2648 case PARM_DECL:
2649 case FIELD_DECL:
2650 case TYPE_DECL:
2651 case CONST_DECL:
2653 struct symtab_node *snode = NULL;
2655 if (VAR_P (newdecl)
2656 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2657 || DECL_EXTERNAL (olddecl)))
2658 snode = symtab_node::get (olddecl);
2659 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2660 (char *) newdecl + sizeof (struct tree_decl_common),
2661 size - sizeof (struct tree_decl_common)
2662 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2663 if (VAR_P (newdecl))
2664 olddecl->decl_with_vis.symtab_node = snode;
2666 break;
2667 default:
2668 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2669 (char *) newdecl + sizeof (struct tree_decl_common),
2670 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2671 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2672 break;
2676 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2678 if (DECL_EXTERNAL (olddecl)
2679 || TREE_PUBLIC (olddecl)
2680 || TREE_STATIC (olddecl))
2682 /* Merge the section attribute.
2683 We want to issue an error if the sections conflict but that must be
2684 done later in decl_attributes since we are called before attributes
2685 are assigned. */
2686 if (DECL_SECTION_NAME (newdecl) != NULL)
2687 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2689 if (DECL_ONE_ONLY (newdecl))
2691 struct symtab_node *oldsym, *newsym;
2692 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2693 oldsym = cgraph_node::get_create (olddecl);
2694 else
2695 oldsym = varpool_node::get_create (olddecl);
2696 newsym = symtab_node::get (newdecl);
2697 oldsym->set_comdat_group (newsym->get_comdat_group ());
2701 if (VAR_P (newdecl)
2702 && CP_DECL_THREAD_LOCAL_P (newdecl))
2704 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2705 if (!processing_template_decl)
2706 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2710 DECL_UID (olddecl) = olddecl_uid;
2711 if (olddecl_friend)
2712 DECL_FRIEND_P (olddecl) = 1;
2713 if (hidden_friend)
2715 DECL_ANTICIPATED (olddecl) = 1;
2716 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2719 /* NEWDECL contains the merged attribute lists.
2720 Update OLDDECL to be the same. */
2721 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2723 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2724 so that encode_section_info has a chance to look at the new decl
2725 flags and attributes. */
2726 if (DECL_RTL_SET_P (olddecl)
2727 && (TREE_CODE (olddecl) == FUNCTION_DECL
2728 || (VAR_P (olddecl)
2729 && TREE_STATIC (olddecl))))
2730 make_decl_rtl (olddecl);
2732 /* The NEWDECL will no longer be needed. Because every out-of-class
2733 declaration of a member results in a call to duplicate_decls,
2734 freeing these nodes represents in a significant savings.
2736 Before releasing the node, be sore to remove function from symbol
2737 table that might have been inserted there to record comdat group.
2738 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2739 structure is shared in between newdecl and oldecl. */
2740 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2741 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2742 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2744 struct symtab_node *snode = symtab_node::get (newdecl);
2745 if (snode)
2746 snode->remove ();
2749 /* Remove the associated constraints for newdecl, if any, before
2750 reclaiming memory. */
2751 if (flag_concepts)
2752 remove_constraints (newdecl);
2754 ggc_free (newdecl);
2756 return olddecl;
2759 /* Return zero if the declaration NEWDECL is valid
2760 when the declaration OLDDECL (assumed to be for the same name)
2761 has already been seen.
2762 Otherwise return an error message format string with a %s
2763 where the identifier should go. */
2765 static const char *
2766 redeclaration_error_message (tree newdecl, tree olddecl)
2768 if (TREE_CODE (newdecl) == TYPE_DECL)
2770 /* Because C++ can put things into name space for free,
2771 constructs like "typedef struct foo { ... } foo"
2772 would look like an erroneous redeclaration. */
2773 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2774 return NULL;
2775 else
2776 return G_("redefinition of %q#D");
2778 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2780 /* If this is a pure function, its olddecl will actually be
2781 the original initialization to `0' (which we force to call
2782 abort()). Don't complain about redefinition in this case. */
2783 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2784 && DECL_INITIAL (olddecl) == NULL_TREE)
2785 return NULL;
2787 /* If both functions come from different namespaces, this is not
2788 a redeclaration - this is a conflict with a used function. */
2789 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2790 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2791 && ! decls_match (olddecl, newdecl))
2792 return G_("%qD conflicts with used function");
2794 /* We'll complain about linkage mismatches in
2795 warn_extern_redeclared_static. */
2797 /* Defining the same name twice is no good. */
2798 if (decl_defined_p (olddecl)
2799 && decl_defined_p (newdecl))
2801 if (DECL_NAME (olddecl) == NULL_TREE)
2802 return G_("%q#D not declared in class");
2803 else if (!GNU_INLINE_P (olddecl)
2804 || GNU_INLINE_P (newdecl))
2805 return G_("redefinition of %q#D");
2808 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2810 bool olda = GNU_INLINE_P (olddecl);
2811 bool newa = GNU_INLINE_P (newdecl);
2813 if (olda != newa)
2815 if (newa)
2816 return G_("%q+D redeclared inline with "
2817 "%<gnu_inline%> attribute");
2818 else
2819 return G_("%q+D redeclared inline without "
2820 "%<gnu_inline%> attribute");
2824 check_abi_tag_redeclaration
2825 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2826 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2828 return NULL;
2830 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2832 tree nt, ot;
2834 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2836 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2837 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2838 return G_("redefinition of %q#D");
2839 return NULL;
2842 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2843 || (DECL_TEMPLATE_RESULT (newdecl)
2844 == DECL_TEMPLATE_RESULT (olddecl)))
2845 return NULL;
2847 nt = DECL_TEMPLATE_RESULT (newdecl);
2848 if (DECL_TEMPLATE_INFO (nt))
2849 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2850 ot = DECL_TEMPLATE_RESULT (olddecl);
2851 if (DECL_TEMPLATE_INFO (ot))
2852 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2853 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2854 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2855 return G_("redefinition of %q#D");
2857 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2859 bool olda = GNU_INLINE_P (ot);
2860 bool newa = GNU_INLINE_P (nt);
2862 if (olda != newa)
2864 if (newa)
2865 return G_("%q+D redeclared inline with "
2866 "%<gnu_inline%> attribute");
2867 else
2868 return G_("%q+D redeclared inline without "
2869 "%<gnu_inline%> attribute");
2873 /* Core issue #226 (C++0x):
2875 If a friend function template declaration specifies a
2876 default template-argument, that declaration shall be a
2877 definition and shall be the only declaration of the
2878 function template in the translation unit. */
2879 if ((cxx_dialect != cxx98)
2880 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2881 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2882 /*is_primary=*/true,
2883 /*is_partial=*/false,
2884 /*is_friend_decl=*/2))
2885 return G_("redeclaration of friend %q#D "
2886 "may not have default template arguments");
2888 return NULL;
2890 else if (VAR_P (newdecl)
2891 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2892 && (! DECL_LANG_SPECIFIC (olddecl)
2893 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2894 || CP_DECL_THREAD_LOCAL_P (newdecl)))
2896 /* Only variables can be thread-local, and all declarations must
2897 agree on this property. */
2898 if (CP_DECL_THREAD_LOCAL_P (newdecl))
2899 return G_("thread-local declaration of %q#D follows "
2900 "non-thread-local declaration");
2901 else
2902 return G_("non-thread-local declaration of %q#D follows "
2903 "thread-local declaration");
2905 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2907 /* The objects have been declared at namespace scope. If either
2908 is a member of an anonymous union, then this is an invalid
2909 redeclaration. For example:
2911 int i;
2912 union { int i; };
2914 is invalid. */
2915 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2916 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2917 return G_("redeclaration of %q#D");
2918 /* If at least one declaration is a reference, there is no
2919 conflict. For example:
2921 int i = 3;
2922 extern int i;
2924 is valid. */
2925 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2926 return NULL;
2928 /* Static data member declared outside a class definition
2929 if the variable is defined within the class with constexpr
2930 specifier is declaration rather than definition (and
2931 deprecated). */
2932 if (cxx_dialect >= cxx17
2933 && VAR_P (olddecl)
2934 && DECL_CLASS_SCOPE_P (olddecl)
2935 && DECL_DECLARED_CONSTEXPR_P (olddecl)
2936 && !DECL_INITIAL (newdecl))
2938 DECL_EXTERNAL (newdecl) = 1;
2939 /* For now, only warn with explicit -Wdeprecated. */
2940 if (global_options_set.x_warn_deprecated
2941 && warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
2942 "redundant redeclaration of %<constexpr%> static "
2943 "data member %qD", newdecl))
2944 inform (DECL_SOURCE_LOCATION (olddecl),
2945 "previous declaration of %qD", olddecl);
2946 return NULL;
2949 /* Reject two definitions. */
2950 return G_("redefinition of %q#D");
2952 else
2954 /* Objects declared with block scope: */
2955 /* Reject two definitions, and reject a definition
2956 together with an external reference. */
2957 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2958 return G_("redeclaration of %q#D");
2959 return NULL;
2964 /* Hash and equality functions for the named_label table. */
2966 hashval_t
2967 named_label_hash::hash (const value_type entry)
2969 return IDENTIFIER_HASH_VALUE (entry->name);
2972 bool
2973 named_label_hash::equal (const value_type entry, compare_type name)
2975 return name == entry->name;
2978 /* Look for a label named ID in the current function. If one cannot
2979 be found, create one. Return the named_label_entry, or NULL on
2980 failure. */
2982 static named_label_entry *
2983 lookup_label_1 (tree id, bool making_local_p)
2985 /* You can't use labels at global scope. */
2986 if (current_function_decl == NULL_TREE)
2988 error ("label %qE referenced outside of any function", id);
2989 return NULL;
2992 if (!named_labels)
2993 named_labels = hash_table<named_label_hash>::create_ggc (13);
2995 hashval_t hash = IDENTIFIER_HASH_VALUE (id);
2996 named_label_entry **slot
2997 = named_labels->find_slot_with_hash (id, hash, INSERT);
2998 named_label_entry *old = *slot;
3000 if (old && old->label_decl)
3002 if (!making_local_p)
3003 return old;
3005 if (old->binding_level == current_binding_level)
3007 error ("local label %qE conflicts with existing label", id);
3008 inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
3009 return NULL;
3013 /* We are making a new decl, create or reuse the named_label_entry */
3014 named_label_entry *ent = NULL;
3015 if (old && !old->label_decl)
3016 ent = old;
3017 else
3019 ent = ggc_cleared_alloc<named_label_entry> ();
3020 ent->name = id;
3021 ent->outer = old;
3022 *slot = ent;
3025 /* Now create the LABEL_DECL. */
3026 tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3028 DECL_CONTEXT (decl) = current_function_decl;
3029 SET_DECL_MODE (decl, VOIDmode);
3030 if (making_local_p)
3032 C_DECLARED_LABEL_FLAG (decl) = true;
3033 DECL_CHAIN (decl) = current_binding_level->names;
3034 current_binding_level->names = decl;
3037 ent->label_decl = decl;
3039 return ent;
3042 /* Wrapper for lookup_label_1. */
3044 tree
3045 lookup_label (tree id)
3047 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3048 named_label_entry *ent = lookup_label_1 (id, false);
3049 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3050 return ent ? ent->label_decl : NULL_TREE;
3053 tree
3054 declare_local_label (tree id)
3056 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3057 named_label_entry *ent = lookup_label_1 (id, true);
3058 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3059 return ent ? ent->label_decl : NULL_TREE;
3062 /* Returns nonzero if it is ill-formed to jump past the declaration of
3063 DECL. Returns 2 if it's also a real problem. */
3065 static int
3066 decl_jump_unsafe (tree decl)
3068 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3069 with automatic storage duration is not in scope to a point where it is
3070 in scope is ill-formed unless the variable has scalar type, class type
3071 with a trivial default constructor and a trivial destructor, a
3072 cv-qualified version of one of these types, or an array of one of the
3073 preceding types and is declared without an initializer (8.5). */
3074 tree type = TREE_TYPE (decl);
3076 if (!VAR_P (decl) || TREE_STATIC (decl)
3077 || type == error_mark_node)
3078 return 0;
3080 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3081 || variably_modified_type_p (type, NULL_TREE))
3082 return 2;
3084 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3085 return 1;
3087 return 0;
3090 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3091 to the user. */
3093 static bool
3094 identify_goto (tree decl, location_t loc, const location_t *locus,
3095 diagnostic_t diag_kind)
3097 bool complained
3098 = emit_diagnostic (diag_kind, loc, 0,
3099 decl ? N_("jump to label %qD")
3100 : N_("jump to case label"), decl);
3101 if (complained && locus)
3102 inform (*locus, " from here");
3103 return complained;
3106 /* Check that a single previously seen jump to a newly defined label
3107 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3108 the jump context; NAMES are the names in scope in LEVEL at the jump
3109 context; LOCUS is the source position of the jump or 0. Returns
3110 true if all is well. */
3112 static bool
3113 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3114 bool exited_omp, const location_t *locus)
3116 cp_binding_level *b;
3117 bool complained = false;
3118 int identified = 0;
3119 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3121 if (exited_omp)
3123 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3124 if (complained)
3125 inform (input_location, " exits OpenMP structured block");
3126 saw_omp = true;
3127 identified = 2;
3130 for (b = current_binding_level; b ; b = b->level_chain)
3132 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3134 for (new_decls = b->names; new_decls != old_decls;
3135 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3136 : TREE_CHAIN (new_decls)))
3138 int problem = decl_jump_unsafe (new_decls);
3139 if (! problem)
3140 continue;
3142 if (!identified)
3144 complained = identify_goto (decl, input_location, locus,
3145 DK_PERMERROR);
3146 identified = 1;
3148 if (complained)
3150 if (problem > 1)
3151 inform (DECL_SOURCE_LOCATION (new_decls),
3152 " crosses initialization of %q#D", new_decls);
3153 else
3154 inform (DECL_SOURCE_LOCATION (new_decls),
3155 " enters scope of %q#D, which has "
3156 "non-trivial destructor", new_decls);
3160 if (b == level)
3161 break;
3163 const char *inf = NULL;
3164 location_t loc = input_location;
3165 switch (b->kind)
3167 case sk_try:
3168 if (!saw_eh)
3169 inf = N_("enters try block");
3170 saw_eh = true;
3171 break;
3173 case sk_catch:
3174 if (!saw_eh)
3175 inf = N_("enters catch block");
3176 saw_eh = true;
3177 break;
3179 case sk_omp:
3180 if (!saw_omp)
3181 inf = N_("enters OpenMP structured block");
3182 saw_omp = true;
3183 break;
3185 case sk_transaction:
3186 if (!saw_tm)
3187 inf = N_("enters synchronized or atomic statement");
3188 saw_tm = true;
3189 break;
3191 case sk_block:
3192 if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3194 inf = N_("enters constexpr if statement");
3195 loc = EXPR_LOCATION (b->level_chain->this_entity);
3196 saw_cxif = true;
3198 break;
3200 default:
3201 break;
3204 if (inf)
3206 if (identified < 2)
3207 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3208 identified = 2;
3209 if (complained)
3210 inform (loc, " %s", inf);
3214 return !identified;
3217 static void
3218 check_previous_goto (tree decl, struct named_label_use_entry *use)
3220 check_previous_goto_1 (decl, use->binding_level,
3221 use->names_in_scope, use->in_omp_scope,
3222 &use->o_goto_locus);
3225 static bool
3226 check_switch_goto (cp_binding_level* level)
3228 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3231 /* Check that a new jump to a label DECL is OK. Called by
3232 finish_goto_stmt. */
3234 void
3235 check_goto (tree decl)
3237 /* We can't know where a computed goto is jumping.
3238 So we assume that it's OK. */
3239 if (TREE_CODE (decl) != LABEL_DECL)
3240 return;
3242 /* We didn't record any information about this label when we created it,
3243 and there's not much point since it's trivial to analyze as a return. */
3244 if (decl == cdtor_label)
3245 return;
3247 hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3248 named_label_entry **slot
3249 = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3250 named_label_entry *ent = *slot;
3252 /* If the label hasn't been defined yet, defer checking. */
3253 if (! DECL_INITIAL (decl))
3255 /* Don't bother creating another use if the last goto had the
3256 same data, and will therefore create the same set of errors. */
3257 if (ent->uses
3258 && ent->uses->names_in_scope == current_binding_level->names)
3259 return;
3261 named_label_use_entry *new_use
3262 = ggc_alloc<named_label_use_entry> ();
3263 new_use->binding_level = current_binding_level;
3264 new_use->names_in_scope = current_binding_level->names;
3265 new_use->o_goto_locus = input_location;
3266 new_use->in_omp_scope = false;
3268 new_use->next = ent->uses;
3269 ent->uses = new_use;
3270 return;
3273 bool saw_catch = false, complained = false;
3274 int identified = 0;
3275 tree bad;
3276 unsigned ix;
3278 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3279 || ent->in_constexpr_if
3280 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3282 diagnostic_t diag_kind = DK_PERMERROR;
3283 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3284 || ent->in_transaction_scope || ent->in_omp_scope)
3285 diag_kind = DK_ERROR;
3286 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3287 &input_location, diag_kind);
3288 identified = 1 + (diag_kind == DK_ERROR);
3291 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3293 int u = decl_jump_unsafe (bad);
3295 if (u > 1 && DECL_ARTIFICIAL (bad))
3297 /* Can't skip init of __exception_info. */
3298 if (identified == 1)
3300 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3301 &input_location, DK_ERROR);
3302 identified = 2;
3304 if (complained)
3305 inform (DECL_SOURCE_LOCATION (bad), " enters catch block");
3306 saw_catch = true;
3308 else if (complained)
3310 if (u > 1)
3311 inform (DECL_SOURCE_LOCATION (bad),
3312 " skips initialization of %q#D", bad);
3313 else
3314 inform (DECL_SOURCE_LOCATION (bad),
3315 " enters scope of %q#D which has "
3316 "non-trivial destructor", bad);
3320 if (complained)
3322 if (ent->in_try_scope)
3323 inform (input_location, " enters try block");
3324 else if (ent->in_catch_scope && !saw_catch)
3325 inform (input_location, " enters catch block");
3326 else if (ent->in_transaction_scope)
3327 inform (input_location, " enters synchronized or atomic statement");
3328 else if (ent->in_constexpr_if)
3329 inform (input_location, " enters %<constexpr%> if statement");
3332 if (ent->in_omp_scope)
3334 if (complained)
3335 inform (input_location, " enters OpenMP structured block");
3337 else if (flag_openmp)
3338 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3340 if (b == ent->binding_level)
3341 break;
3342 if (b->kind == sk_omp)
3344 if (identified < 2)
3346 complained = identify_goto (decl,
3347 DECL_SOURCE_LOCATION (decl),
3348 &input_location, DK_ERROR);
3349 identified = 2;
3351 if (complained)
3352 inform (input_location, " exits OpenMP structured block");
3353 break;
3358 /* Check that a return is ok wrt OpenMP structured blocks.
3359 Called by finish_return_stmt. Returns true if all is well. */
3361 bool
3362 check_omp_return (void)
3364 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3365 if (b->kind == sk_omp)
3367 error ("invalid exit from OpenMP structured block");
3368 return false;
3370 else if (b->kind == sk_function_parms)
3371 break;
3372 return true;
3375 /* Define a label, specifying the location in the source file.
3376 Return the LABEL_DECL node for the label. */
3378 static tree
3379 define_label_1 (location_t location, tree name)
3381 /* After labels, make any new cleanups in the function go into their
3382 own new (temporary) binding contour. */
3383 for (cp_binding_level *p = current_binding_level;
3384 p->kind != sk_function_parms;
3385 p = p->level_chain)
3386 p->more_cleanups_ok = 0;
3388 named_label_entry *ent = lookup_label_1 (name, false);
3389 tree decl = ent->label_decl;
3391 if (DECL_INITIAL (decl) != NULL_TREE)
3393 error ("duplicate label %qD", decl);
3394 return error_mark_node;
3396 else
3398 /* Mark label as having been defined. */
3399 DECL_INITIAL (decl) = error_mark_node;
3400 /* Say where in the source. */
3401 DECL_SOURCE_LOCATION (decl) = location;
3403 ent->binding_level = current_binding_level;
3404 ent->names_in_scope = current_binding_level->names;
3406 for (named_label_use_entry *use = ent->uses; use; use = use->next)
3407 check_previous_goto (decl, use);
3408 ent->uses = NULL;
3411 return decl;
3414 /* Wrapper for define_label_1. */
3416 tree
3417 define_label (location_t location, tree name)
3419 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3420 tree ret = define_label_1 (location, name);
3421 timevar_cond_stop (TV_NAME_LOOKUP, running);
3422 return ret;
3426 struct cp_switch
3428 cp_binding_level *level;
3429 struct cp_switch *next;
3430 /* The SWITCH_STMT being built. */
3431 tree switch_stmt;
3432 /* A splay-tree mapping the low element of a case range to the high
3433 element, or NULL_TREE if there is no high element. Used to
3434 determine whether or not a new case label duplicates an old case
3435 label. We need a tree, rather than simply a hash table, because
3436 of the GNU case range extension. */
3437 splay_tree cases;
3438 /* Remember whether there was a case value that is outside the
3439 range of the original type of the controlling expression. */
3440 bool outside_range_p;
3441 /* Remember whether a default: case label has been seen. */
3442 bool has_default_p;
3443 /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT. */
3444 bool break_stmt_seen_p;
3445 /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3446 where BREAK_STMT doesn't belong to the SWITCH_STMT. */
3447 bool in_loop_body_p;
3450 /* A stack of the currently active switch statements. The innermost
3451 switch statement is on the top of the stack. There is no need to
3452 mark the stack for garbage collection because it is only active
3453 during the processing of the body of a function, and we never
3454 collect at that point. */
3456 static struct cp_switch *switch_stack;
3458 /* Called right after a switch-statement condition is parsed.
3459 SWITCH_STMT is the switch statement being parsed. */
3461 void
3462 push_switch (tree switch_stmt)
3464 struct cp_switch *p = XNEW (struct cp_switch);
3465 p->level = current_binding_level;
3466 p->next = switch_stack;
3467 p->switch_stmt = switch_stmt;
3468 p->cases = splay_tree_new (case_compare, NULL, NULL);
3469 p->outside_range_p = false;
3470 p->has_default_p = false;
3471 p->break_stmt_seen_p = false;
3472 p->in_loop_body_p = false;
3473 switch_stack = p;
3476 void
3477 pop_switch (void)
3479 struct cp_switch *cs = switch_stack;
3480 location_t switch_location;
3482 /* Emit warnings as needed. */
3483 switch_location = cp_expr_loc_or_loc (cs->switch_stmt, input_location);
3484 const bool bool_cond_p
3485 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3486 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3487 if (!processing_template_decl)
3488 c_do_switch_warnings (cs->cases, switch_location,
3489 SWITCH_STMT_TYPE (cs->switch_stmt),
3490 SWITCH_STMT_COND (cs->switch_stmt),
3491 bool_cond_p, cs->outside_range_p);
3493 /* For the benefit of block_may_fallthru remember if the switch body
3494 case labels cover all possible values and if there are break; stmts. */
3495 if (cs->has_default_p
3496 || (!processing_template_decl
3497 && c_switch_covers_all_cases_p (cs->cases,
3498 SWITCH_STMT_TYPE (cs->switch_stmt))))
3499 SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3500 if (!cs->break_stmt_seen_p)
3501 SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3502 gcc_assert (!cs->in_loop_body_p);
3503 splay_tree_delete (cs->cases);
3504 switch_stack = switch_stack->next;
3505 free (cs);
3508 /* Note that a BREAK_STMT is about to be added. If it is inside of
3509 a SWITCH_STMT and not inside of a loop body inside of it, note
3510 in switch_stack we've seen a BREAK_STMT. */
3512 void
3513 note_break_stmt (void)
3515 if (switch_stack && !switch_stack->in_loop_body_p)
3516 switch_stack->break_stmt_seen_p = true;
3519 /* Note the start of processing of an iteration statement's body.
3520 The note_break_stmt function will do nothing while processing it.
3521 Return a flag that should be passed to note_iteration_stmt_body_end. */
3523 bool
3524 note_iteration_stmt_body_start (void)
3526 if (!switch_stack)
3527 return false;
3528 bool ret = switch_stack->in_loop_body_p;
3529 switch_stack->in_loop_body_p = true;
3530 return ret;
3533 /* Note the end of processing of an iteration statement's body. */
3535 void
3536 note_iteration_stmt_body_end (bool prev)
3538 if (switch_stack)
3539 switch_stack->in_loop_body_p = prev;
3542 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3543 condition. Note that if TYPE and VALUE are already integral we don't
3544 really do the conversion because the language-independent
3545 warning/optimization code will work better that way. */
3547 static tree
3548 case_conversion (tree type, tree value)
3550 if (value == NULL_TREE)
3551 return value;
3553 value = mark_rvalue_use (value);
3555 if (cxx_dialect >= cxx11
3556 && (SCOPED_ENUM_P (type)
3557 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3559 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3560 type = type_promotes_to (type);
3561 value = (perform_implicit_conversion_flags
3562 (type, value, tf_warning_or_error,
3563 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3565 return cxx_constant_value (value);
3568 /* Note that we've seen a definition of a case label, and complain if this
3569 is a bad place for one. */
3571 tree
3572 finish_case_label (location_t loc, tree low_value, tree high_value)
3574 tree cond, r;
3575 cp_binding_level *p;
3576 tree type;
3578 if (low_value == NULL_TREE && high_value == NULL_TREE)
3579 switch_stack->has_default_p = true;
3581 if (processing_template_decl)
3583 tree label;
3585 /* For templates, just add the case label; we'll do semantic
3586 analysis at instantiation-time. */
3587 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3588 return add_stmt (build_case_label (low_value, high_value, label));
3591 /* Find the condition on which this switch statement depends. */
3592 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3593 if (cond && TREE_CODE (cond) == TREE_LIST)
3594 cond = TREE_VALUE (cond);
3596 if (!check_switch_goto (switch_stack->level))
3597 return error_mark_node;
3599 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3601 low_value = case_conversion (type, low_value);
3602 high_value = case_conversion (type, high_value);
3604 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3605 low_value, high_value,
3606 &switch_stack->outside_range_p);
3608 /* After labels, make any new cleanups in the function go into their
3609 own new (temporary) binding contour. */
3610 for (p = current_binding_level;
3611 p->kind != sk_function_parms;
3612 p = p->level_chain)
3613 p->more_cleanups_ok = 0;
3615 return r;
3618 struct typename_info {
3619 tree scope;
3620 tree name;
3621 tree template_id;
3622 bool enum_p;
3623 bool class_p;
3626 struct typename_hasher : ggc_ptr_hash<tree_node>
3628 typedef typename_info *compare_type;
3630 /* Hash a TYPENAME_TYPE. */
3632 static hashval_t
3633 hash (tree t)
3635 hashval_t hash;
3637 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3638 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3640 return hash;
3643 /* Compare two TYPENAME_TYPEs. */
3645 static bool
3646 equal (tree t1, const typename_info *t2)
3648 return (TYPE_IDENTIFIER (t1) == t2->name
3649 && TYPE_CONTEXT (t1) == t2->scope
3650 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3651 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3652 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3656 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3657 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3659 Returns the new TYPENAME_TYPE. */
3661 static GTY (()) hash_table<typename_hasher> *typename_htab;
3663 tree
3664 build_typename_type (tree context, tree name, tree fullname,
3665 enum tag_types tag_type)
3667 tree t;
3668 tree d;
3669 typename_info ti;
3670 tree *e;
3671 hashval_t hash;
3673 if (typename_htab == NULL)
3674 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3676 ti.scope = FROB_CONTEXT (context);
3677 ti.name = name;
3678 ti.template_id = fullname;
3679 ti.enum_p = tag_type == enum_type;
3680 ti.class_p = (tag_type == class_type
3681 || tag_type == record_type
3682 || tag_type == union_type);
3683 hash = (htab_hash_pointer (ti.scope)
3684 ^ htab_hash_pointer (ti.name));
3686 /* See if we already have this type. */
3687 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3688 if (*e)
3689 t = *e;
3690 else
3692 /* Build the TYPENAME_TYPE. */
3693 t = cxx_make_type (TYPENAME_TYPE);
3694 TYPE_CONTEXT (t) = ti.scope;
3695 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3696 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3697 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3699 /* Build the corresponding TYPE_DECL. */
3700 d = build_decl (input_location, TYPE_DECL, name, t);
3701 TYPE_NAME (TREE_TYPE (d)) = d;
3702 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3703 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3704 DECL_ARTIFICIAL (d) = 1;
3706 /* Store it in the hash table. */
3707 *e = t;
3709 /* TYPENAME_TYPEs must always be compared structurally, because
3710 they may or may not resolve down to another type depending on
3711 the currently open classes. */
3712 SET_TYPE_STRUCTURAL_EQUALITY (t);
3715 return t;
3718 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3719 provided to name the type. Returns an appropriate type, unless an
3720 error occurs, in which case error_mark_node is returned. If we
3721 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3722 return that, rather than the _TYPE it corresponds to, in other
3723 cases we look through the type decl. If TF_ERROR is set, complain
3724 about errors, otherwise be quiet. */
3726 tree
3727 make_typename_type (tree context, tree name, enum tag_types tag_type,
3728 tsubst_flags_t complain)
3730 tree fullname;
3731 tree t;
3732 bool want_template;
3734 if (name == error_mark_node
3735 || context == NULL_TREE
3736 || context == error_mark_node)
3737 return error_mark_node;
3739 if (TYPE_P (name))
3741 if (!(TYPE_LANG_SPECIFIC (name)
3742 && (CLASSTYPE_IS_TEMPLATE (name)
3743 || CLASSTYPE_USE_TEMPLATE (name))))
3744 name = TYPE_IDENTIFIER (name);
3745 else
3746 /* Create a TEMPLATE_ID_EXPR for the type. */
3747 name = build_nt (TEMPLATE_ID_EXPR,
3748 CLASSTYPE_TI_TEMPLATE (name),
3749 CLASSTYPE_TI_ARGS (name));
3751 else if (TREE_CODE (name) == TYPE_DECL)
3752 name = DECL_NAME (name);
3754 fullname = name;
3756 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3758 name = TREE_OPERAND (name, 0);
3759 if (DECL_TYPE_TEMPLATE_P (name))
3760 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3761 if (TREE_CODE (name) != IDENTIFIER_NODE)
3763 if (complain & tf_error)
3764 error ("%qD is not a type", name);
3765 return error_mark_node;
3768 if (TREE_CODE (name) == TEMPLATE_DECL)
3770 if (complain & tf_error)
3771 error ("%qD used without template arguments", name);
3772 return error_mark_node;
3774 gcc_assert (identifier_p (name));
3775 gcc_assert (TYPE_P (context));
3777 if (!MAYBE_CLASS_TYPE_P (context))
3779 if (complain & tf_error)
3780 error ("%q#T is not a class", context);
3781 return error_mark_node;
3784 /* When the CONTEXT is a dependent type, NAME could refer to a
3785 dependent base class of CONTEXT. But look inside it anyway
3786 if CONTEXT is a currently open scope, in case it refers to a
3787 member of the current instantiation or a non-dependent base;
3788 lookup will stop when we hit a dependent base. */
3789 if (!dependent_scope_p (context))
3790 /* We should only set WANT_TYPE when we're a nested typename type.
3791 Then we can give better diagnostics if we find a non-type. */
3792 t = lookup_field (context, name, 2, /*want_type=*/true);
3793 else
3794 t = NULL_TREE;
3796 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3797 return build_typename_type (context, name, fullname, tag_type);
3799 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3801 if (!t)
3803 if (complain & tf_error)
3805 if (!COMPLETE_TYPE_P (context))
3806 cxx_incomplete_type_error (NULL_TREE, context);
3807 else
3808 error (want_template ? G_("no class template named %q#T in %q#T")
3809 : G_("no type named %q#T in %q#T"), name, context);
3811 return error_mark_node;
3814 /* Pull out the template from an injected-class-name (or multiple). */
3815 if (want_template)
3816 t = maybe_get_template_decl_from_type_decl (t);
3818 if (TREE_CODE (t) == TREE_LIST)
3820 if (complain & tf_error)
3822 error ("lookup of %qT in %qT is ambiguous", name, context);
3823 print_candidates (t);
3825 return error_mark_node;
3828 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3830 if (complain & tf_error)
3831 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3832 context, name, t);
3833 return error_mark_node;
3835 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3837 if (complain & tf_error)
3838 error ("%<typename %T::%D%> names %q#T, which is not a type",
3839 context, name, t);
3840 return error_mark_node;
3843 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3844 return error_mark_node;
3846 /* If we are currently parsing a template and if T is a typedef accessed
3847 through CONTEXT then we need to remember and check access of T at
3848 template instantiation time. */
3849 add_typedef_to_current_template_for_access_check (t, context, input_location);
3851 if (want_template)
3852 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3853 NULL_TREE, context,
3854 /*entering_scope=*/0,
3855 complain | tf_user);
3857 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3858 t = TREE_TYPE (t);
3860 maybe_record_typedef_use (t);
3862 return t;
3865 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3866 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3867 in which case error_mark_node is returned.
3869 If PARM_LIST is non-NULL, also make sure that the template parameter
3870 list of TEMPLATE_DECL matches.
3872 If COMPLAIN zero, don't complain about any errors that occur. */
3874 tree
3875 make_unbound_class_template (tree context, tree name, tree parm_list,
3876 tsubst_flags_t complain)
3878 tree t;
3879 tree d;
3881 if (TYPE_P (name))
3882 name = TYPE_IDENTIFIER (name);
3883 else if (DECL_P (name))
3884 name = DECL_NAME (name);
3885 gcc_assert (identifier_p (name));
3887 if (!dependent_type_p (context)
3888 || currently_open_class (context))
3890 tree tmpl = NULL_TREE;
3892 if (MAYBE_CLASS_TYPE_P (context))
3893 tmpl = lookup_field (context, name, 0, false);
3895 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3896 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3898 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3900 if (complain & tf_error)
3901 error ("no class template named %q#T in %q#T", name, context);
3902 return error_mark_node;
3905 if (parm_list
3906 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3908 if (complain & tf_error)
3910 error ("template parameters do not match template %qD", tmpl);
3911 inform (DECL_SOURCE_LOCATION (tmpl),
3912 "%qD declared here", tmpl);
3914 return error_mark_node;
3917 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3918 complain))
3919 return error_mark_node;
3921 return tmpl;
3924 /* Build the UNBOUND_CLASS_TEMPLATE. */
3925 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3926 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3927 TREE_TYPE (t) = NULL_TREE;
3928 SET_TYPE_STRUCTURAL_EQUALITY (t);
3930 /* Build the corresponding TEMPLATE_DECL. */
3931 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3932 TYPE_NAME (TREE_TYPE (d)) = d;
3933 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3934 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3935 DECL_ARTIFICIAL (d) = 1;
3936 DECL_TEMPLATE_PARMS (d) = parm_list;
3938 return t;
3943 /* Push the declarations of builtin types into the global namespace.
3944 RID_INDEX is the index of the builtin type in the array
3945 RID_POINTERS. NAME is the name used when looking up the builtin
3946 type. TYPE is the _TYPE node for the builtin type.
3948 The calls to set_global_binding below should be
3949 eliminated. Built-in types should not be looked up name; their
3950 names are keywords that the parser can recognize. However, there
3951 is code in c-common.c that uses identifier_global_value to look up
3952 built-in types by name. */
3954 void
3955 record_builtin_type (enum rid rid_index,
3956 const char* name,
3957 tree type)
3959 tree decl = NULL_TREE;
3961 if (name)
3963 tree tname = get_identifier (name);
3964 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3965 DECL_ARTIFICIAL (tdecl) = 1;
3966 set_global_binding (tdecl);
3967 decl = tdecl;
3970 if ((int) rid_index < (int) RID_MAX)
3971 if (tree rname = ridpointers[(int) rid_index])
3972 if (!decl || DECL_NAME (decl) != rname)
3974 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3975 DECL_ARTIFICIAL (rdecl) = 1;
3976 set_global_binding (rdecl);
3977 if (!decl)
3978 decl = rdecl;
3981 if (decl)
3983 if (!TYPE_NAME (type))
3984 TYPE_NAME (type) = decl;
3985 debug_hooks->type_decl (decl, 0);
3989 /* Push a type into the namespace so that the back ends ignore it. */
3991 static void
3992 record_unknown_type (tree type, const char* name)
3994 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3995 TYPE_DECL, get_identifier (name), type));
3996 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3997 DECL_IGNORED_P (decl) = 1;
3998 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3999 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
4000 SET_TYPE_ALIGN (type, 1);
4001 TYPE_USER_ALIGN (type) = 0;
4002 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
4005 /* Create all the predefined identifiers. */
4007 static void
4008 initialize_predefined_identifiers (void)
4010 struct predefined_identifier
4012 const char *name; /* Name. */
4013 tree *node; /* Node to store it in. */
4014 cp_identifier_kind kind; /* Kind of identifier. */
4017 /* A table of identifiers to create at startup. */
4018 static const predefined_identifier predefined_identifiers[] = {
4019 {"C++", &lang_name_cplusplus, cik_normal},
4020 {"C", &lang_name_c, cik_normal},
4021 /* Some of these names have a trailing space so that it is
4022 impossible for them to conflict with names written by users. */
4023 {"__ct ", &ctor_identifier, cik_ctor},
4024 {"__ct_base ", &base_ctor_identifier, cik_ctor},
4025 {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4026 {"__dt ", &dtor_identifier, cik_dtor},
4027 {"__dt_base ", &base_dtor_identifier, cik_dtor},
4028 {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4029 {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4030 {"__conv_op ", &conv_op_identifier, cik_conv_op},
4031 {"__in_chrg", &in_charge_identifier, cik_normal},
4032 {"this", &this_identifier, cik_normal},
4033 {"__delta", &delta_identifier, cik_normal},
4034 {"__pfn", &pfn_identifier, cik_normal},
4035 {"_vptr", &vptr_identifier, cik_normal},
4036 {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4037 {"::", &global_identifier, cik_normal},
4038 {"std", &std_identifier, cik_normal},
4039 /* The demangler expects anonymous namespaces to be called
4040 something starting with '_GLOBAL__N_'. It no longer needs
4041 to be unique to the TU. */
4042 {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4043 {"auto", &auto_identifier, cik_normal},
4044 {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4045 {"initializer_list", &init_list_identifier, cik_normal},
4046 {NULL, NULL, cik_normal}
4049 for (const predefined_identifier *pid = predefined_identifiers;
4050 pid->name; ++pid)
4052 *pid->node = get_identifier (pid->name);
4053 /* Some of these identifiers already have a special kind. */
4054 if (pid->kind != cik_normal)
4055 set_identifier_kind (*pid->node, pid->kind);
4059 /* Create the predefined scalar types of C,
4060 and some nodes representing standard constants (0, 1, (void *)0).
4061 Initialize the global binding level.
4062 Make definitions for built-in primitive functions. */
4064 void
4065 cxx_init_decl_processing (void)
4067 tree void_ftype;
4068 tree void_ftype_ptr;
4070 /* Create all the identifiers we need. */
4071 initialize_predefined_identifiers ();
4073 /* Create the global variables. */
4074 push_to_top_level ();
4076 current_function_decl = NULL_TREE;
4077 current_binding_level = NULL;
4078 /* Enter the global namespace. */
4079 gcc_assert (global_namespace == NULL_TREE);
4080 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4081 void_type_node);
4082 TREE_PUBLIC (global_namespace) = 1;
4083 DECL_CONTEXT (global_namespace)
4084 = build_translation_unit_decl (get_identifier (main_input_filename));
4085 /* Remember whether we want the empty class passing ABI change warning
4086 in this TU. */
4087 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4088 = warn_abi && abi_version_crosses (12);
4089 debug_hooks->register_main_translation_unit
4090 (DECL_CONTEXT (global_namespace));
4091 begin_scope (sk_namespace, global_namespace);
4092 current_namespace = global_namespace;
4094 if (flag_visibility_ms_compat)
4095 default_visibility = VISIBILITY_HIDDEN;
4097 /* Initially, C. */
4098 current_lang_name = lang_name_c;
4100 /* Create the `std' namespace. */
4101 push_namespace (std_identifier);
4102 std_node = current_namespace;
4103 pop_namespace ();
4105 flag_noexcept_type = (cxx_dialect >= cxx17);
4107 c_common_nodes_and_builtins ();
4109 integer_two_node = build_int_cst (NULL_TREE, 2);
4111 /* Guess at the initial static decls size. */
4112 vec_alloc (static_decls, 500);
4114 /* ... and keyed classes. */
4115 vec_alloc (keyed_classes, 100);
4117 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4118 truthvalue_type_node = boolean_type_node;
4119 truthvalue_false_node = boolean_false_node;
4120 truthvalue_true_node = boolean_true_node;
4122 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4123 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4124 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4125 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4126 NULL_TREE);
4128 #if 0
4129 record_builtin_type (RID_MAX, NULL, string_type_node);
4130 #endif
4132 delta_type_node = ptrdiff_type_node;
4133 vtable_index_type = ptrdiff_type_node;
4135 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4136 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4137 void_ftype_ptr = build_function_type_list (void_type_node,
4138 ptr_type_node, NULL_TREE);
4139 void_ftype_ptr
4140 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4142 /* Create the conversion operator marker. This operator's DECL_NAME
4143 is in the identifier table, so we can use identifier equality to
4144 find it. */
4145 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4146 void_ftype);
4148 /* C++ extensions */
4150 unknown_type_node = make_node (LANG_TYPE);
4151 record_unknown_type (unknown_type_node, "unknown type");
4153 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4154 TREE_TYPE (unknown_type_node) = unknown_type_node;
4156 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4157 result. */
4158 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4159 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4161 init_list_type_node = make_node (LANG_TYPE);
4162 record_unknown_type (init_list_type_node, "init list");
4165 /* Make sure we get a unique function type, so we can give
4166 its pointer type a name. (This wins for gdb.) */
4167 tree vfunc_type = make_node (FUNCTION_TYPE);
4168 TREE_TYPE (vfunc_type) = integer_type_node;
4169 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4170 layout_type (vfunc_type);
4172 vtable_entry_type = build_pointer_type (vfunc_type);
4174 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4176 vtbl_type_node
4177 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4178 layout_type (vtbl_type_node);
4179 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4180 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4181 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4182 layout_type (vtbl_ptr_type_node);
4183 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4185 push_namespace (get_identifier ("__cxxabiv1"));
4186 abi_node = current_namespace;
4187 pop_namespace ();
4189 global_type_node = make_node (LANG_TYPE);
4190 record_unknown_type (global_type_node, "global type");
4192 any_targ_node = make_node (LANG_TYPE);
4193 record_unknown_type (any_targ_node, "any type");
4195 /* Now, C++. */
4196 current_lang_name = lang_name_cplusplus;
4198 if (aligned_new_threshold > 1
4199 && !pow2p_hwi (aligned_new_threshold))
4201 error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4202 aligned_new_threshold = 1;
4204 if (aligned_new_threshold == -1)
4205 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4206 if (aligned_new_threshold == 1)
4207 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4210 tree newattrs, extvisattr;
4211 tree newtype, deltype;
4212 tree ptr_ftype_sizetype;
4213 tree new_eh_spec;
4215 ptr_ftype_sizetype
4216 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4217 if (cxx_dialect == cxx98)
4219 tree bad_alloc_id;
4220 tree bad_alloc_type_node;
4221 tree bad_alloc_decl;
4223 push_namespace (std_identifier);
4224 bad_alloc_id = get_identifier ("bad_alloc");
4225 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4226 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4227 bad_alloc_decl
4228 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4229 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4230 pop_namespace ();
4232 new_eh_spec
4233 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4235 else
4236 new_eh_spec = noexcept_false_spec;
4238 /* Ensure attribs.c is initialized. */
4239 init_attributes ();
4241 /* Ensure constraint.cc is initialized. */
4242 init_constraint_processing ();
4244 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4245 NULL_TREE);
4246 newattrs = tree_cons (get_identifier ("alloc_size"),
4247 build_tree_list (NULL_TREE, integer_one_node),
4248 extvisattr);
4249 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4250 newtype = build_exception_variant (newtype, new_eh_spec);
4251 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4252 deltype = build_exception_variant (deltype, empty_except_spec);
4253 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4254 DECL_IS_MALLOC (opnew) = 1;
4255 DECL_IS_OPERATOR_NEW (opnew) = 1;
4256 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4257 DECL_IS_MALLOC (opnew) = 1;
4258 DECL_IS_OPERATOR_NEW (opnew) = 1;
4259 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4260 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4261 if (flag_sized_deallocation)
4263 /* Also push the sized deallocation variants:
4264 void operator delete(void*, std::size_t) throw();
4265 void operator delete[](void*, std::size_t) throw(); */
4266 tree void_ftype_ptr_size
4267 = build_function_type_list (void_type_node, ptr_type_node,
4268 size_type_node, NULL_TREE);
4269 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4270 extvisattr);
4271 deltype = build_exception_variant (deltype, empty_except_spec);
4272 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4273 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4276 if (aligned_new_threshold)
4278 push_namespace (std_identifier);
4279 tree align_id = get_identifier ("align_val_t");
4280 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4281 NULL_TREE, /*scoped*/true, NULL);
4282 pop_namespace ();
4284 /* operator new (size_t, align_val_t); */
4285 newtype = build_function_type_list (ptr_type_node, size_type_node,
4286 align_type_node, NULL_TREE);
4287 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4288 newtype = build_exception_variant (newtype, new_eh_spec);
4289 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4290 DECL_IS_MALLOC (opnew) = 1;
4291 DECL_IS_OPERATOR_NEW (opnew) = 1;
4292 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4293 DECL_IS_MALLOC (opnew) = 1;
4294 DECL_IS_OPERATOR_NEW (opnew) = 1;
4296 /* operator delete (void *, align_val_t); */
4297 deltype = build_function_type_list (void_type_node, ptr_type_node,
4298 align_type_node, NULL_TREE);
4299 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4300 deltype = build_exception_variant (deltype, empty_except_spec);
4301 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4302 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4304 if (flag_sized_deallocation)
4306 /* operator delete (void *, size_t, align_val_t); */
4307 deltype = build_function_type_list (void_type_node, ptr_type_node,
4308 size_type_node, align_type_node,
4309 NULL_TREE);
4310 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4311 deltype = build_exception_variant (deltype, empty_except_spec);
4312 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4313 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4317 nullptr_type_node = make_node (NULLPTR_TYPE);
4318 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4319 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4320 TYPE_UNSIGNED (nullptr_type_node) = 1;
4321 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4322 if (abi_version_at_least (9))
4323 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4324 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4325 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4326 nullptr_node = build_int_cst (nullptr_type_node, 0);
4329 abort_fndecl
4330 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4331 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4333 /* Perform other language dependent initializations. */
4334 init_class_processing ();
4335 init_rtti_processing ();
4336 init_template_processing ();
4338 if (flag_exceptions)
4339 init_exception_processing ();
4341 if (! supports_one_only ())
4342 flag_weak = 0;
4344 make_fname_decl = cp_make_fname_decl;
4345 start_fname_decls ();
4347 /* Show we use EH for cleanups. */
4348 if (flag_exceptions)
4349 using_eh_for_cleanups ();
4352 /* Generate an initializer for a function naming variable from
4353 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4354 filled in with the type of the init. */
4356 tree
4357 cp_fname_init (const char* name, tree *type_p)
4359 tree domain = NULL_TREE;
4360 tree type;
4361 tree init = NULL_TREE;
4362 size_t length = 0;
4364 if (name)
4366 length = strlen (name);
4367 domain = build_index_type (size_int (length));
4368 init = build_string (length + 1, name);
4371 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4372 type = build_cplus_array_type (type, domain);
4374 *type_p = type;
4376 if (init)
4377 TREE_TYPE (init) = type;
4378 else
4379 init = error_mark_node;
4381 return init;
4384 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4385 the decl, LOC is the location to give the decl, NAME is the
4386 initialization string and TYPE_DEP indicates whether NAME depended
4387 on the type of the function. We make use of that to detect
4388 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4389 at the point of first use, so we mustn't push the decl now. */
4391 static tree
4392 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4394 const char *const name = (type_dep && processing_template_decl
4395 ? NULL : fname_as_string (type_dep));
4396 tree type;
4397 tree init = cp_fname_init (name, &type);
4398 tree decl = build_decl (loc, VAR_DECL, id, type);
4400 if (name)
4401 free (CONST_CAST (char *, name));
4403 TREE_STATIC (decl) = 1;
4404 TREE_READONLY (decl) = 1;
4405 DECL_ARTIFICIAL (decl) = 1;
4407 TREE_USED (decl) = 1;
4409 if (current_function_decl)
4411 DECL_CONTEXT (decl) = current_function_decl;
4412 decl = pushdecl_outermost_localscope (decl);
4413 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4414 LOOKUP_ONLYCONVERTING);
4416 else
4418 DECL_THIS_STATIC (decl) = true;
4419 pushdecl_top_level_and_finish (decl, init);
4422 return decl;
4425 static tree
4426 builtin_function_1 (tree decl, tree context, bool is_global)
4428 tree id = DECL_NAME (decl);
4429 const char *name = IDENTIFIER_POINTER (id);
4431 retrofit_lang_decl (decl);
4433 DECL_ARTIFICIAL (decl) = 1;
4434 SET_DECL_LANGUAGE (decl, lang_c);
4435 /* Runtime library routines are, by definition, available in an
4436 external shared object. */
4437 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4438 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4440 DECL_CONTEXT (decl) = context;
4442 /* A function in the user's namespace should have an explicit
4443 declaration before it is used. Mark the built-in function as
4444 anticipated but not actually declared. */
4445 if (name[0] != '_' || name[1] != '_')
4446 DECL_ANTICIPATED (decl) = 1;
4447 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4449 size_t len = strlen (name);
4451 /* Treat __*_chk fortification functions as anticipated as well,
4452 unless they are __builtin_*. */
4453 if (len > strlen ("___chk")
4454 && memcmp (name + len - strlen ("_chk"),
4455 "_chk", strlen ("_chk") + 1) == 0)
4456 DECL_ANTICIPATED (decl) = 1;
4459 if (is_global)
4460 pushdecl_top_level (decl);
4461 else
4462 pushdecl (decl);
4464 return decl;
4467 tree
4468 cxx_builtin_function (tree decl)
4470 tree id = DECL_NAME (decl);
4471 const char *name = IDENTIFIER_POINTER (id);
4472 /* All builtins that don't begin with an '_' should additionally
4473 go in the 'std' namespace. */
4474 if (name[0] != '_')
4476 tree decl2 = copy_node(decl);
4477 push_namespace (std_identifier);
4478 builtin_function_1 (decl2, std_node, false);
4479 pop_namespace ();
4482 return builtin_function_1 (decl, NULL_TREE, false);
4485 /* Like cxx_builtin_function, but guarantee the function is added to the global
4486 scope. This is to allow function specific options to add new machine
4487 dependent builtins when the target ISA changes via attribute((target(...)))
4488 which saves space on program startup if the program does not use non-generic
4489 ISAs. */
4491 tree
4492 cxx_builtin_function_ext_scope (tree decl)
4495 tree id = DECL_NAME (decl);
4496 const char *name = IDENTIFIER_POINTER (id);
4497 /* All builtins that don't begin with an '_' should additionally
4498 go in the 'std' namespace. */
4499 if (name[0] != '_')
4501 tree decl2 = copy_node(decl);
4502 push_namespace (std_identifier);
4503 builtin_function_1 (decl2, std_node, true);
4504 pop_namespace ();
4507 return builtin_function_1 (decl, NULL_TREE, true);
4510 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4511 function. Not called directly. */
4513 static tree
4514 build_library_fn (tree name, enum tree_code operator_code, tree type,
4515 int ecf_flags)
4517 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4518 DECL_EXTERNAL (fn) = 1;
4519 TREE_PUBLIC (fn) = 1;
4520 DECL_ARTIFICIAL (fn) = 1;
4521 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4522 = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4523 SET_DECL_LANGUAGE (fn, lang_c);
4524 /* Runtime library routines are, by definition, available in an
4525 external shared object. */
4526 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4527 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4528 set_call_expr_flags (fn, ecf_flags);
4529 return fn;
4532 /* Returns the _DECL for a library function with C++ linkage. */
4534 static tree
4535 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4536 int ecf_flags)
4538 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4539 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4540 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4541 return fn;
4544 /* Like build_library_fn, but takes a C string instead of an
4545 IDENTIFIER_NODE. */
4547 tree
4548 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4550 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4553 /* Like build_cp_library_fn, but takes a C string instead of an
4554 IDENTIFIER_NODE. */
4556 tree
4557 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4559 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4560 ecf_flags);
4563 /* Like build_library_fn, but also pushes the function so that we will
4564 be able to find it via get_global_binding. Also, the function
4565 may throw exceptions listed in RAISES. */
4567 tree
4568 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4570 tree fn;
4572 if (raises)
4573 type = build_exception_variant (type, raises);
4575 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4576 pushdecl_top_level (fn);
4577 return fn;
4580 /* Like build_cp_library_fn, but also pushes the function so that it
4581 will be found by normal lookup. */
4583 static tree
4584 push_cp_library_fn (enum tree_code operator_code, tree type,
4585 int ecf_flags)
4587 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4588 operator_code, type, ecf_flags);
4589 pushdecl (fn);
4590 if (flag_tm)
4591 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4592 return fn;
4595 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4596 a FUNCTION_TYPE. */
4598 tree
4599 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4601 tree type = build_function_type (void_type_node, parmtypes);
4602 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4605 /* Like push_library_fn, but also note that this function throws
4606 and does not return. Used for __throw_foo and the like. */
4608 tree
4609 push_throw_library_fn (tree name, tree type)
4611 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4612 return fn;
4615 /* When we call finish_struct for an anonymous union, we create
4616 default copy constructors and such. But, an anonymous union
4617 shouldn't have such things; this function undoes the damage to the
4618 anonymous union type T.
4620 (The reason that we create the synthesized methods is that we don't
4621 distinguish `union { int i; }' from `typedef union { int i; } U'.
4622 The first is an anonymous union; the second is just an ordinary
4623 union type.) */
4625 void
4626 fixup_anonymous_aggr (tree t)
4628 /* Wipe out memory of synthesized methods. */
4629 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4630 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4631 TYPE_HAS_COPY_CTOR (t) = 0;
4632 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4633 TYPE_HAS_COPY_ASSIGN (t) = 0;
4634 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4636 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4637 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4638 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4639 *prev_p = DECL_CHAIN (probe);
4640 else
4641 prev_p = &DECL_CHAIN (probe);
4643 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4644 assignment operators (because they cannot have these methods themselves).
4645 For anonymous unions this is already checked because they are not allowed
4646 in any union, otherwise we have to check it. */
4647 if (TREE_CODE (t) != UNION_TYPE)
4649 tree field, type;
4651 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4652 if (TREE_CODE (field) == FIELD_DECL)
4654 type = TREE_TYPE (field);
4655 if (CLASS_TYPE_P (type))
4657 if (TYPE_NEEDS_CONSTRUCTING (type))
4658 error ("member %q+#D with constructor not allowed "
4659 "in anonymous aggregate", field);
4660 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4661 error ("member %q+#D with destructor not allowed "
4662 "in anonymous aggregate", field);
4663 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4664 error ("member %q+#D with copy assignment operator "
4665 "not allowed in anonymous aggregate", field);
4671 /* Warn for an attribute located at LOCATION that appertains to the
4672 class type CLASS_TYPE that has not been properly placed after its
4673 class-key, in it class-specifier. */
4675 void
4676 warn_misplaced_attr_for_class_type (source_location location,
4677 tree class_type)
4679 gcc_assert (OVERLOAD_TYPE_P (class_type));
4681 if (warning_at (location, OPT_Wattributes,
4682 "attribute ignored in declaration "
4683 "of %q#T", class_type))
4684 inform (location,
4685 "attribute for %q#T must follow the %qs keyword",
4686 class_type, class_key_or_enum_as_string (class_type));
4689 /* Make sure that a declaration with no declarator is well-formed, i.e.
4690 just declares a tagged type or anonymous union.
4692 Returns the type declared; or NULL_TREE if none. */
4694 tree
4695 check_tag_decl (cp_decl_specifier_seq *declspecs,
4696 bool explicit_type_instantiation_p)
4698 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4699 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4700 /* If a class, struct, or enum type is declared by the DECLSPECS
4701 (i.e, if a class-specifier, enum-specifier, or non-typename
4702 elaborated-type-specifier appears in the DECLSPECS),
4703 DECLARED_TYPE is set to the corresponding type. */
4704 tree declared_type = NULL_TREE;
4705 bool error_p = false;
4707 if (declspecs->multiple_types_p)
4708 error ("multiple types in one declaration");
4709 else if (declspecs->redefined_builtin_type)
4711 if (!in_system_header_at (input_location))
4712 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4713 "redeclaration of C++ built-in type %qT",
4714 declspecs->redefined_builtin_type);
4715 return NULL_TREE;
4718 if (declspecs->type
4719 && TYPE_P (declspecs->type)
4720 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4721 && MAYBE_CLASS_TYPE_P (declspecs->type))
4722 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4723 declared_type = declspecs->type;
4724 else if (declspecs->type == error_mark_node)
4725 error_p = true;
4726 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4727 permerror (input_location, "declaration does not declare anything");
4728 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4730 error_at (declspecs->locations[ds_type_spec],
4731 "%<auto%> can only be specified for variables "
4732 "or function declarations");
4733 return error_mark_node;
4735 /* Check for an anonymous union. */
4736 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4737 && TYPE_UNNAMED_P (declared_type))
4739 /* 7/3 In a simple-declaration, the optional init-declarator-list
4740 can be omitted only when declaring a class (clause 9) or
4741 enumeration (7.2), that is, when the decl-specifier-seq contains
4742 either a class-specifier, an elaborated-type-specifier with
4743 a class-key (9.1), or an enum-specifier. In these cases and
4744 whenever a class-specifier or enum-specifier is present in the
4745 decl-specifier-seq, the identifiers in these specifiers are among
4746 the names being declared by the declaration (as class-name,
4747 enum-names, or enumerators, depending on the syntax). In such
4748 cases, and except for the declaration of an unnamed bit-field (9.6),
4749 the decl-specifier-seq shall introduce one or more names into the
4750 program, or shall redeclare a name introduced by a previous
4751 declaration. [Example:
4752 enum { }; // ill-formed
4753 typedef class { }; // ill-formed
4754 --end example] */
4755 if (saw_typedef)
4757 error ("missing type-name in typedef-declaration");
4758 return NULL_TREE;
4760 /* Anonymous unions are objects, so they can have specifiers. */;
4761 SET_ANON_AGGR_TYPE_P (declared_type);
4763 if (TREE_CODE (declared_type) != UNION_TYPE
4764 && !in_system_header_at (input_location))
4765 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4768 else
4770 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4771 error_at (declspecs->locations[ds_inline],
4772 "%<inline%> can only be specified for functions");
4773 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4774 error_at (declspecs->locations[ds_virtual],
4775 "%<virtual%> can only be specified for functions");
4776 else if (saw_friend
4777 && (!current_class_type
4778 || current_scope () != current_class_type))
4779 error_at (declspecs->locations[ds_friend],
4780 "%<friend%> can only be specified inside a class");
4781 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4782 error_at (declspecs->locations[ds_explicit],
4783 "%<explicit%> can only be specified for constructors");
4784 else if (declspecs->storage_class)
4785 error_at (declspecs->locations[ds_storage_class],
4786 "a storage class can only be specified for objects "
4787 "and functions");
4788 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4789 error_at (declspecs->locations[ds_const],
4790 "%<const%> can only be specified for objects and "
4791 "functions");
4792 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4793 error_at (declspecs->locations[ds_volatile],
4794 "%<volatile%> can only be specified for objects and "
4795 "functions");
4796 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4797 error_at (declspecs->locations[ds_restrict],
4798 "%<__restrict%> can only be specified for objects and "
4799 "functions");
4800 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4801 error_at (declspecs->locations[ds_thread],
4802 "%<__thread%> can only be specified for objects "
4803 "and functions");
4804 else if (saw_typedef)
4805 warning_at (declspecs->locations[ds_typedef], 0,
4806 "%<typedef%> was ignored in this declaration");
4807 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4808 error_at (declspecs->locations[ds_constexpr],
4809 "%<constexpr%> cannot be used for type declarations");
4812 if (declspecs->attributes && warn_attributes && declared_type)
4814 location_t loc;
4815 if (!CLASS_TYPE_P (declared_type)
4816 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4817 /* For a non-template class, use the name location. */
4818 loc = location_of (declared_type);
4819 else
4820 /* For a template class (an explicit instantiation), use the
4821 current location. */
4822 loc = input_location;
4824 if (explicit_type_instantiation_p)
4825 /* [dcl.attr.grammar]/4:
4827 No attribute-specifier-seq shall appertain to an explicit
4828 instantiation. */
4830 if (warning_at (loc, OPT_Wattributes,
4831 "attribute ignored in explicit instantiation %q#T",
4832 declared_type))
4833 inform (loc,
4834 "no attribute can be applied to "
4835 "an explicit instantiation");
4837 else
4838 warn_misplaced_attr_for_class_type (loc, declared_type);
4841 return declared_type;
4844 /* Called when a declaration is seen that contains no names to declare.
4845 If its type is a reference to a structure, union or enum inherited
4846 from a containing scope, shadow that tag name for the current scope
4847 with a forward reference.
4848 If its type defines a new named structure or union
4849 or defines an enum, it is valid but we need not do anything here.
4850 Otherwise, it is an error.
4852 C++: may have to grok the declspecs to learn about static,
4853 complain for anonymous unions.
4855 Returns the TYPE declared -- or NULL_TREE if none. */
4857 tree
4858 shadow_tag (cp_decl_specifier_seq *declspecs)
4860 tree t = check_tag_decl (declspecs,
4861 /*explicit_type_instantiation_p=*/false);
4863 if (!t)
4864 return NULL_TREE;
4866 if (maybe_process_partial_specialization (t) == error_mark_node)
4867 return NULL_TREE;
4869 /* This is where the variables in an anonymous union are
4870 declared. An anonymous union declaration looks like:
4871 union { ... } ;
4872 because there is no declarator after the union, the parser
4873 sends that declaration here. */
4874 if (ANON_AGGR_TYPE_P (t))
4876 fixup_anonymous_aggr (t);
4878 if (TYPE_FIELDS (t))
4880 tree decl = grokdeclarator (/*declarator=*/NULL,
4881 declspecs, NORMAL, 0, NULL);
4882 finish_anon_union (decl);
4886 return t;
4889 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4891 tree
4892 groktypename (cp_decl_specifier_seq *type_specifiers,
4893 const cp_declarator *declarator,
4894 bool is_template_arg)
4896 tree attrs;
4897 tree type;
4898 enum decl_context context
4899 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4900 attrs = type_specifiers->attributes;
4901 type_specifiers->attributes = NULL_TREE;
4902 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4903 if (attrs && type != error_mark_node)
4905 if (CLASS_TYPE_P (type))
4906 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4907 "outside of definition", type);
4908 else if (MAYBE_CLASS_TYPE_P (type))
4909 /* A template type parameter or other dependent type. */
4910 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4911 "type %qT without an associated declaration", type);
4912 else
4913 cplus_decl_attributes (&type, attrs, 0);
4915 return type;
4918 /* Process a DECLARATOR for a function-scope variable declaration,
4919 namespace-scope variable declaration, or function declaration.
4920 (Function definitions go through start_function; class member
4921 declarations appearing in the body of the class go through
4922 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4923 If an error occurs, the error_mark_node is returned instead.
4925 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4926 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4927 for an explicitly defaulted function, or SD_DELETED for an explicitly
4928 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4929 implicitly initialized via a default constructor. ATTRIBUTES and
4930 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4932 The scope represented by the context of the returned DECL is pushed
4933 (if it is not the global namespace) and is assigned to
4934 *PUSHED_SCOPE_P. The caller is then responsible for calling
4935 pop_scope on *PUSHED_SCOPE_P if it is set. */
4937 tree
4938 start_decl (const cp_declarator *declarator,
4939 cp_decl_specifier_seq *declspecs,
4940 int initialized,
4941 tree attributes,
4942 tree prefix_attributes,
4943 tree *pushed_scope_p)
4945 tree decl;
4946 tree context;
4947 bool was_public;
4948 int flags;
4949 bool alias;
4951 *pushed_scope_p = NULL_TREE;
4953 /* An object declared as __attribute__((deprecated)) suppresses
4954 warnings of uses of other deprecated items. */
4955 if (lookup_attribute ("deprecated", attributes))
4956 deprecated_state = DEPRECATED_SUPPRESS;
4958 attributes = chainon (attributes, prefix_attributes);
4960 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4961 &attributes);
4963 deprecated_state = DEPRECATED_NORMAL;
4965 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4966 || decl == error_mark_node)
4967 return error_mark_node;
4969 context = CP_DECL_CONTEXT (decl);
4970 if (context != global_namespace)
4971 *pushed_scope_p = push_scope (context);
4973 /* Is it valid for this decl to have an initializer at all?
4974 If not, set INITIALIZED to zero, which will indirectly
4975 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4976 if (initialized
4977 && TREE_CODE (decl) == TYPE_DECL)
4979 error ("typedef %qD is initialized (use decltype instead)", decl);
4980 return error_mark_node;
4983 if (initialized)
4985 if (! toplevel_bindings_p ()
4986 && DECL_EXTERNAL (decl))
4987 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4988 decl);
4989 DECL_EXTERNAL (decl) = 0;
4990 if (toplevel_bindings_p ())
4991 TREE_STATIC (decl) = 1;
4993 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4995 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4996 record_key_method_defined (decl);
4998 /* If this is a typedef that names the class for linkage purposes
4999 (7.1.3p8), apply any attributes directly to the type. */
5000 if (TREE_CODE (decl) == TYPE_DECL
5001 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
5002 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
5003 flags = ATTR_FLAG_TYPE_IN_PLACE;
5004 else
5005 flags = 0;
5007 /* Set attributes here so if duplicate decl, will have proper attributes. */
5008 cplus_decl_attributes (&decl, attributes, flags);
5010 /* Dllimported symbols cannot be defined. Static data members (which
5011 can be initialized in-class and dllimported) go through grokfield,
5012 not here, so we don't need to exclude those decls when checking for
5013 a definition. */
5014 if (initialized && DECL_DLLIMPORT_P (decl))
5016 error ("definition of %q#D is marked %<dllimport%>", decl);
5017 DECL_DLLIMPORT_P (decl) = 0;
5020 /* If #pragma weak was used, mark the decl weak now. */
5021 if (!processing_template_decl && !DECL_DECOMPOSITION_P (decl))
5022 maybe_apply_pragma_weak (decl);
5024 if (TREE_CODE (decl) == FUNCTION_DECL
5025 && DECL_DECLARED_INLINE_P (decl)
5026 && DECL_UNINLINABLE (decl)
5027 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5028 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5029 "inline function %qD given attribute noinline", decl);
5031 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5033 bool this_tmpl = (processing_template_decl
5034 > template_class_depth (context));
5035 if (VAR_P (decl))
5037 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5038 if (field == NULL_TREE
5039 || !(VAR_P (field) || variable_template_p (field)))
5040 error ("%q+#D is not a static data member of %q#T", decl, context);
5041 else if (variable_template_p (field)
5042 && (DECL_LANG_SPECIFIC (decl)
5043 && DECL_TEMPLATE_SPECIALIZATION (decl)))
5044 /* OK, specialization was already checked. */;
5045 else if (variable_template_p (field) && !this_tmpl)
5047 error_at (DECL_SOURCE_LOCATION (decl),
5048 "non-member-template declaration of %qD", decl);
5049 inform (DECL_SOURCE_LOCATION (field), "does not match "
5050 "member template declaration here");
5051 return error_mark_node;
5053 else
5055 if (variable_template_p (field))
5056 field = DECL_TEMPLATE_RESULT (field);
5058 if (DECL_CONTEXT (field) != context)
5060 if (!same_type_p (DECL_CONTEXT (field), context))
5061 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5062 "to be defined as %<%T::%D%>",
5063 DECL_CONTEXT (field), DECL_NAME (decl),
5064 context, DECL_NAME (decl));
5065 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5067 /* Static data member are tricky; an in-class initialization
5068 still doesn't provide a definition, so the in-class
5069 declaration will have DECL_EXTERNAL set, but will have an
5070 initialization. Thus, duplicate_decls won't warn
5071 about this situation, and so we check here. */
5072 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5073 error ("duplicate initialization of %qD", decl);
5074 field = duplicate_decls (decl, field,
5075 /*newdecl_is_friend=*/false);
5076 if (field == error_mark_node)
5077 return error_mark_node;
5078 else if (field)
5079 decl = field;
5082 else
5084 tree field = check_classfn (context, decl,
5085 this_tmpl
5086 ? current_template_parms
5087 : NULL_TREE);
5088 if (field && field != error_mark_node
5089 && duplicate_decls (decl, field,
5090 /*newdecl_is_friend=*/false))
5091 decl = field;
5094 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5095 DECL_IN_AGGR_P (decl) = 0;
5096 /* Do not mark DECL as an explicit specialization if it was not
5097 already marked as an instantiation; a declaration should
5098 never be marked as a specialization unless we know what
5099 template is being specialized. */
5100 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5102 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5103 if (TREE_CODE (decl) == FUNCTION_DECL)
5104 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5105 && DECL_DECLARED_INLINE_P (decl));
5106 else
5107 DECL_COMDAT (decl) = false;
5109 /* [temp.expl.spec] An explicit specialization of a static data
5110 member of a template is a definition if the declaration
5111 includes an initializer; otherwise, it is a declaration.
5113 We check for processing_specialization so this only applies
5114 to the new specialization syntax. */
5115 if (!initialized && processing_specialization)
5116 DECL_EXTERNAL (decl) = 1;
5119 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5120 /* Aliases are definitions. */
5121 && !alias)
5122 permerror (input_location, "declaration of %q#D outside of class is not definition",
5123 decl);
5126 was_public = TREE_PUBLIC (decl);
5128 /* Enter this declaration into the symbol table. Don't push the plain
5129 VAR_DECL for a variable template. */
5130 if (!template_parm_scope_p ()
5131 || !VAR_P (decl))
5132 decl = maybe_push_decl (decl);
5134 if (processing_template_decl)
5135 decl = push_template_decl (decl);
5136 if (decl == error_mark_node)
5137 return error_mark_node;
5139 if (VAR_P (decl)
5140 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5141 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5143 /* This is a const variable with implicit 'static'. Set
5144 DECL_THIS_STATIC so we can tell it from variables that are
5145 !TREE_PUBLIC because of the anonymous namespace. */
5146 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5147 DECL_THIS_STATIC (decl) = 1;
5150 if (current_function_decl && VAR_P (decl)
5151 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5153 bool ok = false;
5154 if (CP_DECL_THREAD_LOCAL_P (decl))
5155 error ("%qD declared %<thread_local%> in %<constexpr%> function",
5156 decl);
5157 else if (TREE_STATIC (decl))
5158 error ("%qD declared %<static%> in %<constexpr%> function", decl);
5159 else
5160 ok = true;
5161 if (!ok)
5162 cp_function_chain->invalid_constexpr = true;
5165 if (!processing_template_decl && VAR_P (decl))
5166 start_decl_1 (decl, initialized);
5168 return decl;
5171 /* Process the declaration of a variable DECL. INITIALIZED is true
5172 iff DECL is explicitly initialized. (INITIALIZED is false if the
5173 variable is initialized via an implicitly-called constructor.)
5174 This function must be called for ordinary variables (including, for
5175 example, implicit instantiations of templates), but must not be
5176 called for template declarations. */
5178 void
5179 start_decl_1 (tree decl, bool initialized)
5181 tree type;
5182 bool complete_p;
5183 bool aggregate_definition_p;
5185 gcc_assert (!processing_template_decl);
5187 if (error_operand_p (decl))
5188 return;
5190 gcc_assert (VAR_P (decl));
5192 type = TREE_TYPE (decl);
5193 complete_p = COMPLETE_TYPE_P (type);
5194 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5196 /* If an explicit initializer is present, or if this is a definition
5197 of an aggregate, then we need a complete type at this point.
5198 (Scalars are always complete types, so there is nothing to
5199 check.) This code just sets COMPLETE_P; errors (if necessary)
5200 are issued below. */
5201 if ((initialized || aggregate_definition_p)
5202 && !complete_p
5203 && COMPLETE_TYPE_P (complete_type (type)))
5205 complete_p = true;
5206 /* We will not yet have set TREE_READONLY on DECL if the type
5207 was "const", but incomplete, before this point. But, now, we
5208 have a complete type, so we can try again. */
5209 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5212 if (initialized)
5213 /* Is it valid for this decl to have an initializer at all? */
5215 /* Don't allow initializations for incomplete types except for
5216 arrays which might be completed by the initialization. */
5217 if (complete_p)
5218 ; /* A complete type is ok. */
5219 else if (type_uses_auto (type))
5220 ; /* An auto type is ok. */
5221 else if (TREE_CODE (type) != ARRAY_TYPE)
5223 error ("variable %q#D has initializer but incomplete type", decl);
5224 type = TREE_TYPE (decl) = error_mark_node;
5226 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5228 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5229 error ("elements of array %q#D have incomplete type", decl);
5230 /* else we already gave an error in start_decl. */
5233 else if (aggregate_definition_p && !complete_p)
5235 if (type_uses_auto (type))
5236 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5237 else
5239 error ("aggregate %q#D has incomplete type and cannot be defined",
5240 decl);
5241 /* Change the type so that assemble_variable will give
5242 DECL an rtl we can live with: (mem (const_int 0)). */
5243 type = TREE_TYPE (decl) = error_mark_node;
5247 /* Create a new scope to hold this declaration if necessary.
5248 Whether or not a new scope is necessary cannot be determined
5249 until after the type has been completed; if the type is a
5250 specialization of a class template it is not until after
5251 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5252 will be set correctly. */
5253 maybe_push_cleanup_level (type);
5256 /* Handle initialization of references. DECL, TYPE, and INIT have the
5257 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5258 but will be set to a new CLEANUP_STMT if a temporary is created
5259 that must be destroyed subsequently.
5261 Returns an initializer expression to use to initialize DECL, or
5262 NULL if the initialization can be performed statically.
5264 Quotes on semantics can be found in ARM 8.4.3. */
5266 static tree
5267 grok_reference_init (tree decl, tree type, tree init, int flags)
5269 if (init == NULL_TREE)
5271 if ((DECL_LANG_SPECIFIC (decl) == 0
5272 || DECL_IN_AGGR_P (decl) == 0)
5273 && ! DECL_THIS_EXTERN (decl))
5274 error ("%qD declared as reference but not initialized", decl);
5275 return NULL_TREE;
5278 if (TREE_CODE (init) == TREE_LIST)
5279 init = build_x_compound_expr_from_list (init, ELK_INIT,
5280 tf_warning_or_error);
5282 tree ttype = TREE_TYPE (type);
5283 if (TREE_CODE (ttype) != ARRAY_TYPE
5284 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5285 /* Note: default conversion is only called in very special cases. */
5286 init = decay_conversion (init, tf_warning_or_error);
5288 /* check_initializer handles this for non-reference variables, but for
5289 references we need to do it here or the initializer will get the
5290 incomplete array type and confuse later calls to
5291 cp_complete_array_type. */
5292 if (TREE_CODE (ttype) == ARRAY_TYPE
5293 && TYPE_DOMAIN (ttype) == NULL_TREE
5294 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5295 || TREE_CODE (init) == STRING_CST))
5297 cp_complete_array_type (&ttype, init, false);
5298 if (ttype != TREE_TYPE (type))
5299 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5302 /* Convert INIT to the reference type TYPE. This may involve the
5303 creation of a temporary, whose lifetime must be the same as that
5304 of the reference. If so, a DECL_EXPR for the temporary will be
5305 added just after the DECL_EXPR for DECL. That's why we don't set
5306 DECL_INITIAL for local references (instead assigning to them
5307 explicitly); we need to allow the temporary to be initialized
5308 first. */
5309 return initialize_reference (type, init, flags,
5310 tf_warning_or_error);
5313 /* Designated initializers in arrays are not supported in GNU C++.
5314 The parser cannot detect this error since it does not know whether
5315 a given brace-enclosed initializer is for a class type or for an
5316 array. This function checks that CE does not use a designated
5317 initializer. If it does, an error is issued. Returns true if CE
5318 is valid, i.e., does not have a designated initializer. */
5320 bool
5321 check_array_designated_initializer (constructor_elt *ce,
5322 unsigned HOST_WIDE_INT index)
5324 /* Designated initializers for array elements are not supported. */
5325 if (ce->index)
5327 /* The parser only allows identifiers as designated
5328 initializers. */
5329 if (ce->index == error_mark_node)
5331 error ("name used in a GNU-style designated "
5332 "initializer for an array");
5333 return false;
5335 else if (identifier_p (ce->index))
5337 error ("name %qD used in a GNU-style designated "
5338 "initializer for an array", ce->index);
5339 return false;
5342 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5343 ce->index, true);
5344 if (ce_index
5345 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5346 && (TREE_CODE (ce_index = fold_non_dependent_expr (ce_index))
5347 == INTEGER_CST))
5349 /* A C99 designator is OK if it matches the current index. */
5350 if (wi::to_wide (ce_index) == index)
5352 ce->index = ce_index;
5353 return true;
5355 else
5356 sorry ("non-trivial designated initializers not supported");
5358 else
5359 error ("C99 designator %qE is not an integral constant-expression",
5360 ce->index);
5362 return false;
5365 return true;
5368 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5369 array until we finish parsing the initializer. If that's the
5370 situation we're in, update DECL accordingly. */
5372 static void
5373 maybe_deduce_size_from_array_init (tree decl, tree init)
5375 tree type = TREE_TYPE (decl);
5377 if (TREE_CODE (type) == ARRAY_TYPE
5378 && TYPE_DOMAIN (type) == NULL_TREE
5379 && TREE_CODE (decl) != TYPE_DECL)
5381 /* do_default is really a C-ism to deal with tentative definitions.
5382 But let's leave it here to ease the eventual merge. */
5383 int do_default = !DECL_EXTERNAL (decl);
5384 tree initializer = init ? init : DECL_INITIAL (decl);
5385 int failure = 0;
5387 /* Check that there are no designated initializers in INIT, as
5388 those are not supported in GNU C++, and as the middle-end
5389 will crash if presented with a non-numeric designated
5390 initializer. */
5391 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5393 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5394 constructor_elt *ce;
5395 HOST_WIDE_INT i;
5396 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5398 if (instantiation_dependent_expression_p (ce->index))
5399 return;
5400 if (!check_array_designated_initializer (ce, i))
5401 failure = 1;
5405 if (failure)
5406 TREE_TYPE (decl) = error_mark_node;
5407 else
5409 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5410 do_default);
5411 if (failure == 1)
5413 error_at (cp_expr_loc_or_loc (initializer,
5414 DECL_SOURCE_LOCATION (decl)),
5415 "initializer fails to determine size of %qD", decl);
5417 else if (failure == 2)
5419 if (do_default)
5421 error_at (DECL_SOURCE_LOCATION (decl),
5422 "array size missing in %qD", decl);
5424 /* If a `static' var's size isn't known, make it extern as
5425 well as static, so it does not get allocated. If it's not
5426 `static', then don't mark it extern; finish_incomplete_decl
5427 will give it a default size and it will get allocated. */
5428 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5429 DECL_EXTERNAL (decl) = 1;
5431 else if (failure == 3)
5433 error_at (DECL_SOURCE_LOCATION (decl),
5434 "zero-size array %qD", decl);
5438 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5440 relayout_decl (decl);
5444 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5445 any appropriate error messages regarding the layout. */
5447 static void
5448 layout_var_decl (tree decl)
5450 tree type;
5452 type = TREE_TYPE (decl);
5453 if (type == error_mark_node)
5454 return;
5456 /* If we haven't already laid out this declaration, do so now.
5457 Note that we must not call complete type for an external object
5458 because it's type might involve templates that we are not
5459 supposed to instantiate yet. (And it's perfectly valid to say
5460 `extern X x' for some incomplete type `X'.) */
5461 if (!DECL_EXTERNAL (decl))
5462 complete_type (type);
5463 if (!DECL_SIZE (decl)
5464 && TREE_TYPE (decl) != error_mark_node
5465 && complete_or_array_type_p (type))
5466 layout_decl (decl, 0);
5468 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5470 /* An automatic variable with an incomplete type: that is an error.
5471 Don't talk about array types here, since we took care of that
5472 message in grokdeclarator. */
5473 error_at (DECL_SOURCE_LOCATION (decl),
5474 "storage size of %qD isn%'t known", decl);
5475 TREE_TYPE (decl) = error_mark_node;
5477 #if 0
5478 /* Keep this code around in case we later want to control debug info
5479 based on whether a type is "used". (jason 1999-11-11) */
5481 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5482 /* Let debugger know it should output info for this type. */
5483 note_debug_info_needed (ttype);
5485 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5486 note_debug_info_needed (DECL_CONTEXT (decl));
5487 #endif
5489 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5490 && DECL_SIZE (decl) != NULL_TREE
5491 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5493 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5494 constant_expression_warning (DECL_SIZE (decl));
5495 else
5497 error_at (DECL_SOURCE_LOCATION (decl),
5498 "storage size of %qD isn%'t constant", decl);
5499 TREE_TYPE (decl) = error_mark_node;
5504 /* If a local static variable is declared in an inline function, or if
5505 we have a weak definition, we must endeavor to create only one
5506 instance of the variable at link-time. */
5508 void
5509 maybe_commonize_var (tree decl)
5511 /* Static data in a function with comdat linkage also has comdat
5512 linkage. */
5513 if ((TREE_STATIC (decl)
5514 /* Don't mess with __FUNCTION__. */
5515 && ! DECL_ARTIFICIAL (decl)
5516 && DECL_FUNCTION_SCOPE_P (decl)
5517 && vague_linkage_p (DECL_CONTEXT (decl)))
5518 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5520 if (flag_weak)
5522 /* With weak symbols, we simply make the variable COMDAT;
5523 that will cause copies in multiple translations units to
5524 be merged. */
5525 comdat_linkage (decl);
5527 else
5529 if (DECL_INITIAL (decl) == NULL_TREE
5530 || DECL_INITIAL (decl) == error_mark_node)
5532 /* Without weak symbols, we can use COMMON to merge
5533 uninitialized variables. */
5534 TREE_PUBLIC (decl) = 1;
5535 DECL_COMMON (decl) = 1;
5537 else
5539 /* While for initialized variables, we must use internal
5540 linkage -- which means that multiple copies will not
5541 be merged. */
5542 TREE_PUBLIC (decl) = 0;
5543 DECL_COMMON (decl) = 0;
5544 const char *msg;
5545 if (DECL_INLINE_VAR_P (decl))
5546 msg = G_("sorry: semantics of inline variable "
5547 "%q#D are wrong (you%'ll wind up with "
5548 "multiple copies)");
5549 else
5550 msg = G_("sorry: semantics of inline function "
5551 "static data %q#D are wrong (you%'ll wind "
5552 "up with multiple copies)");
5553 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5554 msg, decl))
5555 inform (DECL_SOURCE_LOCATION (decl),
5556 "you can work around this by removing the initializer");
5562 /* Issue an error message if DECL is an uninitialized const variable.
5563 CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr
5564 context from potential_constant_expression. Returns true if all is well,
5565 false otherwise. */
5567 bool
5568 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p,
5569 tsubst_flags_t complain)
5571 tree type = strip_array_types (TREE_TYPE (decl));
5573 /* ``Unless explicitly declared extern, a const object does not have
5574 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5575 7.1.6 */
5576 if (VAR_P (decl)
5577 && !TYPE_REF_P (type)
5578 && (constexpr_context_p
5579 || CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5580 && !DECL_NONTRIVIALLY_INITIALIZED_P (decl))
5582 tree field = default_init_uninitialized_part (type);
5583 if (!field)
5584 return true;
5586 if (!constexpr_context_p)
5588 if (CP_TYPE_CONST_P (type))
5590 if (complain & tf_error)
5591 permerror (DECL_SOURCE_LOCATION (decl),
5592 "uninitialized const %qD", decl);
5594 else
5596 if (!is_instantiation_of_constexpr (current_function_decl)
5597 && (complain & tf_error))
5598 error_at (DECL_SOURCE_LOCATION (decl),
5599 "uninitialized variable %qD in %<constexpr%> "
5600 "function", decl);
5601 cp_function_chain->invalid_constexpr = true;
5604 else if (complain & tf_error)
5605 error_at (DECL_SOURCE_LOCATION (decl),
5606 "uninitialized variable %qD in %<constexpr%> context",
5607 decl);
5609 if (CLASS_TYPE_P (type) && (complain & tf_error))
5611 tree defaulted_ctor;
5613 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5614 "%q#T has no user-provided default constructor", type);
5615 defaulted_ctor = in_class_defaulted_default_constructor (type);
5616 if (defaulted_ctor)
5617 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5618 "constructor is not user-provided because it is "
5619 "explicitly defaulted in the class body");
5620 inform (DECL_SOURCE_LOCATION (field),
5621 "and the implicitly-defined constructor does not "
5622 "initialize %q#D", field);
5625 return false;
5628 return true;
5631 /* Structure holding the current initializer being processed by reshape_init.
5632 CUR is a pointer to the current element being processed, END is a pointer
5633 after the last element present in the initializer. */
5634 struct reshape_iter
5636 constructor_elt *cur;
5637 constructor_elt *end;
5640 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5642 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5643 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5644 initialized. If there are no more such fields, the return value
5645 will be NULL. */
5647 tree
5648 next_initializable_field (tree field)
5650 while (field
5651 && (TREE_CODE (field) != FIELD_DECL
5652 || DECL_UNNAMED_BIT_FIELD (field)
5653 || (DECL_ARTIFICIAL (field)
5654 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5655 field = DECL_CHAIN (field);
5657 return field;
5660 /* Return true for [dcl.init.list] direct-list-initialization from
5661 single element of enumeration with a fixed underlying type. */
5663 bool
5664 is_direct_enum_init (tree type, tree init)
5666 if (cxx_dialect >= cxx17
5667 && TREE_CODE (type) == ENUMERAL_TYPE
5668 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5669 && TREE_CODE (init) == CONSTRUCTOR
5670 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5671 && CONSTRUCTOR_NELTS (init) == 1)
5672 return true;
5673 return false;
5676 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5677 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5678 INTEGER_CST representing the size of the array minus one (the maximum index),
5679 or NULL_TREE if the array was declared without specifying the size. D is
5680 the iterator within the constructor. */
5682 static tree
5683 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5684 tsubst_flags_t complain)
5686 tree new_init;
5687 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5688 unsigned HOST_WIDE_INT max_index_cst = 0;
5689 unsigned HOST_WIDE_INT index;
5691 /* The initializer for an array is always a CONSTRUCTOR. */
5692 new_init = build_constructor (init_list_type_node, NULL);
5694 if (sized_array_p)
5696 /* Minus 1 is used for zero sized arrays. */
5697 if (integer_all_onesp (max_index))
5698 return new_init;
5700 if (tree_fits_uhwi_p (max_index))
5701 max_index_cst = tree_to_uhwi (max_index);
5702 /* sizetype is sign extended, not zero extended. */
5703 else
5704 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5707 /* Loop until there are no more initializers. */
5708 for (index = 0;
5709 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5710 ++index)
5712 tree elt_init;
5713 constructor_elt *old_cur = d->cur;
5715 check_array_designated_initializer (d->cur, index);
5716 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5717 complain);
5718 if (elt_init == error_mark_node)
5719 return error_mark_node;
5720 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5721 size_int (index), elt_init);
5722 if (!TREE_CONSTANT (elt_init))
5723 TREE_CONSTANT (new_init) = false;
5725 /* This can happen with an invalid initializer (c++/54501). */
5726 if (d->cur == old_cur && !sized_array_p)
5727 break;
5730 return new_init;
5733 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5734 Parameters are the same of reshape_init_r. */
5736 static tree
5737 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5739 tree max_index = NULL_TREE;
5741 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5743 if (TYPE_DOMAIN (type))
5744 max_index = array_type_nelts (type);
5746 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5749 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5750 Parameters are the same of reshape_init_r. */
5752 static tree
5753 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5755 tree max_index = NULL_TREE;
5757 gcc_assert (VECTOR_TYPE_P (type));
5759 if (COMPOUND_LITERAL_P (d->cur->value))
5761 tree value = d->cur->value;
5762 if (!same_type_p (TREE_TYPE (value), type))
5764 if (complain & tf_error)
5765 error ("invalid type %qT as initializer for a vector of type %qT",
5766 TREE_TYPE (d->cur->value), type);
5767 value = error_mark_node;
5769 ++d->cur;
5770 return value;
5773 /* For a vector, we initialize it as an array of the appropriate size. */
5774 if (VECTOR_TYPE_P (type))
5775 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5777 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5780 /* Subroutine of reshape_init_r, processes the initializers for classes
5781 or union. Parameters are the same of reshape_init_r. */
5783 static tree
5784 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5785 tsubst_flags_t complain)
5787 tree field;
5788 tree new_init;
5790 gcc_assert (CLASS_TYPE_P (type));
5792 /* The initializer for a class is always a CONSTRUCTOR. */
5793 new_init = build_constructor (init_list_type_node, NULL);
5794 field = next_initializable_field (TYPE_FIELDS (type));
5796 if (!field)
5798 /* [dcl.init.aggr]
5800 An initializer for an aggregate member that is an
5801 empty class shall have the form of an empty
5802 initializer-list {}. */
5803 if (!first_initializer_p)
5805 if (complain & tf_error)
5806 error ("initializer for %qT must be brace-enclosed", type);
5807 return error_mark_node;
5809 return new_init;
5812 /* Loop through the initializable fields, gathering initializers. */
5813 while (d->cur != d->end)
5815 tree field_init;
5816 constructor_elt *old_cur = d->cur;
5818 /* Handle designated initializers, as an extension. */
5819 if (d->cur->index)
5821 if (d->cur->index == error_mark_node)
5822 return error_mark_node;
5824 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5826 /* We already reshaped this. */
5827 if (field != d->cur->index)
5829 tree id = DECL_NAME (d->cur->index);
5830 gcc_assert (id);
5831 gcc_checking_assert (d->cur->index
5832 == get_class_binding (type, id, false));
5833 field = d->cur->index;
5836 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5837 field = get_class_binding (type, d->cur->index, false);
5838 else
5840 if (complain & tf_error)
5841 error ("%<[%E] =%> used in a GNU-style designated initializer"
5842 " for class %qT", d->cur->index, type);
5843 return error_mark_node;
5846 if (!field || TREE_CODE (field) != FIELD_DECL)
5848 if (complain & tf_error)
5849 error ("%qT has no non-static data member named %qD", type,
5850 d->cur->index);
5851 return error_mark_node;
5855 /* If we processed all the member of the class, we are done. */
5856 if (!field)
5857 break;
5859 field_init = reshape_init_r (TREE_TYPE (field), d,
5860 /*first_initializer_p=*/false, complain);
5861 if (field_init == error_mark_node)
5862 return error_mark_node;
5864 if (d->cur == old_cur && d->cur->index)
5866 /* This can happen with an invalid initializer for a flexible
5867 array member (c++/54441). */
5868 if (complain & tf_error)
5869 error ("invalid initializer for %q#D", field);
5870 return error_mark_node;
5873 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5875 /* [dcl.init.aggr]
5877 When a union is initialized with a brace-enclosed
5878 initializer, the braces shall only contain an
5879 initializer for the first member of the union. */
5880 if (TREE_CODE (type) == UNION_TYPE)
5881 break;
5883 field = next_initializable_field (DECL_CHAIN (field));
5886 return new_init;
5889 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5890 designators are not valid; either complain or return true to indicate
5891 that reshape_init_r should return error_mark_node. */
5893 static bool
5894 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5896 if (d->cur->index)
5898 if (complain & tf_error)
5899 error ("C99 designator %qE outside aggregate initializer",
5900 d->cur->index);
5901 else
5902 return true;
5904 return false;
5907 /* Subroutine of reshape_init, which processes a single initializer (part of
5908 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5909 iterator within the CONSTRUCTOR which points to the initializer to process.
5910 FIRST_INITIALIZER_P is true if this is the first initializer of the
5911 outermost CONSTRUCTOR node. */
5913 static tree
5914 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5915 tsubst_flags_t complain)
5917 tree init = d->cur->value;
5919 if (error_operand_p (init))
5920 return error_mark_node;
5922 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5923 && has_designator_problem (d, complain))
5924 return error_mark_node;
5926 if (TREE_CODE (type) == COMPLEX_TYPE)
5928 /* A complex type can be initialized from one or two initializers,
5929 but braces are not elided. */
5930 d->cur++;
5931 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5933 if (CONSTRUCTOR_NELTS (init) > 2)
5935 if (complain & tf_error)
5936 error ("too many initializers for %qT", type);
5937 else
5938 return error_mark_node;
5941 else if (first_initializer_p && d->cur != d->end)
5943 vec<constructor_elt, va_gc> *v = 0;
5944 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5945 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5946 if (has_designator_problem (d, complain))
5947 return error_mark_node;
5948 d->cur++;
5949 init = build_constructor (init_list_type_node, v);
5951 return init;
5954 /* A non-aggregate type is always initialized with a single
5955 initializer. */
5956 if (!CP_AGGREGATE_TYPE_P (type))
5958 /* It is invalid to initialize a non-aggregate type with a
5959 brace-enclosed initializer before C++0x.
5960 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5961 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5962 a CONSTRUCTOR (with a record type). */
5963 if (TREE_CODE (init) == CONSTRUCTOR
5964 /* Don't complain about a capture-init. */
5965 && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5966 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5968 if (SCALAR_TYPE_P (type))
5970 if (cxx_dialect < cxx11
5971 /* Isn't value-initialization. */
5972 || CONSTRUCTOR_NELTS (init) > 0)
5974 if (complain & tf_error)
5975 error ("braces around scalar initializer for type %qT",
5976 type);
5977 init = error_mark_node;
5980 else
5981 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5984 d->cur++;
5985 return init;
5988 /* "If T is a class type and the initializer list has a single element of
5989 type cv U, where U is T or a class derived from T, the object is
5990 initialized from that element." Even if T is an aggregate. */
5991 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5992 && first_initializer_p
5993 && d->end - d->cur == 1
5994 && reference_related_p (type, TREE_TYPE (init)))
5996 d->cur++;
5997 return init;
6000 /* [dcl.init.aggr]
6002 All implicit type conversions (clause _conv_) are considered when
6003 initializing the aggregate member with an initializer from an
6004 initializer-list. If the initializer can initialize a member,
6005 the member is initialized. Otherwise, if the member is itself a
6006 non-empty subaggregate, brace elision is assumed and the
6007 initializer is considered for the initialization of the first
6008 member of the subaggregate. */
6009 if (TREE_CODE (init) != CONSTRUCTOR
6010 /* But don't try this for the first initializer, since that would be
6011 looking through the outermost braces; A a2 = { a1 }; is not a
6012 valid aggregate initialization. */
6013 && !first_initializer_p
6014 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
6015 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
6016 complain)))
6018 d->cur++;
6019 return init;
6022 /* [dcl.init.string]
6024 A char array (whether plain char, signed char, or unsigned char)
6025 can be initialized by a string-literal (optionally enclosed in
6026 braces); a wchar_t array can be initialized by a wide
6027 string-literal (optionally enclosed in braces). */
6028 if (TREE_CODE (type) == ARRAY_TYPE
6029 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
6031 tree str_init = init;
6033 /* Strip one level of braces if and only if they enclose a single
6034 element (as allowed by [dcl.init.string]). */
6035 if (!first_initializer_p
6036 && TREE_CODE (str_init) == CONSTRUCTOR
6037 && CONSTRUCTOR_NELTS (str_init) == 1)
6039 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
6042 /* If it's a string literal, then it's the initializer for the array
6043 as a whole. Otherwise, continue with normal initialization for
6044 array types (one value per array element). */
6045 if (TREE_CODE (str_init) == STRING_CST)
6047 if (has_designator_problem (d, complain))
6048 return error_mark_node;
6049 d->cur++;
6050 return str_init;
6054 /* The following cases are about aggregates. If we are not within a full
6055 initializer already, and there is not a CONSTRUCTOR, it means that there
6056 is a missing set of braces (that is, we are processing the case for
6057 which reshape_init exists). */
6058 if (!first_initializer_p)
6060 if (TREE_CODE (init) == CONSTRUCTOR)
6062 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
6063 /* There is no need to reshape pointer-to-member function
6064 initializers, as they are always constructed correctly
6065 by the front end. */
6067 else if (COMPOUND_LITERAL_P (init))
6068 /* For a nested compound literal, there is no need to reshape since
6069 brace elision is not allowed. Even if we decided to allow it,
6070 we should add a call to reshape_init in finish_compound_literal,
6071 before calling digest_init, so changing this code would still
6072 not be necessary. */
6073 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
6074 else
6076 ++d->cur;
6077 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6078 return reshape_init (type, init, complain);
6082 if (complain & tf_warning)
6083 warning (OPT_Wmissing_braces,
6084 "missing braces around initializer for %qT",
6085 type);
6088 /* Dispatch to specialized routines. */
6089 if (CLASS_TYPE_P (type))
6090 return reshape_init_class (type, d, first_initializer_p, complain);
6091 else if (TREE_CODE (type) == ARRAY_TYPE)
6092 return reshape_init_array (type, d, complain);
6093 else if (VECTOR_TYPE_P (type))
6094 return reshape_init_vector (type, d, complain);
6095 else
6096 gcc_unreachable();
6099 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6100 brace-enclosed aggregate initializer.
6102 INIT is the CONSTRUCTOR containing the list of initializers describing
6103 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6104 It may not presently match the shape of the TYPE; for example:
6106 struct S { int a; int b; };
6107 struct S a[] = { 1, 2, 3, 4 };
6109 Here INIT will hold a vector of four elements, rather than a
6110 vector of two elements, each itself a vector of two elements. This
6111 routine transforms INIT from the former form into the latter. The
6112 revised CONSTRUCTOR node is returned. */
6114 tree
6115 reshape_init (tree type, tree init, tsubst_flags_t complain)
6117 vec<constructor_elt, va_gc> *v;
6118 reshape_iter d;
6119 tree new_init;
6121 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6123 v = CONSTRUCTOR_ELTS (init);
6125 /* An empty constructor does not need reshaping, and it is always a valid
6126 initializer. */
6127 if (vec_safe_is_empty (v))
6128 return init;
6130 /* Handle [dcl.init.list] direct-list-initialization from
6131 single element of enumeration with a fixed underlying type. */
6132 if (is_direct_enum_init (type, init))
6134 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6135 type = cv_unqualified (type);
6136 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6138 warning_sentinel w (warn_useless_cast);
6139 warning_sentinel w2 (warn_ignored_qualifiers);
6140 return cp_build_c_cast (type, elt, tf_warning_or_error);
6142 else
6143 return error_mark_node;
6146 /* Recurse on this CONSTRUCTOR. */
6147 d.cur = &(*v)[0];
6148 d.end = d.cur + v->length ();
6150 new_init = reshape_init_r (type, &d, true, complain);
6151 if (new_init == error_mark_node)
6152 return error_mark_node;
6154 /* Make sure all the element of the constructor were used. Otherwise,
6155 issue an error about exceeding initializers. */
6156 if (d.cur != d.end)
6158 if (complain & tf_error)
6159 error ("too many initializers for %qT", type);
6160 return error_mark_node;
6163 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6164 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6165 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6167 return new_init;
6170 /* Verify array initializer. Returns true if errors have been reported. */
6172 bool
6173 check_array_initializer (tree decl, tree type, tree init)
6175 tree element_type = TREE_TYPE (type);
6177 /* The array type itself need not be complete, because the
6178 initializer may tell us how many elements are in the array.
6179 But, the elements of the array must be complete. */
6180 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6182 if (decl)
6183 error_at (DECL_SOURCE_LOCATION (decl),
6184 "elements of array %q#D have incomplete type", decl);
6185 else
6186 error ("elements of array %q#T have incomplete type", type);
6187 return true;
6189 /* A compound literal can't have variable size. */
6190 if (init && !decl
6191 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6192 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6194 error ("variable-sized compound literal");
6195 return true;
6197 return false;
6200 /* Subroutine of check_initializer; args are passed down from that function.
6201 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6203 static tree
6204 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6207 gcc_assert (stmts_are_full_exprs_p ());
6208 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6211 /* Verify INIT (the initializer for DECL), and record the
6212 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6213 grok_reference_init.
6215 If the return value is non-NULL, it is an expression that must be
6216 evaluated dynamically to initialize DECL. */
6218 static tree
6219 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6221 tree type = TREE_TYPE (decl);
6222 tree init_code = NULL;
6223 tree core_type;
6225 /* Things that are going to be initialized need to have complete
6226 type. */
6227 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6229 if (DECL_HAS_VALUE_EXPR_P (decl))
6231 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6232 it doesn't have storage to be initialized. */
6233 gcc_assert (init == NULL_TREE);
6234 return NULL_TREE;
6237 if (type == error_mark_node)
6238 /* We will have already complained. */
6239 return NULL_TREE;
6241 if (TREE_CODE (type) == ARRAY_TYPE)
6243 if (check_array_initializer (decl, type, init))
6244 return NULL_TREE;
6246 else if (!COMPLETE_TYPE_P (type))
6248 error_at (DECL_SOURCE_LOCATION (decl),
6249 "%q#D has incomplete type", decl);
6250 TREE_TYPE (decl) = error_mark_node;
6251 return NULL_TREE;
6253 else
6254 /* There is no way to make a variable-sized class type in GNU C++. */
6255 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6257 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6259 int init_len = CONSTRUCTOR_NELTS (init);
6260 if (SCALAR_TYPE_P (type))
6262 if (init_len == 0)
6264 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6265 init = build_zero_init (type, NULL_TREE, false);
6267 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6269 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6270 "scalar object %qD requires one element in "
6271 "initializer", decl);
6272 TREE_TYPE (decl) = error_mark_node;
6273 return NULL_TREE;
6278 if (TREE_CODE (decl) == CONST_DECL)
6280 gcc_assert (!TYPE_REF_P (type));
6282 DECL_INITIAL (decl) = init;
6284 gcc_assert (init != NULL_TREE);
6285 init = NULL_TREE;
6287 else if (!init && DECL_REALLY_EXTERN (decl))
6289 else if (init || type_build_ctor_call (type)
6290 || TYPE_REF_P (type))
6292 if (TYPE_REF_P (type))
6294 init = grok_reference_init (decl, type, init, flags);
6295 flags |= LOOKUP_ALREADY_DIGESTED;
6297 else if (!init)
6298 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6299 tf_warning_or_error);
6300 /* Do not reshape constructors of vectors (they don't need to be
6301 reshaped. */
6302 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6304 if (is_std_init_list (type))
6306 init = perform_implicit_conversion (type, init,
6307 tf_warning_or_error);
6308 flags |= LOOKUP_ALREADY_DIGESTED;
6310 else if (TYPE_NON_AGGREGATE_CLASS (type))
6312 /* Don't reshape if the class has constructors. */
6313 if (cxx_dialect == cxx98)
6314 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6315 "in C++98 %qD must be initialized by "
6316 "constructor, not by %<{...}%>",
6317 decl);
6319 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6321 error ("opaque vector types cannot be initialized");
6322 init = error_mark_node;
6324 else
6326 init = reshape_init (type, init, tf_warning_or_error);
6327 flags |= LOOKUP_NO_NARROWING;
6330 else if (TREE_CODE (init) == TREE_LIST
6331 && TREE_TYPE (init) != unknown_type_node
6332 && !MAYBE_CLASS_TYPE_P (type))
6334 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6336 /* We get here with code like `int a (2);' */
6337 init = build_x_compound_expr_from_list (init, ELK_INIT,
6338 tf_warning_or_error);
6341 /* If DECL has an array type without a specific bound, deduce the
6342 array size from the initializer. */
6343 maybe_deduce_size_from_array_init (decl, init);
6344 type = TREE_TYPE (decl);
6345 if (type == error_mark_node)
6346 return NULL_TREE;
6348 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6349 && !(flags & LOOKUP_ALREADY_DIGESTED)
6350 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6351 && CP_AGGREGATE_TYPE_P (type)
6352 && (CLASS_TYPE_P (type)
6353 || !TYPE_NEEDS_CONSTRUCTING (type)
6354 || type_has_extended_temps (type))))
6355 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6357 init_code = build_aggr_init_full_exprs (decl, init, flags);
6359 /* A constructor call is a non-trivial initializer even if
6360 it isn't explicitly written. */
6361 if (TREE_SIDE_EFFECTS (init_code))
6362 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6364 /* If this is a constexpr initializer, expand_default_init will
6365 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6366 case, pull the initializer back out and pass it down into
6367 store_init_value. */
6368 while (TREE_CODE (init_code) == EXPR_STMT
6369 || TREE_CODE (init_code) == CONVERT_EXPR)
6370 init_code = TREE_OPERAND (init_code, 0);
6371 if (TREE_CODE (init_code) == INIT_EXPR)
6373 init = TREE_OPERAND (init_code, 1);
6374 init_code = NULL_TREE;
6375 /* Don't call digest_init; it's unnecessary and will complain
6376 about aggregate initialization of non-aggregate classes. */
6377 flags |= LOOKUP_ALREADY_DIGESTED;
6379 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6381 /* Declared constexpr, but no suitable initializer; massage
6382 init appropriately so we can pass it into store_init_value
6383 for the error. */
6384 if (CLASS_TYPE_P (type)
6385 && (!init || TREE_CODE (init) == TREE_LIST))
6387 init = build_functional_cast (type, init, tf_none);
6388 if (TREE_CODE (init) == TARGET_EXPR)
6389 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6391 init_code = NULL_TREE;
6393 else
6394 init = NULL_TREE;
6397 if (init && TREE_CODE (init) != TREE_VEC)
6399 /* In aggregate initialization of a variable, each element
6400 initialization is a full-expression because there is no
6401 enclosing expression. */
6402 gcc_assert (stmts_are_full_exprs_p ());
6404 init_code = store_init_value (decl, init, cleanups, flags);
6406 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6407 && DECL_INITIAL (decl)
6408 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6409 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6410 warning_at (cp_expr_loc_or_loc (DECL_INITIAL (decl),
6411 DECL_SOURCE_LOCATION (decl)),
6412 0, "array %qD initialized by parenthesized "
6413 "string literal %qE",
6414 decl, DECL_INITIAL (decl));
6415 init = NULL;
6418 else
6420 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6421 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6422 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6423 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6424 /*complain=*/true);
6426 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6427 tf_warning_or_error);
6430 if (init && init != error_mark_node)
6431 init_code = build2 (INIT_EXPR, type, decl, init);
6433 if (init_code)
6435 /* We might have set these in cp_finish_decl. */
6436 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6437 TREE_CONSTANT (decl) = false;
6440 if (init_code
6441 && (DECL_IN_AGGR_P (decl)
6442 && DECL_INITIALIZED_IN_CLASS_P (decl)
6443 && !DECL_VAR_DECLARED_INLINE_P (decl)))
6445 static int explained = 0;
6447 if (cxx_dialect < cxx11)
6448 error ("initializer invalid for static member with constructor");
6449 else if (cxx_dialect < cxx17)
6450 error ("non-constant in-class initialization invalid for static "
6451 "member %qD", decl);
6452 else
6453 error ("non-constant in-class initialization invalid for non-inline "
6454 "static member %qD", decl);
6455 if (!explained)
6457 inform (input_location,
6458 "(an out of class initialization is required)");
6459 explained = 1;
6461 return NULL_TREE;
6464 return init_code;
6467 /* If DECL is not a local variable, give it RTL. */
6469 static void
6470 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6472 int toplev = toplevel_bindings_p ();
6473 int defer_p;
6475 /* Set the DECL_ASSEMBLER_NAME for the object. */
6476 if (asmspec)
6478 /* The `register' keyword, when used together with an
6479 asm-specification, indicates that the variable should be
6480 placed in a particular register. */
6481 if (VAR_P (decl) && DECL_REGISTER (decl))
6483 set_user_assembler_name (decl, asmspec);
6484 DECL_HARD_REGISTER (decl) = 1;
6486 else
6488 if (TREE_CODE (decl) == FUNCTION_DECL
6489 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6490 set_builtin_user_assembler_name (decl, asmspec);
6491 set_user_assembler_name (decl, asmspec);
6495 /* Handle non-variables up front. */
6496 if (!VAR_P (decl))
6498 rest_of_decl_compilation (decl, toplev, at_eof);
6499 return;
6502 /* If we see a class member here, it should be a static data
6503 member. */
6504 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6506 gcc_assert (TREE_STATIC (decl));
6507 /* An in-class declaration of a static data member should be
6508 external; it is only a declaration, and not a definition. */
6509 if (init == NULL_TREE)
6510 gcc_assert (DECL_EXTERNAL (decl)
6511 || !TREE_PUBLIC (decl)
6512 || DECL_INLINE_VAR_P (decl));
6515 /* We don't create any RTL for local variables. */
6516 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6517 return;
6519 /* We defer emission of local statics until the corresponding
6520 DECL_EXPR is expanded. But with constexpr its function might never
6521 be expanded, so go ahead and tell cgraph about the variable now. */
6522 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6523 && !var_in_maybe_constexpr_fn (decl))
6524 || DECL_VIRTUAL_P (decl));
6526 /* Defer template instantiations. */
6527 if (DECL_LANG_SPECIFIC (decl)
6528 && DECL_IMPLICIT_INSTANTIATION (decl))
6529 defer_p = 1;
6531 /* If we're not deferring, go ahead and assemble the variable. */
6532 if (!defer_p)
6533 rest_of_decl_compilation (decl, toplev, at_eof);
6536 /* walk_tree helper for wrap_temporary_cleanups, below. */
6538 static tree
6539 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6541 /* Stop at types or full-expression boundaries. */
6542 if (TYPE_P (*stmt_p)
6543 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6545 *walk_subtrees = 0;
6546 return NULL_TREE;
6549 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6551 tree guard = (tree)data;
6552 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6554 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6555 /* Tell honor_protect_cleanup_actions to handle this as a separate
6556 cleanup. */
6557 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6559 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6562 return NULL_TREE;
6565 /* We're initializing a local variable which has a cleanup GUARD. If there
6566 are any temporaries used in the initializer INIT of this variable, we
6567 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6568 variable will be cleaned up properly if one of them throws.
6570 Unfortunately, there's no way to express this properly in terms of
6571 nesting, as the regions for the temporaries overlap the region for the
6572 variable itself; if there are two temporaries, the variable needs to be
6573 the first thing destroyed if either of them throws. However, we only
6574 want to run the variable's cleanup if it actually got constructed. So
6575 we need to guard the temporary cleanups with the variable's cleanup if
6576 they are run on the normal path, but not if they are run on the
6577 exceptional path. We implement this by telling
6578 honor_protect_cleanup_actions to strip the variable cleanup from the
6579 exceptional path. */
6581 static void
6582 wrap_temporary_cleanups (tree init, tree guard)
6584 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6587 /* Generate code to initialize DECL (a local variable). */
6589 static void
6590 initialize_local_var (tree decl, tree init)
6592 tree type = TREE_TYPE (decl);
6593 tree cleanup;
6594 int already_used;
6596 gcc_assert (VAR_P (decl)
6597 || TREE_CODE (decl) == RESULT_DECL);
6598 gcc_assert (!TREE_STATIC (decl));
6600 if (DECL_SIZE (decl) == NULL_TREE)
6602 /* If we used it already as memory, it must stay in memory. */
6603 DECL_INITIAL (decl) = NULL_TREE;
6604 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6605 return;
6608 if (type == error_mark_node)
6609 return;
6611 /* Compute and store the initial value. */
6612 already_used = TREE_USED (decl) || TREE_USED (type);
6613 if (TREE_USED (type))
6614 DECL_READ_P (decl) = 1;
6616 /* Generate a cleanup, if necessary. */
6617 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6619 /* Perform the initialization. */
6620 if (init)
6622 tree rinit = (TREE_CODE (init) == INIT_EXPR
6623 ? TREE_OPERAND (init, 1) : NULL_TREE);
6624 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6626 /* Stick simple initializers in DECL_INITIAL so that
6627 -Wno-init-self works (c++/34772). */
6628 gcc_assert (TREE_OPERAND (init, 0) == decl);
6629 DECL_INITIAL (decl) = rinit;
6631 if (warn_init_self && TYPE_REF_P (type))
6633 STRIP_NOPS (rinit);
6634 if (rinit == decl)
6635 warning_at (DECL_SOURCE_LOCATION (decl),
6636 OPT_Winit_self,
6637 "reference %qD is initialized with itself", decl);
6640 else
6642 int saved_stmts_are_full_exprs_p;
6644 /* If we're only initializing a single object, guard the
6645 destructors of any temporaries used in its initializer with
6646 its destructor. This isn't right for arrays because each
6647 element initialization is a full-expression. */
6648 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6649 wrap_temporary_cleanups (init, cleanup);
6651 gcc_assert (building_stmt_list_p ());
6652 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6653 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6654 finish_expr_stmt (init);
6655 current_stmt_tree ()->stmts_are_full_exprs_p =
6656 saved_stmts_are_full_exprs_p;
6660 /* Set this to 0 so we can tell whether an aggregate which was
6661 initialized was ever used. Don't do this if it has a
6662 destructor, so we don't complain about the 'resource
6663 allocation is initialization' idiom. Now set
6664 attribute((unused)) on types so decls of that type will be
6665 marked used. (see TREE_USED, above.) */
6666 if (TYPE_NEEDS_CONSTRUCTING (type)
6667 && ! already_used
6668 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6669 && DECL_NAME (decl))
6670 TREE_USED (decl) = 0;
6671 else if (already_used)
6672 TREE_USED (decl) = 1;
6674 if (cleanup)
6675 finish_decl_cleanup (decl, cleanup);
6678 /* DECL is a VAR_DECL for a compiler-generated variable with static
6679 storage duration (like a virtual table) whose initializer is a
6680 compile-time constant. Initialize the variable and provide it to the
6681 back end. */
6683 void
6684 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6686 tree init;
6687 gcc_assert (DECL_ARTIFICIAL (decl));
6688 init = build_constructor (TREE_TYPE (decl), v);
6689 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6690 DECL_INITIAL (decl) = init;
6691 DECL_INITIALIZED_P (decl) = 1;
6692 determine_visibility (decl);
6693 layout_var_decl (decl);
6694 maybe_commonize_var (decl);
6695 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6698 /* INIT is the initializer for a variable, as represented by the
6699 parser. Returns true iff INIT is value-dependent. */
6701 static bool
6702 value_dependent_init_p (tree init)
6704 if (TREE_CODE (init) == TREE_LIST)
6705 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6706 return any_value_dependent_elements_p (init);
6707 else if (TREE_CODE (init) == CONSTRUCTOR)
6708 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6710 if (dependent_type_p (TREE_TYPE (init)))
6711 return true;
6713 vec<constructor_elt, va_gc> *elts;
6714 size_t nelts;
6715 size_t i;
6717 elts = CONSTRUCTOR_ELTS (init);
6718 nelts = vec_safe_length (elts);
6719 for (i = 0; i < nelts; ++i)
6720 if (value_dependent_init_p ((*elts)[i].value))
6721 return true;
6723 else
6724 /* It must be a simple expression, e.g., int i = 3; */
6725 return value_dependent_expression_p (init);
6727 return false;
6730 // Returns true if a DECL is VAR_DECL with the concept specifier.
6731 static inline bool
6732 is_concept_var (tree decl)
6734 return (VAR_P (decl)
6735 // Not all variables have DECL_LANG_SPECIFIC.
6736 && DECL_LANG_SPECIFIC (decl)
6737 && DECL_DECLARED_CONCEPT_P (decl));
6740 /* A helper function to be called via walk_tree. If any label exists
6741 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6743 static tree
6744 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6746 if (TYPE_P (*tp))
6747 *walk_subtrees = 0;
6748 if (TREE_CODE (*tp) == LABEL_DECL)
6749 cfun->has_forced_label_in_static = 1;
6750 return NULL_TREE;
6753 /* Finish processing of a declaration;
6754 install its line number and initial value.
6755 If the length of an array type is not known before,
6756 it must be determined now, from the initial value, or it is an error.
6758 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6759 true, then INIT is an integral constant expression.
6761 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6762 if the (init) syntax was used. */
6764 void
6765 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6766 tree asmspec_tree, int flags)
6768 tree type;
6769 vec<tree, va_gc> *cleanups = NULL;
6770 const char *asmspec = NULL;
6771 int was_readonly = 0;
6772 bool var_definition_p = false;
6773 tree auto_node;
6775 if (decl == error_mark_node)
6776 return;
6777 else if (! decl)
6779 if (init)
6780 error ("assignment (not initialization) in declaration");
6781 return;
6784 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6785 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6786 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6788 type = TREE_TYPE (decl);
6789 if (type == error_mark_node)
6790 return;
6792 /* Warn about register storage specifiers except when in GNU global
6793 or local register variable extension. */
6794 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6796 if (cxx_dialect >= cxx17)
6797 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6798 "ISO C++17 does not allow %<register%> storage "
6799 "class specifier");
6800 else
6801 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6802 "%<register%> storage class specifier used");
6805 /* If a name was specified, get the string. */
6806 if (at_namespace_scope_p ())
6807 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6808 if (asmspec_tree && asmspec_tree != error_mark_node)
6809 asmspec = TREE_STRING_POINTER (asmspec_tree);
6811 if (current_class_type
6812 && CP_DECL_CONTEXT (decl) == current_class_type
6813 && TYPE_BEING_DEFINED (current_class_type)
6814 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6815 && (DECL_INITIAL (decl) || init))
6816 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6818 /* Do auto deduction unless decl is a function or an uninstantiated
6819 template specialization. */
6820 if (TREE_CODE (decl) != FUNCTION_DECL
6821 && !(init == NULL_TREE
6822 && DECL_LANG_SPECIFIC (decl)
6823 && DECL_TEMPLATE_INSTANTIATION (decl)
6824 && !DECL_TEMPLATE_INSTANTIATED (decl))
6825 && (auto_node = type_uses_auto (type)))
6827 tree d_init;
6828 if (init == NULL_TREE)
6829 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6830 d_init = init;
6831 if (d_init)
6833 if (TREE_CODE (d_init) == TREE_LIST
6834 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6835 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6836 tf_warning_or_error);
6837 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6839 enum auto_deduction_context adc = adc_variable_type;
6840 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6841 adc = adc_decomp_type;
6842 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6843 tf_warning_or_error, adc,
6844 NULL_TREE, flags);
6845 if (type == error_mark_node)
6846 return;
6847 if (TREE_CODE (type) == FUNCTION_TYPE)
6849 error ("initializer for %<decltype(auto) %D%> has function type "
6850 "(did you forget the %<()%> ?)", decl);
6851 TREE_TYPE (decl) = error_mark_node;
6852 return;
6854 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6857 if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node)
6859 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6860 if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl))
6862 init = NULL_TREE;
6863 DECL_EXTERNAL (decl) = 1;
6867 if (VAR_P (decl)
6868 && DECL_CLASS_SCOPE_P (decl)
6869 && DECL_INITIALIZED_IN_CLASS_P (decl))
6870 check_static_variable_definition (decl, type);
6872 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6874 tree clone;
6875 if (init == ridpointers[(int)RID_DELETE])
6877 /* FIXME check this is 1st decl. */
6878 DECL_DELETED_FN (decl) = 1;
6879 DECL_DECLARED_INLINE_P (decl) = 1;
6880 DECL_INITIAL (decl) = error_mark_node;
6881 FOR_EACH_CLONE (clone, decl)
6883 DECL_DELETED_FN (clone) = 1;
6884 DECL_DECLARED_INLINE_P (clone) = 1;
6885 DECL_INITIAL (clone) = error_mark_node;
6887 init = NULL_TREE;
6889 else if (init == ridpointers[(int)RID_DEFAULT])
6891 if (defaultable_fn_check (decl))
6892 DECL_DEFAULTED_FN (decl) = 1;
6893 else
6894 DECL_INITIAL (decl) = NULL_TREE;
6898 if (init && VAR_P (decl))
6900 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6901 /* If DECL is a reference, then we want to know whether init is a
6902 reference constant; init_const_expr_p as passed tells us whether
6903 it's an rvalue constant. */
6904 if (TYPE_REF_P (type))
6905 init_const_expr_p = potential_constant_expression (init);
6906 if (init_const_expr_p)
6908 /* Set these flags now for templates. We'll update the flags in
6909 store_init_value for instantiations. */
6910 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6911 if (decl_maybe_constant_var_p (decl)
6912 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
6913 && !TYPE_REF_P (type))
6914 TREE_CONSTANT (decl) = 1;
6918 if (processing_template_decl)
6920 bool type_dependent_p;
6922 /* Add this declaration to the statement-tree. */
6923 if (at_function_scope_p ())
6924 add_decl_expr (decl);
6926 type_dependent_p = dependent_type_p (type);
6928 if (check_for_bare_parameter_packs (init))
6930 init = NULL_TREE;
6931 DECL_INITIAL (decl) = NULL_TREE;
6934 /* Generally, initializers in templates are expanded when the
6935 template is instantiated. But, if DECL is a variable constant
6936 then it can be used in future constant expressions, so its value
6937 must be available. */
6939 bool dep_init = false;
6941 if (!VAR_P (decl) || type_dependent_p)
6942 /* We can't do anything if the decl has dependent type. */;
6943 else if (!init && is_concept_var (decl))
6945 error ("variable concept has no initializer");
6946 init = boolean_true_node;
6948 else if (init
6949 && init_const_expr_p
6950 && !TYPE_REF_P (type)
6951 && decl_maybe_constant_var_p (decl)
6952 && !(dep_init = value_dependent_init_p (init)))
6954 /* This variable seems to be a non-dependent constant, so process
6955 its initializer. If check_initializer returns non-null the
6956 initialization wasn't constant after all. */
6957 tree init_code;
6958 cleanups = make_tree_vector ();
6959 init_code = check_initializer (decl, init, flags, &cleanups);
6960 if (init_code == NULL_TREE)
6961 init = NULL_TREE;
6962 release_tree_vector (cleanups);
6964 else if (!DECL_PRETTY_FUNCTION_P (decl))
6966 /* Deduce array size even if the initializer is dependent. */
6967 maybe_deduce_size_from_array_init (decl, init);
6968 /* And complain about multiple initializers. */
6969 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6970 && !MAYBE_CLASS_TYPE_P (type))
6971 init = build_x_compound_expr_from_list (init, ELK_INIT,
6972 tf_warning_or_error);
6975 if (init)
6976 DECL_INITIAL (decl) = init;
6978 if (dep_init)
6980 retrofit_lang_decl (decl);
6981 SET_DECL_DEPENDENT_INIT_P (decl, true);
6983 return;
6986 /* Just store non-static data member initializers for later. */
6987 if (init && TREE_CODE (decl) == FIELD_DECL)
6988 DECL_INITIAL (decl) = init;
6990 /* Take care of TYPE_DECLs up front. */
6991 if (TREE_CODE (decl) == TYPE_DECL)
6993 if (type != error_mark_node
6994 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6996 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6997 warning (0, "shadowing previous type declaration of %q#D", decl);
6998 set_identifier_type_value (DECL_NAME (decl), decl);
7001 /* If we have installed this as the canonical typedef for this
7002 type, and that type has not been defined yet, delay emitting
7003 the debug information for it, as we will emit it later. */
7004 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7005 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7006 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7008 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
7009 at_eof);
7010 return;
7013 /* A reference will be modified here, as it is initialized. */
7014 if (! DECL_EXTERNAL (decl)
7015 && TREE_READONLY (decl)
7016 && TYPE_REF_P (type))
7018 was_readonly = 1;
7019 TREE_READONLY (decl) = 0;
7022 if (VAR_P (decl))
7024 /* If this is a local variable that will need a mangled name,
7025 register it now. We must do this before processing the
7026 initializer for the variable, since the initialization might
7027 require a guard variable, and since the mangled name of the
7028 guard variable will depend on the mangled name of this
7029 variable. */
7030 if (DECL_FUNCTION_SCOPE_P (decl)
7031 && TREE_STATIC (decl)
7032 && !DECL_ARTIFICIAL (decl))
7034 push_local_name (decl);
7035 /* Normally has_forced_label_in_static is set during GIMPLE
7036 lowering, but [cd]tors are never actually compiled directly.
7037 We need to set this early so we can deal with the label
7038 address extension. */
7039 if ((DECL_CONSTRUCTOR_P (current_function_decl)
7040 || DECL_DESTRUCTOR_P (current_function_decl))
7041 && init)
7043 walk_tree (&init, notice_forced_label_r, NULL, NULL);
7044 add_local_decl (cfun, decl);
7046 /* And make sure it's in the symbol table for
7047 c_parse_final_cleanups to find. */
7048 varpool_node::get_create (decl);
7051 /* Convert the initializer to the type of DECL, if we have not
7052 already initialized DECL. */
7053 if (!DECL_INITIALIZED_P (decl)
7054 /* If !DECL_EXTERNAL then DECL is being defined. In the
7055 case of a static data member initialized inside the
7056 class-specifier, there can be an initializer even if DECL
7057 is *not* defined. */
7058 && (!DECL_EXTERNAL (decl) || init))
7060 cleanups = make_tree_vector ();
7061 init = check_initializer (decl, init, flags, &cleanups);
7063 /* Handle:
7065 [dcl.init]
7067 The memory occupied by any object of static storage
7068 duration is zero-initialized at program startup before
7069 any other initialization takes place.
7071 We cannot create an appropriate initializer until after
7072 the type of DECL is finalized. If DECL_INITIAL is set,
7073 then the DECL is statically initialized, and any
7074 necessary zero-initialization has already been performed. */
7075 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7076 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7077 /*nelts=*/NULL_TREE,
7078 /*static_storage_p=*/true);
7079 /* Remember that the initialization for this variable has
7080 taken place. */
7081 DECL_INITIALIZED_P (decl) = 1;
7082 /* This declaration is the definition of this variable,
7083 unless we are initializing a static data member within
7084 the class specifier. */
7085 if (!DECL_EXTERNAL (decl))
7086 var_definition_p = true;
7088 /* If the variable has an array type, lay out the type, even if
7089 there is no initializer. It is valid to index through the
7090 array, and we must get TYPE_ALIGN set correctly on the array
7091 type. */
7092 else if (TREE_CODE (type) == ARRAY_TYPE)
7093 layout_type (type);
7095 if (TREE_STATIC (decl)
7096 && !at_function_scope_p ()
7097 && current_function_decl == NULL)
7098 /* So decl is a global variable or a static member of a
7099 non local class. Record the types it uses
7100 so that we can decide later to emit debug info for them. */
7101 record_types_used_by_current_var_decl (decl);
7104 /* Add this declaration to the statement-tree. This needs to happen
7105 after the call to check_initializer so that the DECL_EXPR for a
7106 reference temp is added before the DECL_EXPR for the reference itself. */
7107 if (DECL_FUNCTION_SCOPE_P (decl))
7109 /* If we're building a variable sized type, and we might be
7110 reachable other than via the top of the current binding
7111 level, then create a new BIND_EXPR so that we deallocate
7112 the object at the right time. */
7113 if (VAR_P (decl)
7114 && DECL_SIZE (decl)
7115 && !TREE_CONSTANT (DECL_SIZE (decl))
7116 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7118 tree bind;
7119 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7120 TREE_SIDE_EFFECTS (bind) = 1;
7121 add_stmt (bind);
7122 BIND_EXPR_BODY (bind) = push_stmt_list ();
7124 add_decl_expr (decl);
7127 /* Let the middle end know about variables and functions -- but not
7128 static data members in uninstantiated class templates. */
7129 if (VAR_OR_FUNCTION_DECL_P (decl))
7131 if (VAR_P (decl))
7133 layout_var_decl (decl);
7134 maybe_commonize_var (decl);
7137 /* This needs to happen after the linkage is set. */
7138 determine_visibility (decl);
7140 if (var_definition_p && TREE_STATIC (decl))
7142 /* If a TREE_READONLY variable needs initialization
7143 at runtime, it is no longer readonly and we need to
7144 avoid MEM_READONLY_P being set on RTL created for it. */
7145 if (init)
7147 if (TREE_READONLY (decl))
7148 TREE_READONLY (decl) = 0;
7149 was_readonly = 0;
7151 else if (was_readonly)
7152 TREE_READONLY (decl) = 1;
7154 /* Likewise if it needs destruction. */
7155 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7156 TREE_READONLY (decl) = 0;
7159 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7161 /* Check for abstractness of the type. Notice that there is no
7162 need to strip array types here since the check for those types
7163 is already done within create_array_type_for_decl. */
7164 abstract_virtuals_error (decl, type);
7166 if (TREE_TYPE (decl) == error_mark_node)
7167 /* No initialization required. */
7169 else if (TREE_CODE (decl) == FUNCTION_DECL)
7171 if (init)
7173 if (init == ridpointers[(int)RID_DEFAULT])
7175 /* An out-of-class default definition is defined at
7176 the point where it is explicitly defaulted. */
7177 if (DECL_DELETED_FN (decl))
7178 maybe_explain_implicit_delete (decl);
7179 else if (DECL_INITIAL (decl) == error_mark_node)
7180 synthesize_method (decl);
7182 else
7183 error ("function %q#D is initialized like a variable", decl);
7185 /* else no initialization required. */
7187 else if (DECL_EXTERNAL (decl)
7188 && ! (DECL_LANG_SPECIFIC (decl)
7189 && DECL_NOT_REALLY_EXTERN (decl)))
7191 if (init)
7192 DECL_INITIAL (decl) = init;
7194 /* A variable definition. */
7195 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7196 /* Initialize the local variable. */
7197 initialize_local_var (decl, init);
7199 /* If a variable is defined, and then a subsequent
7200 definition with external linkage is encountered, we will
7201 get here twice for the same variable. We want to avoid
7202 calling expand_static_init more than once. For variables
7203 that are not static data members, we can call
7204 expand_static_init only when we actually process the
7205 initializer. It is not legal to redeclare a static data
7206 member, so this issue does not arise in that case. */
7207 else if (var_definition_p && TREE_STATIC (decl))
7208 expand_static_init (decl, init);
7211 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7212 reference, insert it in the statement-tree now. */
7213 if (cleanups)
7215 unsigned i; tree t;
7216 FOR_EACH_VEC_ELT (*cleanups, i, t)
7217 push_cleanup (decl, t, false);
7218 release_tree_vector (cleanups);
7221 if (was_readonly)
7222 TREE_READONLY (decl) = 1;
7224 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7227 /* For class TYPE return itself or some its bases that contain
7228 any direct non-static data members. Return error_mark_node if an
7229 error has been diagnosed. */
7231 static tree
7232 find_decomp_class_base (location_t loc, tree type, tree ret)
7234 bool member_seen = false;
7235 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7236 if (TREE_CODE (field) != FIELD_DECL
7237 || DECL_ARTIFICIAL (field)
7238 || DECL_UNNAMED_BIT_FIELD (field))
7239 continue;
7240 else if (ret)
7241 return type;
7242 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7244 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7245 error_at (loc, "cannot decompose class type %qT because it has an "
7246 "anonymous struct member", type);
7247 else
7248 error_at (loc, "cannot decompose class type %qT because it has an "
7249 "anonymous union member", type);
7250 inform (DECL_SOURCE_LOCATION (field), "declared here");
7251 return error_mark_node;
7253 else if (!accessible_p (type, field, true))
7255 error_at (loc, "cannot decompose inaccessible member %qD of %qT",
7256 field, type);
7257 inform (DECL_SOURCE_LOCATION (field),
7258 TREE_PRIVATE (field)
7259 ? G_("declared private here")
7260 : G_("declared protected here"));
7261 return error_mark_node;
7263 else
7264 member_seen = true;
7266 tree base_binfo, binfo;
7267 tree orig_ret = ret;
7268 int i;
7269 if (member_seen)
7270 ret = type;
7271 for (binfo = TYPE_BINFO (type), i = 0;
7272 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7274 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7275 if (t == error_mark_node)
7276 return error_mark_node;
7277 if (t != NULL_TREE && t != ret)
7279 if (ret == type)
7281 error_at (loc, "cannot decompose class type %qT: both it and "
7282 "its base class %qT have non-static data members",
7283 type, t);
7284 return error_mark_node;
7286 else if (orig_ret != NULL_TREE)
7287 return t;
7288 else if (ret != NULL_TREE)
7290 error_at (loc, "cannot decompose class type %qT: its base "
7291 "classes %qT and %qT have non-static data "
7292 "members", type, ret, t);
7293 return error_mark_node;
7295 else
7296 ret = t;
7299 return ret;
7302 /* Return std::tuple_size<TYPE>::value. */
7304 static tree
7305 get_tuple_size (tree type)
7307 tree args = make_tree_vec (1);
7308 TREE_VEC_ELT (args, 0) = type;
7309 tree inst = lookup_template_class (get_identifier ("tuple_size"), args,
7310 /*in_decl*/NULL_TREE,
7311 /*context*/std_node,
7312 /*entering_scope*/false, tf_none);
7313 inst = complete_type (inst);
7314 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7315 return NULL_TREE;
7316 tree val = lookup_qualified_name (inst, get_identifier ("value"),
7317 /*type*/false, /*complain*/false);
7318 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7319 val = maybe_constant_value (val);
7320 if (TREE_CODE (val) == INTEGER_CST)
7321 return val;
7322 else
7323 return error_mark_node;
7326 /* Return std::tuple_element<I,TYPE>::type. */
7328 static tree
7329 get_tuple_element_type (tree type, unsigned i)
7331 tree args = make_tree_vec (2);
7332 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7333 TREE_VEC_ELT (args, 1) = type;
7334 tree inst = lookup_template_class (get_identifier ("tuple_element"), args,
7335 /*in_decl*/NULL_TREE,
7336 /*context*/std_node,
7337 /*entering_scope*/false,
7338 tf_warning_or_error);
7339 return make_typename_type (inst, get_identifier ("type"),
7340 none_type, tf_warning_or_error);
7343 /* Return e.get<i>() or get<i>(e). */
7345 static tree
7346 get_tuple_decomp_init (tree decl, unsigned i)
7348 tree get_id = get_identifier ("get");
7349 tree targs = make_tree_vec (1);
7350 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7352 tree etype = TREE_TYPE (decl);
7353 tree e = convert_from_reference (decl);
7355 /* [The id-expression] e is an lvalue if the type of the entity e is an
7356 lvalue reference and an xvalue otherwise. */
7357 if (!TYPE_REF_P (etype)
7358 || TYPE_REF_IS_RVALUE (etype))
7359 e = move (e);
7361 tree fns = lookup_qualified_name (TREE_TYPE (e), get_id,
7362 /*type*/false, /*complain*/false);
7363 bool use_member_get = false;
7365 /* To use a member get, member lookup must find at least one
7366 declaration that is a function template
7367 whose first template parameter is a non-type parameter. */
7368 for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
7370 tree fn = *iter;
7371 if (TREE_CODE (fn) == TEMPLATE_DECL)
7373 tree tparms = DECL_TEMPLATE_PARMS (fn);
7374 tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
7375 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
7377 use_member_get = true;
7378 break;
7383 if (use_member_get)
7385 fns = lookup_template_function (fns, targs);
7386 return build_new_method_call (e, fns, /*args*/NULL,
7387 /*path*/NULL_TREE, LOOKUP_NORMAL,
7388 /*fn_p*/NULL, tf_warning_or_error);
7390 else
7392 vec<tree,va_gc> *args = make_tree_vector_single (e);
7393 fns = lookup_template_function (get_id, targs);
7394 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7395 return finish_call_expr (fns, &args, /*novirt*/false,
7396 /*koenig*/true, tf_warning_or_error);
7400 /* It's impossible to recover the decltype of a tuple decomposition variable
7401 based on the actual type of the variable, so store it in a hash table. */
7403 static GTY((cache)) tree_cache_map *decomp_type_table;
7404 static void
7405 store_decomp_type (tree v, tree t)
7407 if (!decomp_type_table)
7408 decomp_type_table = tree_cache_map::create_ggc (13);
7409 decomp_type_table->put (v, t);
7412 tree
7413 lookup_decomp_type (tree v)
7415 return *decomp_type_table->get (v);
7418 /* Mangle a decomposition declaration if needed. Arguments like
7419 in cp_finish_decomp. */
7421 void
7422 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7424 if (!processing_template_decl
7425 && !error_operand_p (decl)
7426 && DECL_NAMESPACE_SCOPE_P (decl))
7428 auto_vec<tree, 16> v;
7429 v.safe_grow (count);
7430 tree d = first;
7431 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7432 v[count - i - 1] = d;
7433 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7434 maybe_apply_pragma_weak (decl);
7438 /* Finish a decomposition declaration. DECL is the underlying declaration
7439 "e", FIRST is the head of a chain of decls for the individual identifiers
7440 chained through DECL_CHAIN in reverse order and COUNT is the number of
7441 those decls. */
7443 void
7444 cp_finish_decomp (tree decl, tree first, unsigned int count)
7446 if (error_operand_p (decl))
7448 error_out:
7449 while (count--)
7451 TREE_TYPE (first) = error_mark_node;
7452 if (DECL_HAS_VALUE_EXPR_P (first))
7454 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7455 DECL_HAS_VALUE_EXPR_P (first) = 0;
7457 first = DECL_CHAIN (first);
7459 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7460 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7461 return;
7464 location_t loc = DECL_SOURCE_LOCATION (decl);
7465 if (type_dependent_expression_p (decl)
7466 /* This happens for range for when not in templates.
7467 Still add the DECL_VALUE_EXPRs for later processing. */
7468 || (!processing_template_decl
7469 && type_uses_auto (TREE_TYPE (decl))))
7471 for (unsigned int i = 0; i < count; i++)
7473 if (!DECL_HAS_VALUE_EXPR_P (first))
7475 tree v = build_nt (ARRAY_REF, decl,
7476 size_int (count - i - 1),
7477 NULL_TREE, NULL_TREE);
7478 SET_DECL_VALUE_EXPR (first, v);
7479 DECL_HAS_VALUE_EXPR_P (first) = 1;
7481 if (processing_template_decl)
7482 fit_decomposition_lang_decl (first, decl);
7483 first = DECL_CHAIN (first);
7485 return;
7488 auto_vec<tree, 16> v;
7489 v.safe_grow (count);
7490 tree d = first;
7491 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7493 v[count - i - 1] = d;
7494 fit_decomposition_lang_decl (d, decl);
7497 tree type = TREE_TYPE (decl);
7498 tree dexp = decl;
7500 if (TYPE_REF_P (type))
7502 dexp = convert_from_reference (dexp);
7503 type = complete_type (TREE_TYPE (type));
7504 if (type == error_mark_node)
7505 goto error_out;
7506 if (!COMPLETE_TYPE_P (type))
7508 error_at (loc, "structured binding refers to incomplete type %qT",
7509 type);
7510 goto error_out;
7514 tree eltype = NULL_TREE;
7515 unsigned HOST_WIDE_INT eltscnt = 0;
7516 if (TREE_CODE (type) == ARRAY_TYPE)
7518 tree nelts;
7519 nelts = array_type_nelts_top (type);
7520 if (nelts == error_mark_node)
7521 goto error_out;
7522 if (!tree_fits_uhwi_p (nelts))
7524 error_at (loc, "cannot decompose variable length array %qT", type);
7525 goto error_out;
7527 eltscnt = tree_to_uhwi (nelts);
7528 if (count != eltscnt)
7530 cnt_mismatch:
7531 if (count > eltscnt)
7532 error_n (loc, count,
7533 "%u name provided for structured binding",
7534 "%u names provided for structured binding", count);
7535 else
7536 error_n (loc, count,
7537 "only %u name provided for structured binding",
7538 "only %u names provided for structured binding", count);
7539 inform_n (loc, eltscnt,
7540 "while %qT decomposes into %wu element",
7541 "while %qT decomposes into %wu elements",
7542 type, eltscnt);
7543 goto error_out;
7545 eltype = TREE_TYPE (type);
7546 for (unsigned int i = 0; i < count; i++)
7548 TREE_TYPE (v[i]) = eltype;
7549 layout_decl (v[i], 0);
7550 if (processing_template_decl)
7551 continue;
7552 tree t = unshare_expr (dexp);
7553 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7554 eltype, t, size_int (i), NULL_TREE,
7555 NULL_TREE);
7556 SET_DECL_VALUE_EXPR (v[i], t);
7557 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7560 /* 2 GNU extensions. */
7561 else if (TREE_CODE (type) == COMPLEX_TYPE)
7563 eltscnt = 2;
7564 if (count != eltscnt)
7565 goto cnt_mismatch;
7566 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7567 for (unsigned int i = 0; i < count; i++)
7569 TREE_TYPE (v[i]) = eltype;
7570 layout_decl (v[i], 0);
7571 if (processing_template_decl)
7572 continue;
7573 tree t = unshare_expr (dexp);
7574 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7575 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7577 SET_DECL_VALUE_EXPR (v[i], t);
7578 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7581 else if (TREE_CODE (type) == VECTOR_TYPE)
7583 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7585 error_at (loc, "cannot decompose variable length vector %qT", type);
7586 goto error_out;
7588 if (count != eltscnt)
7589 goto cnt_mismatch;
7590 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7591 for (unsigned int i = 0; i < count; i++)
7593 TREE_TYPE (v[i]) = eltype;
7594 layout_decl (v[i], 0);
7595 if (processing_template_decl)
7596 continue;
7597 tree t = unshare_expr (dexp);
7598 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7599 &t, size_int (i));
7600 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7601 eltype, t, size_int (i), NULL_TREE,
7602 NULL_TREE);
7603 SET_DECL_VALUE_EXPR (v[i], t);
7604 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7607 else if (tree tsize = get_tuple_size (type))
7609 if (tsize == error_mark_node)
7611 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7612 "constant expression", type);
7613 goto error_out;
7615 if (!tree_fits_uhwi_p (tsize))
7617 error_n (loc, count,
7618 "%u name provided for structured binding",
7619 "%u names provided for structured binding", count);
7620 inform (loc, "while %qT decomposes into %E elements",
7621 type, tsize);
7622 goto error_out;
7624 eltscnt = tree_to_uhwi (tsize);
7625 if (count != eltscnt)
7626 goto cnt_mismatch;
7627 int save_read = DECL_READ_P (decl);
7628 for (unsigned i = 0; i < count; ++i)
7630 location_t sloc = input_location;
7631 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7633 input_location = dloc;
7634 tree init = get_tuple_decomp_init (decl, i);
7635 tree eltype = (init == error_mark_node ? error_mark_node
7636 : get_tuple_element_type (type, i));
7637 input_location = sloc;
7639 if (init == error_mark_node || eltype == error_mark_node)
7641 inform (dloc, "in initialization of structured binding "
7642 "variable %qD", v[i]);
7643 goto error_out;
7645 /* Save the decltype away before reference collapse. */
7646 store_decomp_type (v[i], eltype);
7647 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7648 TREE_TYPE (v[i]) = eltype;
7649 layout_decl (v[i], 0);
7650 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7652 /* In this case the names are variables, not just proxies. */
7653 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7654 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7656 if (!processing_template_decl)
7657 cp_finish_decl (v[i], init, /*constexpr*/false,
7658 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7660 /* Ignore reads from the underlying decl performed during initialization
7661 of the individual variables. If those will be read, we'll mark
7662 the underlying decl as read at that point. */
7663 DECL_READ_P (decl) = save_read;
7665 else if (TREE_CODE (type) == UNION_TYPE)
7667 error_at (loc, "cannot decompose union type %qT", type);
7668 goto error_out;
7670 else if (!CLASS_TYPE_P (type))
7672 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7673 goto error_out;
7675 else if (LAMBDA_TYPE_P (type))
7677 error_at (loc, "cannot decompose lambda closure type %qT", type);
7678 goto error_out;
7680 else if (processing_template_decl && !COMPLETE_TYPE_P (type))
7681 pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
7682 type);
7683 else
7685 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7686 if (btype == error_mark_node)
7687 goto error_out;
7688 else if (btype == NULL_TREE)
7690 error_at (loc, "cannot decompose class type %qT without non-static "
7691 "data members", type);
7692 goto error_out;
7694 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7695 if (TREE_CODE (field) != FIELD_DECL
7696 || DECL_ARTIFICIAL (field)
7697 || DECL_UNNAMED_BIT_FIELD (field))
7698 continue;
7699 else
7700 eltscnt++;
7701 if (count != eltscnt)
7702 goto cnt_mismatch;
7703 tree t = dexp;
7704 if (type != btype)
7706 t = convert_to_base (t, btype, /*check_access*/true,
7707 /*nonnull*/false, tf_warning_or_error);
7708 type = btype;
7710 unsigned int i = 0;
7711 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7712 if (TREE_CODE (field) != FIELD_DECL
7713 || DECL_ARTIFICIAL (field)
7714 || DECL_UNNAMED_BIT_FIELD (field))
7715 continue;
7716 else
7718 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7719 NULL_TREE);
7720 if (REFERENCE_REF_P (tt))
7721 tt = TREE_OPERAND (tt, 0);
7722 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7723 layout_decl (v[i], 0);
7724 if (!processing_template_decl)
7726 SET_DECL_VALUE_EXPR (v[i], tt);
7727 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7729 i++;
7732 if (processing_template_decl)
7734 for (unsigned int i = 0; i < count; i++)
7735 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7737 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7738 NULL_TREE, NULL_TREE);
7739 SET_DECL_VALUE_EXPR (v[i], a);
7740 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7745 /* Returns a declaration for a VAR_DECL as if:
7747 extern "C" TYPE NAME;
7749 had been seen. Used to create compiler-generated global
7750 variables. */
7752 static tree
7753 declare_global_var (tree name, tree type)
7755 tree decl;
7757 push_to_top_level ();
7758 decl = build_decl (input_location, VAR_DECL, name, type);
7759 TREE_PUBLIC (decl) = 1;
7760 DECL_EXTERNAL (decl) = 1;
7761 DECL_ARTIFICIAL (decl) = 1;
7762 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7763 /* If the user has explicitly declared this variable (perhaps
7764 because the code we are compiling is part of a low-level runtime
7765 library), then it is possible that our declaration will be merged
7766 with theirs by pushdecl. */
7767 decl = pushdecl (decl);
7768 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7769 pop_from_top_level ();
7771 return decl;
7774 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7775 if "__cxa_atexit" is not being used) corresponding to the function
7776 to be called when the program exits. */
7778 static tree
7779 get_atexit_fn_ptr_type (void)
7781 tree fn_type;
7783 if (!atexit_fn_ptr_type_node)
7785 tree arg_type;
7786 if (flag_use_cxa_atexit
7787 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7788 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7789 arg_type = ptr_type_node;
7790 else
7791 /* The parameter to "atexit" is "void (*)(void)". */
7792 arg_type = NULL_TREE;
7794 fn_type = build_function_type_list (void_type_node,
7795 arg_type, NULL_TREE);
7796 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7799 return atexit_fn_ptr_type_node;
7802 /* Returns a pointer to the `atexit' function. Note that if
7803 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7804 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7806 static tree
7807 get_atexit_node (void)
7809 tree atexit_fndecl;
7810 tree fn_type;
7811 tree fn_ptr_type;
7812 const char *name;
7813 bool use_aeabi_atexit;
7815 if (atexit_node)
7816 return atexit_node;
7818 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7820 /* The declaration for `__cxa_atexit' is:
7822 int __cxa_atexit (void (*)(void *), void *, void *)
7824 We build up the argument types and then the function type
7825 itself. */
7826 tree argtype0, argtype1, argtype2;
7828 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7829 /* First, build the pointer-to-function type for the first
7830 argument. */
7831 fn_ptr_type = get_atexit_fn_ptr_type ();
7832 /* Then, build the rest of the argument types. */
7833 argtype2 = ptr_type_node;
7834 if (use_aeabi_atexit)
7836 argtype1 = fn_ptr_type;
7837 argtype0 = ptr_type_node;
7839 else
7841 argtype1 = ptr_type_node;
7842 argtype0 = fn_ptr_type;
7844 /* And the final __cxa_atexit type. */
7845 fn_type = build_function_type_list (integer_type_node,
7846 argtype0, argtype1, argtype2,
7847 NULL_TREE);
7848 if (use_aeabi_atexit)
7849 name = "__aeabi_atexit";
7850 else
7851 name = "__cxa_atexit";
7853 else
7855 /* The declaration for `atexit' is:
7857 int atexit (void (*)());
7859 We build up the argument types and then the function type
7860 itself. */
7861 fn_ptr_type = get_atexit_fn_ptr_type ();
7862 /* Build the final atexit type. */
7863 fn_type = build_function_type_list (integer_type_node,
7864 fn_ptr_type, NULL_TREE);
7865 name = "atexit";
7868 /* Now, build the function declaration. */
7869 push_lang_context (lang_name_c);
7870 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7871 mark_used (atexit_fndecl);
7872 pop_lang_context ();
7873 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7875 return atexit_node;
7878 /* Like get_atexit_node, but for thread-local cleanups. */
7880 static tree
7881 get_thread_atexit_node (void)
7883 /* The declaration for `__cxa_thread_atexit' is:
7885 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
7886 tree fn_type = build_function_type_list (integer_type_node,
7887 get_atexit_fn_ptr_type (),
7888 ptr_type_node, ptr_type_node,
7889 NULL_TREE);
7891 /* Now, build the function declaration. */
7892 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
7893 ECF_LEAF | ECF_NOTHROW);
7894 return decay_conversion (atexit_fndecl, tf_warning_or_error);
7897 /* Returns the __dso_handle VAR_DECL. */
7899 static tree
7900 get_dso_handle_node (void)
7902 if (dso_handle_node)
7903 return dso_handle_node;
7905 /* Declare the variable. */
7906 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
7907 ptr_type_node);
7909 #ifdef HAVE_GAS_HIDDEN
7910 if (dso_handle_node != error_mark_node)
7912 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
7913 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
7915 #endif
7917 return dso_handle_node;
7920 /* Begin a new function with internal linkage whose job will be simply
7921 to destroy some particular variable. */
7923 static GTY(()) int start_cleanup_cnt;
7925 static tree
7926 start_cleanup_fn (void)
7928 char name[32];
7929 tree fntype;
7930 tree fndecl;
7931 bool use_cxa_atexit = flag_use_cxa_atexit
7932 && !targetm.cxx.use_atexit_for_cxa_atexit ();
7934 push_to_top_level ();
7936 /* No need to mangle this. */
7937 push_lang_context (lang_name_c);
7939 /* Build the name of the function. */
7940 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
7941 /* Build the function declaration. */
7942 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
7943 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
7944 /* It's a function with internal linkage, generated by the
7945 compiler. */
7946 TREE_PUBLIC (fndecl) = 0;
7947 DECL_ARTIFICIAL (fndecl) = 1;
7948 /* Make the function `inline' so that it is only emitted if it is
7949 actually needed. It is unlikely that it will be inlined, since
7950 it is only called via a function pointer, but we avoid unnecessary
7951 emissions this way. */
7952 DECL_DECLARED_INLINE_P (fndecl) = 1;
7953 DECL_INTERFACE_KNOWN (fndecl) = 1;
7954 /* Build the parameter. */
7955 if (use_cxa_atexit)
7957 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
7958 TREE_USED (parmdecl) = 1;
7959 DECL_READ_P (parmdecl) = 1;
7960 DECL_ARGUMENTS (fndecl) = parmdecl;
7963 pushdecl (fndecl);
7964 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7966 pop_lang_context ();
7968 return current_function_decl;
7971 /* Finish the cleanup function begun by start_cleanup_fn. */
7973 static void
7974 end_cleanup_fn (void)
7976 expand_or_defer_fn (finish_function (/*inline_p=*/false));
7978 pop_from_top_level ();
7981 /* Generate code to handle the destruction of DECL, an object with
7982 static storage duration. */
7984 tree
7985 register_dtor_fn (tree decl)
7987 tree cleanup;
7988 tree addr;
7989 tree compound_stmt;
7990 tree fcall;
7991 tree type;
7992 bool ob_parm, dso_parm, use_dtor;
7993 tree arg0, arg1, arg2;
7994 tree atex_node;
7996 type = TREE_TYPE (decl);
7997 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7998 return void_node;
8000 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
8001 "__aeabi_atexit"), and DECL is a class object, we can just pass the
8002 destructor to "__cxa_atexit"; we don't have to build a temporary
8003 function to do the cleanup. */
8004 dso_parm = (flag_use_cxa_atexit
8005 && !targetm.cxx.use_atexit_for_cxa_atexit ());
8006 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
8007 use_dtor = ob_parm && CLASS_TYPE_P (type);
8008 if (use_dtor)
8010 cleanup = get_class_binding (type, complete_dtor_identifier);
8012 /* Make sure it is accessible. */
8013 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
8014 tf_warning_or_error);
8016 else
8018 /* Call build_cleanup before we enter the anonymous function so
8019 that any access checks will be done relative to the current
8020 scope, rather than the scope of the anonymous function. */
8021 build_cleanup (decl);
8023 /* Now start the function. */
8024 cleanup = start_cleanup_fn ();
8026 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8027 to the original function, rather than the anonymous one. That
8028 will make the back end think that nested functions are in use,
8029 which causes confusion. */
8030 push_deferring_access_checks (dk_no_check);
8031 fcall = build_cleanup (decl);
8032 pop_deferring_access_checks ();
8034 /* Create the body of the anonymous function. */
8035 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
8036 finish_expr_stmt (fcall);
8037 finish_compound_stmt (compound_stmt);
8038 end_cleanup_fn ();
8041 /* Call atexit with the cleanup function. */
8042 mark_used (cleanup);
8043 cleanup = build_address (cleanup);
8045 if (CP_DECL_THREAD_LOCAL_P (decl))
8046 atex_node = get_thread_atexit_node ();
8047 else
8048 atex_node = get_atexit_node ();
8050 if (use_dtor)
8052 /* We must convert CLEANUP to the type that "__cxa_atexit"
8053 expects. */
8054 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
8055 /* "__cxa_atexit" will pass the address of DECL to the
8056 cleanup function. */
8057 mark_used (decl);
8058 addr = build_address (decl);
8059 /* The declared type of the parameter to "__cxa_atexit" is
8060 "void *". For plain "T*", we could just let the
8061 machinery in cp_build_function_call convert it -- but if the
8062 type is "cv-qualified T *", then we need to convert it
8063 before passing it in, to avoid spurious errors. */
8064 addr = build_nop (ptr_type_node, addr);
8066 else
8067 /* Since the cleanup functions we build ignore the address
8068 they're given, there's no reason to pass the actual address
8069 in, and, in general, it's cheaper to pass NULL than any
8070 other value. */
8071 addr = null_pointer_node;
8073 if (dso_parm)
8074 arg2 = cp_build_addr_expr (get_dso_handle_node (),
8075 tf_warning_or_error);
8076 else if (ob_parm)
8077 /* Just pass NULL to the dso handle parm if we don't actually
8078 have a DSO handle on this target. */
8079 arg2 = null_pointer_node;
8080 else
8081 arg2 = NULL_TREE;
8083 if (ob_parm)
8085 if (!CP_DECL_THREAD_LOCAL_P (decl)
8086 && targetm.cxx.use_aeabi_atexit ())
8088 arg1 = cleanup;
8089 arg0 = addr;
8091 else
8093 arg1 = addr;
8094 arg0 = cleanup;
8097 else
8099 arg0 = cleanup;
8100 arg1 = NULL_TREE;
8102 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8103 arg0, arg1, arg2, NULL_TREE);
8106 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8107 is its initializer. Generate code to handle the construction
8108 and destruction of DECL. */
8110 static void
8111 expand_static_init (tree decl, tree init)
8113 gcc_assert (VAR_P (decl));
8114 gcc_assert (TREE_STATIC (decl));
8116 /* Some variables require no dynamic initialization. */
8117 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8119 /* Make sure the destructor is callable. */
8120 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8121 if (!init)
8122 return;
8125 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8126 && !DECL_FUNCTION_SCOPE_P (decl))
8128 if (init)
8129 error ("non-local variable %qD declared %<__thread%> "
8130 "needs dynamic initialization", decl);
8131 else
8132 error ("non-local variable %qD declared %<__thread%> "
8133 "has a non-trivial destructor", decl);
8134 static bool informed;
8135 if (!informed)
8137 inform (DECL_SOURCE_LOCATION (decl),
8138 "C++11 %<thread_local%> allows dynamic initialization "
8139 "and destruction");
8140 informed = true;
8142 return;
8145 if (DECL_FUNCTION_SCOPE_P (decl))
8147 /* Emit code to perform this initialization but once. */
8148 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8149 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8150 tree guard, guard_addr;
8151 tree flag, begin;
8152 /* We don't need thread-safety code for thread-local vars. */
8153 bool thread_guard = (flag_threadsafe_statics
8154 && !CP_DECL_THREAD_LOCAL_P (decl));
8156 /* Emit code to perform this initialization but once. This code
8157 looks like:
8159 static <type> guard;
8160 if (!__atomic_load (guard.first_byte)) {
8161 if (__cxa_guard_acquire (&guard)) {
8162 bool flag = false;
8163 try {
8164 // Do initialization.
8165 flag = true; __cxa_guard_release (&guard);
8166 // Register variable for destruction at end of program.
8167 } catch {
8168 if (!flag) __cxa_guard_abort (&guard);
8173 Note that the `flag' variable is only set to 1 *after* the
8174 initialization is complete. This ensures that an exception,
8175 thrown during the construction, will cause the variable to
8176 reinitialized when we pass through this code again, as per:
8178 [stmt.dcl]
8180 If the initialization exits by throwing an exception, the
8181 initialization is not complete, so it will be tried again
8182 the next time control enters the declaration.
8184 This process should be thread-safe, too; multiple threads
8185 should not be able to initialize the variable more than
8186 once. */
8188 /* Create the guard variable. */
8189 guard = get_guard (decl);
8191 /* Begin the conditional initialization. */
8192 if_stmt = begin_if_stmt ();
8194 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8195 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8197 if (thread_guard)
8199 tree vfntype = NULL_TREE;
8200 tree acquire_name, release_name, abort_name;
8201 tree acquire_fn, release_fn, abort_fn;
8202 guard_addr = build_address (guard);
8204 acquire_name = get_identifier ("__cxa_guard_acquire");
8205 release_name = get_identifier ("__cxa_guard_release");
8206 abort_name = get_identifier ("__cxa_guard_abort");
8207 acquire_fn = get_global_binding (acquire_name);
8208 release_fn = get_global_binding (release_name);
8209 abort_fn = get_global_binding (abort_name);
8210 if (!acquire_fn)
8211 acquire_fn = push_library_fn
8212 (acquire_name, build_function_type_list (integer_type_node,
8213 TREE_TYPE (guard_addr),
8214 NULL_TREE),
8215 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8216 if (!release_fn || !abort_fn)
8217 vfntype = build_function_type_list (void_type_node,
8218 TREE_TYPE (guard_addr),
8219 NULL_TREE);
8220 if (!release_fn)
8221 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8222 ECF_NOTHROW | ECF_LEAF);
8223 if (!abort_fn)
8224 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8225 ECF_NOTHROW | ECF_LEAF);
8227 inner_if_stmt = begin_if_stmt ();
8228 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8229 inner_if_stmt);
8231 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8232 begin = get_target_expr (boolean_false_node);
8233 flag = TARGET_EXPR_SLOT (begin);
8235 TARGET_EXPR_CLEANUP (begin)
8236 = build3 (COND_EXPR, void_type_node, flag,
8237 void_node,
8238 build_call_n (abort_fn, 1, guard_addr));
8239 CLEANUP_EH_ONLY (begin) = 1;
8241 /* Do the initialization itself. */
8242 init = add_stmt_to_compound (begin, init);
8243 init = add_stmt_to_compound
8244 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8245 init = add_stmt_to_compound
8246 (init, build_call_n (release_fn, 1, guard_addr));
8248 else
8249 init = add_stmt_to_compound (init, set_guard (guard));
8251 /* Use atexit to register a function for destroying this static
8252 variable. */
8253 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8255 finish_expr_stmt (init);
8257 if (thread_guard)
8259 finish_compound_stmt (inner_then_clause);
8260 finish_then_clause (inner_if_stmt);
8261 finish_if_stmt (inner_if_stmt);
8264 finish_compound_stmt (then_clause);
8265 finish_then_clause (if_stmt);
8266 finish_if_stmt (if_stmt);
8268 else if (CP_DECL_THREAD_LOCAL_P (decl))
8269 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8270 else
8271 static_aggregates = tree_cons (init, decl, static_aggregates);
8275 /* Make TYPE a complete type based on INITIAL_VALUE.
8276 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8277 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8278 3 if the initializer list is empty (in pedantic mode). */
8281 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8283 int failure;
8284 tree type, elt_type;
8286 /* Don't get confused by a CONSTRUCTOR for some other type. */
8287 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8288 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8289 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8290 return 1;
8292 if (initial_value)
8294 unsigned HOST_WIDE_INT i;
8295 tree value;
8297 /* An array of character type can be initialized from a
8298 brace-enclosed string constant.
8300 FIXME: this code is duplicated from reshape_init. Probably
8301 we should just call reshape_init here? */
8302 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8303 && TREE_CODE (initial_value) == CONSTRUCTOR
8304 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8306 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8307 tree value = (*v)[0].value;
8309 if (TREE_CODE (value) == STRING_CST
8310 && v->length () == 1)
8311 initial_value = value;
8314 /* If any of the elements are parameter packs, we can't actually
8315 complete this type now because the array size is dependent. */
8316 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8318 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8319 i, value)
8321 if (PACK_EXPANSION_P (value))
8322 return 0;
8327 failure = complete_array_type (ptype, initial_value, do_default);
8329 /* We can create the array before the element type is complete, which
8330 means that we didn't have these two bits set in the original type
8331 either. In completing the type, we are expected to propagate these
8332 bits. See also complete_type which does the same thing for arrays
8333 of fixed size. */
8334 type = *ptype;
8335 if (type != error_mark_node && TYPE_DOMAIN (type))
8337 elt_type = TREE_TYPE (type);
8338 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8339 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8340 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8343 return failure;
8346 /* As above, but either give an error or reject zero-size arrays, depending
8347 on COMPLAIN. */
8350 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8351 bool do_default, tsubst_flags_t complain)
8353 int failure;
8354 bool sfinae = !(complain & tf_error);
8355 /* In SFINAE context we can't be lenient about zero-size arrays. */
8356 if (sfinae)
8357 ++pedantic;
8358 failure = cp_complete_array_type (ptype, initial_value, do_default);
8359 if (sfinae)
8360 --pedantic;
8361 if (failure)
8363 if (sfinae)
8364 /* Not an error. */;
8365 else if (failure == 1)
8366 error ("initializer fails to determine size of %qT", *ptype);
8367 else if (failure == 2)
8369 if (do_default)
8370 error ("array size missing in %qT", *ptype);
8372 else if (failure == 3)
8373 error ("zero-size array %qT", *ptype);
8374 *ptype = error_mark_node;
8376 return failure;
8379 /* Return zero if something is declared to be a member of type
8380 CTYPE when in the context of CUR_TYPE. STRING is the error
8381 message to print in that case. Otherwise, quietly return 1. */
8383 static int
8384 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8386 if (ctype && ctype != cur_type)
8388 if (flags == DTOR_FLAG)
8389 error ("destructor for alien class %qT cannot be a member", ctype);
8390 else
8391 error ("constructor for alien class %qT cannot be a member", ctype);
8392 return 0;
8394 return 1;
8397 /* Subroutine of `grokdeclarator'. */
8399 /* Generate errors possibly applicable for a given set of specifiers.
8400 This is for ARM $7.1.2. */
8402 static void
8403 bad_specifiers (tree object,
8404 enum bad_spec_place type,
8405 int virtualp,
8406 int quals,
8407 int inlinep,
8408 int friendp,
8409 int raises,
8410 const location_t* locations)
8412 switch (type)
8414 case BSP_VAR:
8415 if (virtualp)
8416 error_at (locations[ds_virtual],
8417 "%qD declared as a %<virtual%> variable", object);
8418 if (quals)
8419 error ("%<const%> and %<volatile%> function specifiers on "
8420 "%qD invalid in variable declaration", object);
8421 break;
8422 case BSP_PARM:
8423 if (virtualp)
8424 error_at (locations[ds_virtual],
8425 "%qD declared as a %<virtual%> parameter", object);
8426 if (inlinep)
8427 error_at (locations[ds_inline],
8428 "%qD declared as an %<inline%> parameter", object);
8429 if (quals)
8430 error ("%<const%> and %<volatile%> function specifiers on "
8431 "%qD invalid in parameter declaration", object);
8432 break;
8433 case BSP_TYPE:
8434 if (virtualp)
8435 error_at (locations[ds_virtual],
8436 "%qD declared as a %<virtual%> type", object);
8437 if (inlinep)
8438 error_at (locations[ds_inline],
8439 "%qD declared as an %<inline%> type", object);
8440 if (quals)
8441 error ("%<const%> and %<volatile%> function specifiers on "
8442 "%qD invalid in type declaration", object);
8443 break;
8444 case BSP_FIELD:
8445 if (virtualp)
8446 error_at (locations[ds_virtual],
8447 "%qD declared as a %<virtual%> field", object);
8448 if (inlinep)
8449 error_at (locations[ds_inline],
8450 "%qD declared as an %<inline%> field", object);
8451 if (quals)
8452 error ("%<const%> and %<volatile%> function specifiers on "
8453 "%qD invalid in field declaration", object);
8454 break;
8455 default:
8456 gcc_unreachable();
8458 if (friendp)
8459 error ("%q+D declared as a friend", object);
8460 if (raises
8461 && !flag_noexcept_type
8462 && (TREE_CODE (object) == TYPE_DECL
8463 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8464 && !TYPE_REFFN_P (TREE_TYPE (object))
8465 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8466 error ("%q+D declared with an exception specification", object);
8469 /* DECL is a member function or static data member and is presently
8470 being defined. Check that the definition is taking place in a
8471 valid namespace. */
8473 static void
8474 check_class_member_definition_namespace (tree decl)
8476 /* These checks only apply to member functions and static data
8477 members. */
8478 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8479 /* We check for problems with specializations in pt.c in
8480 check_specialization_namespace, where we can issue better
8481 diagnostics. */
8482 if (processing_specialization)
8483 return;
8484 /* We check this in check_explicit_instantiation_namespace. */
8485 if (processing_explicit_instantiation)
8486 return;
8487 /* [class.mfct]
8489 A member function definition that appears outside of the
8490 class definition shall appear in a namespace scope enclosing
8491 the class definition.
8493 [class.static.data]
8495 The definition for a static data member shall appear in a
8496 namespace scope enclosing the member's class definition. */
8497 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8498 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8499 decl, DECL_CONTEXT (decl));
8502 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8503 METHOD_TYPE for a non-static member function; QUALS are the
8504 cv-qualifiers that apply to the function. */
8506 tree
8507 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8509 tree this_type;
8510 tree qual_type;
8511 tree parm;
8512 cp_cv_quals this_quals;
8514 if (CLASS_TYPE_P (type))
8516 this_type
8517 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8518 this_type = build_pointer_type (this_type);
8520 else
8521 this_type = type_of_this_parm (type);
8522 /* The `this' parameter is implicitly `const'; it cannot be
8523 assigned to. */
8524 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8525 qual_type = cp_build_qualified_type (this_type, this_quals);
8526 parm = build_artificial_parm (fn, this_identifier, qual_type);
8527 cp_apply_type_quals_to_decl (this_quals, parm);
8528 return parm;
8531 /* DECL is a static member function. Complain if it was declared
8532 with function-cv-quals. */
8534 static void
8535 check_static_quals (tree decl, cp_cv_quals quals)
8537 if (quals != TYPE_UNQUALIFIED)
8538 error ("static member function %q#D declared with type qualifiers",
8539 decl);
8542 // Check that FN takes no arguments and returns bool.
8543 static void
8544 check_concept_fn (tree fn)
8546 // A constraint is nullary.
8547 if (DECL_ARGUMENTS (fn))
8548 error_at (DECL_SOURCE_LOCATION (fn),
8549 "concept %q#D declared with function parameters", fn);
8551 // The declared return type of the concept shall be bool, and
8552 // it shall not be deduced from it definition.
8553 tree type = TREE_TYPE (TREE_TYPE (fn));
8554 if (is_auto (type))
8555 error_at (DECL_SOURCE_LOCATION (fn),
8556 "concept %q#D declared with a deduced return type", fn);
8557 else if (type != boolean_type_node)
8558 error_at (DECL_SOURCE_LOCATION (fn),
8559 "concept %q#D with non-%<bool%> return type %qT", fn, type);
8562 /* Helper function. Replace the temporary this parameter injected
8563 during cp_finish_omp_declare_simd with the real this parameter. */
8565 static tree
8566 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8568 tree this_parm = (tree) data;
8569 if (TREE_CODE (*tp) == PARM_DECL
8570 && DECL_NAME (*tp) == this_identifier
8571 && *tp != this_parm)
8572 *tp = this_parm;
8573 else if (TYPE_P (*tp))
8574 *walk_subtrees = 0;
8575 return NULL_TREE;
8578 /* CTYPE is class type, or null if non-class.
8579 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8580 or METHOD_TYPE.
8581 DECLARATOR is the function's name.
8582 PARMS is a chain of PARM_DECLs for the function.
8583 VIRTUALP is truthvalue of whether the function is virtual or not.
8584 FLAGS are to be passed through to `grokclassfn'.
8585 QUALS are qualifiers indicating whether the function is `const'
8586 or `volatile'.
8587 RAISES is a list of exceptions that this function can raise.
8588 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8589 not look, and -1 if we should not call `grokclassfn' at all.
8591 SFK is the kind of special function (if any) for the new function.
8593 Returns `NULL_TREE' if something goes wrong, after issuing
8594 applicable error messages. */
8596 static tree
8597 grokfndecl (tree ctype,
8598 tree type,
8599 tree declarator,
8600 tree parms,
8601 tree orig_declarator,
8602 const cp_decl_specifier_seq *declspecs,
8603 tree decl_reqs,
8604 int virtualp,
8605 enum overload_flags flags,
8606 cp_cv_quals quals,
8607 cp_ref_qualifier rqual,
8608 tree raises,
8609 int check,
8610 int friendp,
8611 int publicp,
8612 int inlinep,
8613 bool deletedp,
8614 special_function_kind sfk,
8615 bool funcdef_flag,
8616 bool late_return_type_p,
8617 int template_count,
8618 tree in_namespace,
8619 tree* attrlist,
8620 location_t location)
8622 tree decl;
8623 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8624 tree t;
8626 if (location == UNKNOWN_LOCATION)
8627 location = input_location;
8629 // Was the concept specifier present?
8630 bool concept_p = inlinep & 4;
8632 // Concept declarations must have a corresponding definition.
8633 if (concept_p && !funcdef_flag)
8635 error_at (location, "concept %qD has no definition", declarator);
8636 return NULL_TREE;
8639 type = build_cp_fntype_variant (type, rqual, raises, late_return_type_p);
8641 decl = build_lang_decl_loc (location, FUNCTION_DECL, declarator, type);
8643 /* Set the constraints on the declaration. */
8644 if (flag_concepts)
8646 tree tmpl_reqs = NULL_TREE;
8647 if (processing_template_decl > template_class_depth (ctype))
8648 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8650 /* Adjust the required expression into a constraint. */
8651 if (decl_reqs)
8652 decl_reqs = normalize_expression (decl_reqs);
8654 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8655 set_constraints (decl, ci);
8658 if (TREE_CODE (type) == METHOD_TYPE)
8660 tree parm = build_this_parm (decl, type, quals);
8661 DECL_CHAIN (parm) = parms;
8662 parms = parm;
8664 /* Allocate space to hold the vptr bit if needed. */
8665 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8668 DECL_ARGUMENTS (decl) = parms;
8669 for (t = parms; t; t = DECL_CHAIN (t))
8670 DECL_CONTEXT (t) = decl;
8672 /* Propagate volatile out from type to decl. */
8673 if (TYPE_VOLATILE (type))
8674 TREE_THIS_VOLATILE (decl) = 1;
8676 /* Setup decl according to sfk. */
8677 switch (sfk)
8679 case sfk_constructor:
8680 case sfk_copy_constructor:
8681 case sfk_move_constructor:
8682 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8683 DECL_NAME (decl) = ctor_identifier;
8684 break;
8685 case sfk_destructor:
8686 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8687 DECL_NAME (decl) = dtor_identifier;
8688 break;
8689 default:
8690 break;
8693 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8695 if (funcdef_flag)
8696 error_at (location,
8697 "defining explicit specialization %qD in friend declaration",
8698 orig_declarator);
8699 else
8701 tree fns = TREE_OPERAND (orig_declarator, 0);
8702 tree args = TREE_OPERAND (orig_declarator, 1);
8704 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8706 /* Something like `template <class T> friend void f<T>()'. */
8707 error_at (location,
8708 "invalid use of template-id %qD in declaration "
8709 "of primary template",
8710 orig_declarator);
8711 return NULL_TREE;
8715 /* A friend declaration of the form friend void f<>(). Record
8716 the information in the TEMPLATE_ID_EXPR. */
8717 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8719 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8720 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8722 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8723 if (TREE_PURPOSE (t)
8724 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8726 error_at (defarg_location (TREE_PURPOSE (t)),
8727 "default arguments are not allowed in declaration "
8728 "of friend template specialization %qD",
8729 decl);
8730 return NULL_TREE;
8733 if (inlinep & 1)
8735 error_at (declspecs->locations[ds_inline],
8736 "%<inline%> is not allowed in declaration of friend "
8737 "template specialization %qD",
8738 decl);
8739 return NULL_TREE;
8744 /* If this decl has namespace scope, set that up. */
8745 if (in_namespace)
8746 set_decl_namespace (decl, in_namespace, friendp);
8747 else if (!ctype)
8748 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8750 /* `main' and builtins have implicit 'C' linkage. */
8751 if (ctype == NULL_TREE
8752 && DECL_FILE_SCOPE_P (decl)
8753 && current_lang_name == lang_name_cplusplus
8754 && (MAIN_NAME_P (declarator)
8755 || (IDENTIFIER_LENGTH (declarator) > 10
8756 && IDENTIFIER_POINTER (declarator)[0] == '_'
8757 && IDENTIFIER_POINTER (declarator)[1] == '_'
8758 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8759 "builtin_", 8) == 0)
8760 || (targetcm.cxx_implicit_extern_c
8761 && (targetcm.cxx_implicit_extern_c
8762 (IDENTIFIER_POINTER (declarator))))))
8763 SET_DECL_LANGUAGE (decl, lang_c);
8765 /* Should probably propagate const out from type to decl I bet (mrs). */
8766 if (staticp)
8768 DECL_STATIC_FUNCTION_P (decl) = 1;
8769 DECL_CONTEXT (decl) = ctype;
8772 if (deletedp)
8773 DECL_DELETED_FN (decl) = 1;
8775 if (ctype)
8777 DECL_CONTEXT (decl) = ctype;
8778 if (funcdef_flag)
8779 check_class_member_definition_namespace (decl);
8782 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8784 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8785 error_at (location, "cannot declare %<::main%> to be a template");
8786 if (inlinep & 1)
8787 error_at (declspecs->locations[ds_inline],
8788 "cannot declare %<::main%> to be inline");
8789 if (inlinep & 2)
8790 error_at (declspecs->locations[ds_constexpr],
8791 "cannot declare %<::main%> to be %<constexpr%>");
8792 if (!publicp)
8793 error_at (location, "cannot declare %<::main%> to be static");
8794 inlinep = 0;
8795 publicp = 1;
8798 /* Members of anonymous types and local classes have no linkage; make
8799 them internal. If a typedef is made later, this will be changed. */
8800 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8801 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8802 publicp = 0;
8804 if (publicp && cxx_dialect == cxx98)
8806 /* [basic.link]: A name with no linkage (notably, the name of a class
8807 or enumeration declared in a local scope) shall not be used to
8808 declare an entity with linkage.
8810 DR 757 relaxes this restriction for C++0x. */
8811 no_linkage_error (decl);
8814 TREE_PUBLIC (decl) = publicp;
8815 if (! publicp)
8817 DECL_INTERFACE_KNOWN (decl) = 1;
8818 DECL_NOT_REALLY_EXTERN (decl) = 1;
8821 /* If the declaration was declared inline, mark it as such. */
8822 if (inlinep)
8824 DECL_DECLARED_INLINE_P (decl) = 1;
8825 if (publicp)
8826 DECL_COMDAT (decl) = 1;
8828 if (inlinep & 2)
8829 DECL_DECLARED_CONSTEXPR_P (decl) = true;
8831 // If the concept declaration specifier was found, check
8832 // that the declaration satisfies the necessary requirements.
8833 if (concept_p)
8835 DECL_DECLARED_CONCEPT_P (decl) = true;
8836 check_concept_fn (decl);
8839 DECL_EXTERNAL (decl) = 1;
8840 if (TREE_CODE (type) == FUNCTION_TYPE)
8842 if (quals || rqual)
8843 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8844 TYPE_UNQUALIFIED,
8845 REF_QUAL_NONE);
8847 if (quals)
8849 error (ctype
8850 ? G_("static member function %qD cannot have cv-qualifier")
8851 : G_("non-member function %qD cannot have cv-qualifier"),
8852 decl);
8853 quals = TYPE_UNQUALIFIED;
8856 if (rqual)
8858 error (ctype
8859 ? G_("static member function %qD cannot have ref-qualifier")
8860 : G_("non-member function %qD cannot have ref-qualifier"),
8861 decl);
8862 rqual = REF_QUAL_NONE;
8866 if (deduction_guide_p (decl))
8868 if (!DECL_NAMESPACE_SCOPE_P (decl))
8870 error_at (location, "deduction guide %qD must be declared at "
8871 "namespace scope", decl);
8872 return NULL_TREE;
8874 if (funcdef_flag)
8875 error_at (location,
8876 "deduction guide %qD must not have a function body", decl);
8878 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
8879 && !grok_op_properties (decl, /*complain=*/true))
8880 return NULL_TREE;
8881 else if (UDLIT_OPER_P (DECL_NAME (decl)))
8883 bool long_long_unsigned_p;
8884 bool long_double_p;
8885 const char *suffix = NULL;
8886 /* [over.literal]/6: Literal operators shall not have C linkage. */
8887 if (DECL_LANGUAGE (decl) == lang_c)
8889 error_at (location, "literal operator with C linkage");
8890 maybe_show_extern_c_location ();
8891 return NULL_TREE;
8894 if (DECL_NAMESPACE_SCOPE_P (decl))
8896 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8897 &long_double_p))
8899 error_at (location, "%qD has invalid argument list", decl);
8900 return NULL_TREE;
8903 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
8904 if (long_long_unsigned_p)
8906 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
8907 warning_at (location, 0, "integer suffix %qs"
8908 " shadowed by implementation", suffix);
8910 else if (long_double_p)
8912 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
8913 warning_at (location, 0, "floating point suffix %qs"
8914 " shadowed by implementation", suffix);
8916 /* 17.6.3.3.5 */
8917 if (suffix[0] != '_'
8918 && !in_system_header_at (location)
8919 && !current_function_decl && !(friendp && !funcdef_flag))
8920 warning_at (location, OPT_Wliteral_suffix,
8921 "literal operator suffixes not preceded by %<_%>"
8922 " are reserved for future standardization");
8924 else
8926 error_at (location, "%qD must be a non-member function", decl);
8927 return NULL_TREE;
8931 if (funcdef_flag)
8932 /* Make the init_value nonzero so pushdecl knows this is not
8933 tentative. error_mark_node is replaced later with the BLOCK. */
8934 DECL_INITIAL (decl) = error_mark_node;
8936 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8937 TREE_NOTHROW (decl) = 1;
8939 if (flag_openmp || flag_openmp_simd)
8941 /* Adjust "omp declare simd" attributes. */
8942 tree ods = lookup_attribute ("omp declare simd", *attrlist);
8943 if (ods)
8945 tree attr;
8946 for (attr = ods; attr;
8947 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
8949 if (TREE_CODE (type) == METHOD_TYPE)
8950 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
8951 DECL_ARGUMENTS (decl), NULL);
8952 if (TREE_VALUE (attr) != NULL_TREE)
8954 tree cl = TREE_VALUE (TREE_VALUE (attr));
8955 cl = c_omp_declare_simd_clauses_to_numbers
8956 (DECL_ARGUMENTS (decl), cl);
8957 if (cl)
8958 TREE_VALUE (TREE_VALUE (attr)) = cl;
8959 else
8960 TREE_VALUE (attr) = NULL_TREE;
8966 /* Caller will do the rest of this. */
8967 if (check < 0)
8968 return decl;
8970 if (ctype != NULL_TREE)
8971 grokclassfn (ctype, decl, flags);
8973 /* 12.4/3 */
8974 if (cxx_dialect >= cxx11
8975 && DECL_DESTRUCTOR_P (decl)
8976 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
8977 && !processing_template_decl)
8978 deduce_noexcept_on_destructor (decl);
8980 decl = check_explicit_specialization (orig_declarator, decl,
8981 template_count,
8982 2 * funcdef_flag +
8983 4 * (friendp != 0) +
8984 8 * concept_p,
8985 *attrlist);
8986 if (decl == error_mark_node)
8987 return NULL_TREE;
8989 if (DECL_STATIC_FUNCTION_P (decl))
8990 check_static_quals (decl, quals);
8992 if (attrlist)
8994 cplus_decl_attributes (&decl, *attrlist, 0);
8995 *attrlist = NULL_TREE;
8998 /* Check main's type after attributes have been applied. */
8999 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9001 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9002 integer_type_node))
9004 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
9005 tree newtype;
9006 error_at (declspecs->locations[ds_type_spec],
9007 "%<::main%> must return %<int%>");
9008 newtype = build_function_type (integer_type_node, oldtypeargs);
9009 TREE_TYPE (decl) = newtype;
9011 if (warn_main)
9012 check_main_parameter_types (decl);
9015 if (ctype != NULL_TREE && check)
9017 tree old_decl = check_classfn (ctype, decl,
9018 (processing_template_decl
9019 > template_class_depth (ctype))
9020 ? current_template_parms
9021 : NULL_TREE);
9023 if (old_decl == error_mark_node)
9024 return NULL_TREE;
9026 if (old_decl)
9028 tree ok;
9029 tree pushed_scope;
9031 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
9032 /* Because grokfndecl is always supposed to return a
9033 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9034 here. We depend on our callers to figure out that its
9035 really a template that's being returned. */
9036 old_decl = DECL_TEMPLATE_RESULT (old_decl);
9038 if (DECL_STATIC_FUNCTION_P (old_decl)
9039 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9041 /* Remove the `this' parm added by grokclassfn. */
9042 revert_static_member_fn (decl);
9043 check_static_quals (decl, quals);
9045 if (DECL_ARTIFICIAL (old_decl))
9047 error ("definition of implicitly-declared %qD", old_decl);
9048 return NULL_TREE;
9050 else if (DECL_DEFAULTED_FN (old_decl))
9052 error ("definition of explicitly-defaulted %q+D", decl);
9053 inform (DECL_SOURCE_LOCATION (old_decl),
9054 "%q#D explicitly defaulted here", old_decl);
9055 return NULL_TREE;
9058 /* Since we've smashed OLD_DECL to its
9059 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9060 if (TREE_CODE (decl) == TEMPLATE_DECL)
9061 decl = DECL_TEMPLATE_RESULT (decl);
9063 /* Attempt to merge the declarations. This can fail, in
9064 the case of some invalid specialization declarations. */
9065 pushed_scope = push_scope (ctype);
9066 ok = duplicate_decls (decl, old_decl, friendp);
9067 if (pushed_scope)
9068 pop_scope (pushed_scope);
9069 if (!ok)
9071 error ("no %q#D member function declared in class %qT",
9072 decl, ctype);
9073 return NULL_TREE;
9075 if (ok == error_mark_node)
9076 return NULL_TREE;
9077 return old_decl;
9081 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9082 return NULL_TREE;
9084 if (ctype == NULL_TREE || check)
9085 return decl;
9087 if (virtualp)
9088 DECL_VIRTUAL_P (decl) = 1;
9090 return decl;
9093 /* decl is a FUNCTION_DECL.
9094 specifiers are the parsed virt-specifiers.
9096 Set flags to reflect the virt-specifiers.
9098 Returns decl. */
9100 static tree
9101 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
9103 if (decl == NULL_TREE)
9104 return decl;
9105 if (specifiers & VIRT_SPEC_OVERRIDE)
9106 DECL_OVERRIDE_P (decl) = 1;
9107 if (specifiers & VIRT_SPEC_FINAL)
9108 DECL_FINAL_P (decl) = 1;
9109 return decl;
9112 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
9113 the linkage that DECL will receive in the object file. */
9115 static void
9116 set_linkage_for_static_data_member (tree decl)
9118 /* A static data member always has static storage duration and
9119 external linkage. Note that static data members are forbidden in
9120 local classes -- the only situation in which a class has
9121 non-external linkage. */
9122 TREE_PUBLIC (decl) = 1;
9123 TREE_STATIC (decl) = 1;
9124 /* For non-template classes, static data members are always put
9125 out in exactly those files where they are defined, just as
9126 with ordinary namespace-scope variables. */
9127 if (!processing_template_decl)
9128 DECL_INTERFACE_KNOWN (decl) = 1;
9131 /* Create a VAR_DECL named NAME with the indicated TYPE.
9133 If SCOPE is non-NULL, it is the class type or namespace containing
9134 the variable. If SCOPE is NULL, the variable should is created in
9135 the innermost enclosing scope. */
9137 static tree
9138 grokvardecl (tree type,
9139 tree name,
9140 tree orig_declarator,
9141 const cp_decl_specifier_seq *declspecs,
9142 int initialized,
9143 int type_quals,
9144 int inlinep,
9145 bool conceptp,
9146 int template_count,
9147 tree scope)
9149 tree decl;
9150 tree explicit_scope;
9152 gcc_assert (!name || identifier_p (name));
9154 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9155 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9157 /* Compute the scope in which to place the variable, but remember
9158 whether or not that scope was explicitly specified by the user. */
9159 explicit_scope = scope;
9160 if (!scope)
9162 /* An explicit "extern" specifier indicates a namespace-scope
9163 variable. */
9164 if (declspecs->storage_class == sc_extern)
9165 scope = current_decl_namespace ();
9166 else if (!at_function_scope_p ())
9167 scope = current_scope ();
9170 if (scope
9171 && (/* If the variable is a namespace-scope variable declared in a
9172 template, we need DECL_LANG_SPECIFIC. */
9173 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9174 /* Similarly for namespace-scope variables with language linkage
9175 other than C++. */
9176 || (TREE_CODE (scope) == NAMESPACE_DECL
9177 && current_lang_name != lang_name_cplusplus)
9178 /* Similarly for static data members. */
9179 || TYPE_P (scope)
9180 /* Similarly for explicit specializations. */
9181 || (orig_declarator
9182 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9183 decl = build_lang_decl (VAR_DECL, name, type);
9184 else
9185 decl = build_decl (input_location, VAR_DECL, name, type);
9187 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9188 set_decl_namespace (decl, explicit_scope, 0);
9189 else
9190 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9192 if (declspecs->storage_class == sc_extern)
9194 DECL_THIS_EXTERN (decl) = 1;
9195 DECL_EXTERNAL (decl) = !initialized;
9198 if (DECL_CLASS_SCOPE_P (decl))
9200 set_linkage_for_static_data_member (decl);
9201 /* This function is only called with out-of-class definitions. */
9202 DECL_EXTERNAL (decl) = 0;
9203 check_class_member_definition_namespace (decl);
9205 /* At top level, either `static' or no s.c. makes a definition
9206 (perhaps tentative), and absence of `static' makes it public. */
9207 else if (toplevel_bindings_p ())
9209 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9210 && (DECL_THIS_EXTERN (decl)
9211 || ! constp
9212 || volatilep
9213 || inlinep));
9214 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9216 /* Not at top level, only `static' makes a static definition. */
9217 else
9219 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9220 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9223 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9225 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9227 CP_DECL_THREAD_LOCAL_P (decl) = true;
9228 if (!processing_template_decl)
9229 set_decl_tls_model (decl, decl_default_tls_model (decl));
9231 if (declspecs->gnu_thread_keyword_p)
9232 SET_DECL_GNU_TLS_P (decl);
9235 /* If the type of the decl has no linkage, make sure that we'll
9236 notice that in mark_used. */
9237 if (cxx_dialect > cxx98
9238 && decl_linkage (decl) != lk_none
9239 && DECL_LANG_SPECIFIC (decl) == NULL
9240 && !DECL_EXTERN_C_P (decl)
9241 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9242 retrofit_lang_decl (decl);
9244 if (TREE_PUBLIC (decl))
9246 /* [basic.link]: A name with no linkage (notably, the name of a class
9247 or enumeration declared in a local scope) shall not be used to
9248 declare an entity with linkage.
9250 DR 757 relaxes this restriction for C++0x. */
9251 if (cxx_dialect < cxx11)
9252 no_linkage_error (decl);
9254 else
9255 DECL_INTERFACE_KNOWN (decl) = 1;
9257 if (DECL_NAME (decl)
9258 && MAIN_NAME_P (DECL_NAME (decl))
9259 && scope == global_namespace)
9260 error ("cannot declare %<::main%> to be a global variable");
9262 /* Check that the variable can be safely declared as a concept.
9263 Note that this also forbids explicit specializations. */
9264 if (conceptp)
9266 if (!processing_template_decl)
9268 error_at (declspecs->locations[ds_concept],
9269 "a non-template variable cannot be %<concept%>");
9270 return NULL_TREE;
9272 else
9273 DECL_DECLARED_CONCEPT_P (decl) = true;
9274 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9275 error_at (declspecs->locations[ds_type_spec],
9276 "concept must have type %<bool%>");
9278 else if (flag_concepts
9279 && processing_template_decl > template_class_depth (scope))
9281 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9282 tree ci = build_constraints (reqs, NULL_TREE);
9283 set_constraints (decl, ci);
9286 // Handle explicit specializations and instantiations of variable templates.
9287 if (orig_declarator)
9288 decl = check_explicit_specialization (orig_declarator, decl,
9289 template_count, conceptp * 8);
9291 return decl != error_mark_node ? decl : NULL_TREE;
9294 /* Create and return a canonical pointer to member function type, for
9295 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9297 tree
9298 build_ptrmemfunc_type (tree type)
9300 tree field, fields;
9301 tree t;
9303 if (type == error_mark_node)
9304 return type;
9306 /* Make sure that we always have the unqualified pointer-to-member
9307 type first. */
9308 if (cp_cv_quals quals = cp_type_quals (type))
9310 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9311 return cp_build_qualified_type (unqual, quals);
9314 /* If a canonical type already exists for this type, use it. We use
9315 this method instead of type_hash_canon, because it only does a
9316 simple equality check on the list of field members. */
9318 t = TYPE_PTRMEMFUNC_TYPE (type);
9319 if (t)
9320 return t;
9322 t = make_node (RECORD_TYPE);
9324 /* Let the front end know this is a pointer to member function. */
9325 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9327 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9328 fields = field;
9330 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9331 delta_type_node);
9332 DECL_CHAIN (field) = fields;
9333 fields = field;
9335 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9337 /* Zap out the name so that the back end will give us the debugging
9338 information for this anonymous RECORD_TYPE. */
9339 TYPE_NAME (t) = NULL_TREE;
9341 /* Cache this pointer-to-member type so that we can find it again
9342 later. */
9343 TYPE_PTRMEMFUNC_TYPE (type) = t;
9345 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9346 SET_TYPE_STRUCTURAL_EQUALITY (t);
9347 else if (TYPE_CANONICAL (type) != type)
9348 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9350 return t;
9353 /* Create and return a pointer to data member type. */
9355 tree
9356 build_ptrmem_type (tree class_type, tree member_type)
9358 if (TREE_CODE (member_type) == METHOD_TYPE)
9360 cp_cv_quals quals = type_memfn_quals (member_type);
9361 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9362 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9363 return build_ptrmemfunc_type (build_pointer_type (member_type));
9365 else
9367 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9368 return build_offset_type (class_type, member_type);
9372 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9373 Check to see that the definition is valid. Issue appropriate error
9374 messages. Return 1 if the definition is particularly bad, or 0
9375 otherwise. */
9377 static int
9378 check_static_variable_definition (tree decl, tree type)
9380 /* Avoid redundant diagnostics on out-of-class definitions. */
9381 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9382 return 0;
9383 /* Can't check yet if we don't know the type. */
9384 if (dependent_type_p (type))
9385 return 0;
9386 /* If DECL is declared constexpr, we'll do the appropriate checks
9387 in check_initializer. Similarly for inline static data members. */
9388 if (DECL_P (decl)
9389 && (DECL_DECLARED_CONSTEXPR_P (decl)
9390 || undeduced_auto_decl (decl)
9391 || DECL_VAR_DECLARED_INLINE_P (decl)))
9392 return 0;
9393 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9395 if (!COMPLETE_TYPE_P (type))
9396 error_at (DECL_SOURCE_LOCATION (decl),
9397 "in-class initialization of static data member %q#D of "
9398 "incomplete type", decl);
9399 else if (literal_type_p (type))
9400 permerror (DECL_SOURCE_LOCATION (decl),
9401 "%<constexpr%> needed for in-class initialization of "
9402 "static data member %q#D of non-integral type", decl);
9403 else
9404 error_at (DECL_SOURCE_LOCATION (decl),
9405 "in-class initialization of static data member %q#D of "
9406 "non-literal type", decl);
9407 return 1;
9410 /* Motion 10 at San Diego: If a static const integral data member is
9411 initialized with an integral constant expression, the initializer
9412 may appear either in the declaration (within the class), or in
9413 the definition, but not both. If it appears in the class, the
9414 member is a member constant. The file-scope definition is always
9415 required. */
9416 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9418 error_at (DECL_SOURCE_LOCATION (decl),
9419 "invalid in-class initialization of static data member "
9420 "of non-integral type %qT",
9421 type);
9422 return 1;
9424 else if (!CP_TYPE_CONST_P (type))
9425 error_at (DECL_SOURCE_LOCATION (decl),
9426 "ISO C++ forbids in-class initialization of non-const "
9427 "static member %qD",
9428 decl);
9429 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9430 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9431 "ISO C++ forbids initialization of member constant "
9432 "%qD of non-integral type %qT", decl, type);
9434 return 0;
9437 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9438 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9439 expressions out into temporary variables so that walk_tree doesn't
9440 step into them (c++/15764). */
9442 static tree
9443 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9445 hash_set<tree> *pset = (hash_set<tree> *)data;
9446 tree expr = *expr_p;
9447 if (TREE_CODE (expr) == SAVE_EXPR)
9449 tree op = TREE_OPERAND (expr, 0);
9450 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9451 if (TREE_SIDE_EFFECTS (op))
9452 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9453 *walk_subtrees = 0;
9455 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9456 *walk_subtrees = 0;
9457 return NULL;
9460 /* Entry point for the above. */
9462 static void
9463 stabilize_vla_size (tree size)
9465 hash_set<tree> pset;
9466 /* Break out any function calls into temporary variables. */
9467 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9470 /* Reduce a SIZEOF_EXPR to its value. */
9472 tree
9473 fold_sizeof_expr (tree t)
9475 tree r;
9476 if (SIZEOF_EXPR_TYPE_P (t))
9477 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9478 SIZEOF_EXPR, false, false);
9479 else if (TYPE_P (TREE_OPERAND (t, 0)))
9480 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9481 false, false);
9482 else
9483 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9484 false);
9485 if (r == error_mark_node)
9486 r = size_one_node;
9487 return r;
9490 /* Given the SIZE (i.e., number of elements) in an array, compute
9491 an appropriate index type for the array. If non-NULL, NAME is
9492 the name of the entity being declared. */
9494 tree
9495 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9497 tree itype;
9498 tree osize = size;
9500 if (error_operand_p (size))
9501 return error_mark_node;
9503 if (!type_dependent_expression_p (size))
9505 osize = size = mark_rvalue_use (size);
9507 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9508 && TREE_SIDE_EFFECTS (size))
9509 /* In C++98, we mark a non-constant array bound with a magic
9510 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9511 else
9513 size = instantiate_non_dependent_expr_sfinae (size, complain);
9514 size = build_converted_constant_expr (size_type_node, size, complain);
9515 size = maybe_constant_value (size);
9517 if (!TREE_CONSTANT (size))
9518 size = osize;
9521 if (error_operand_p (size))
9522 return error_mark_node;
9524 /* The array bound must be an integer type. */
9525 tree type = TREE_TYPE (size);
9526 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9528 if (!(complain & tf_error))
9529 return error_mark_node;
9530 if (name)
9531 error ("size of array %qD has non-integral type %qT", name, type);
9532 else
9533 error ("size of array has non-integral type %qT", type);
9534 size = integer_one_node;
9538 /* A type is dependent if it is...an array type constructed from any
9539 dependent type or whose size is specified by a constant expression
9540 that is value-dependent. */
9541 /* We can only call value_dependent_expression_p on integral constant
9542 expressions; treat non-constant expressions as dependent, too. */
9543 if (processing_template_decl
9544 && (type_dependent_expression_p (size)
9545 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9547 /* We cannot do any checking for a SIZE that isn't known to be
9548 constant. Just build the index type and mark that it requires
9549 structural equality checks. */
9550 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9551 size, size_one_node));
9552 TYPE_DEPENDENT_P (itype) = 1;
9553 TYPE_DEPENDENT_P_VALID (itype) = 1;
9554 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9555 return itype;
9558 if (TREE_CODE (size) != INTEGER_CST)
9560 tree folded = cp_fully_fold (size);
9561 if (TREE_CODE (folded) == INTEGER_CST)
9562 pedwarn (location_of (size), OPT_Wpedantic,
9563 "size of array is not an integral constant-expression");
9564 /* Use the folded result for VLAs, too; it will have resolved
9565 SIZEOF_EXPR. */
9566 size = folded;
9569 /* Normally, the array-bound will be a constant. */
9570 if (TREE_CODE (size) == INTEGER_CST)
9572 /* An array must have a positive number of elements. */
9573 if (!valid_constant_size_p (size))
9575 if (!(complain & tf_error))
9576 return error_mark_node;
9578 if (name)
9579 error ("size of array %qD is negative", name);
9580 else
9581 error ("size of array is negative");
9582 size = integer_one_node;
9584 /* As an extension we allow zero-sized arrays. */
9585 else if (integer_zerop (size))
9587 if (!(complain & tf_error))
9588 /* We must fail if performing argument deduction (as
9589 indicated by the state of complain), so that
9590 another substitution can be found. */
9591 return error_mark_node;
9592 else if (in_system_header_at (input_location))
9593 /* Allow them in system headers because glibc uses them. */;
9594 else if (name)
9595 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9596 else
9597 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9600 else if (TREE_CONSTANT (size)
9601 /* We don't allow VLAs at non-function scopes, or during
9602 tentative template substitution. */
9603 || !at_function_scope_p ()
9604 || !(complain & tf_error))
9606 if (!(complain & tf_error))
9607 return error_mark_node;
9608 /* `(int) &fn' is not a valid array bound. */
9609 if (name)
9610 error ("size of array %qD is not an integral constant-expression",
9611 name);
9612 else
9613 error ("size of array is not an integral constant-expression");
9614 size = integer_one_node;
9616 else if (pedantic && warn_vla != 0)
9618 if (name)
9619 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9620 else
9621 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9623 else if (warn_vla > 0)
9625 if (name)
9626 warning (OPT_Wvla,
9627 "variable length array %qD is used", name);
9628 else
9629 warning (OPT_Wvla,
9630 "variable length array is used");
9633 if (processing_template_decl && !TREE_CONSTANT (size))
9634 /* A variable sized array. */
9635 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9636 else
9638 /* Compute the index of the largest element in the array. It is
9639 one less than the number of elements in the array. We save
9640 and restore PROCESSING_TEMPLATE_DECL so that computations in
9641 cp_build_binary_op will be appropriately folded. */
9643 processing_template_decl_sentinel s;
9644 itype = cp_build_binary_op (input_location,
9645 MINUS_EXPR,
9646 cp_convert (ssizetype, size, complain),
9647 cp_convert (ssizetype, integer_one_node,
9648 complain),
9649 complain);
9650 itype = maybe_constant_value (itype);
9653 if (!TREE_CONSTANT (itype))
9655 /* A variable sized array. */
9656 itype = variable_size (itype);
9658 stabilize_vla_size (itype);
9660 if (sanitize_flags_p (SANITIZE_VLA)
9661 && current_function_decl != NULL_TREE)
9663 /* We have to add 1 -- in the ubsan routine we generate
9664 LE_EXPR rather than LT_EXPR. */
9665 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9666 build_one_cst (TREE_TYPE (itype)));
9667 t = ubsan_instrument_vla (input_location, t);
9668 finish_expr_stmt (t);
9671 /* Make sure that there was no overflow when creating to a signed
9672 index type. (For example, on a 32-bit machine, an array with
9673 size 2^32 - 1 is too big.) */
9674 else if (TREE_CODE (itype) == INTEGER_CST
9675 && TREE_OVERFLOW (itype))
9677 if (!(complain & tf_error))
9678 return error_mark_node;
9679 error ("overflow in array dimension");
9680 TREE_OVERFLOW (itype) = 0;
9684 /* Create and return the appropriate index type. */
9685 itype = build_index_type (itype);
9687 /* If the index type were dependent, we would have returned early, so
9688 remember that it isn't. */
9689 TYPE_DEPENDENT_P (itype) = 0;
9690 TYPE_DEPENDENT_P_VALID (itype) = 1;
9691 return itype;
9694 /* Returns the scope (if any) in which the entity declared by
9695 DECLARATOR will be located. If the entity was declared with an
9696 unqualified name, NULL_TREE is returned. */
9698 tree
9699 get_scope_of_declarator (const cp_declarator *declarator)
9701 while (declarator && declarator->kind != cdk_id)
9702 declarator = declarator->declarator;
9704 /* If the declarator-id is a SCOPE_REF, the scope in which the
9705 declaration occurs is the first operand. */
9706 if (declarator
9707 && declarator->u.id.qualifying_scope)
9708 return declarator->u.id.qualifying_scope;
9710 /* Otherwise, the declarator is not a qualified name; the entity will
9711 be declared in the current scope. */
9712 return NULL_TREE;
9715 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9716 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9717 with this type. */
9719 static tree
9720 create_array_type_for_decl (tree name, tree type, tree size)
9722 tree itype = NULL_TREE;
9724 /* If things have already gone awry, bail now. */
9725 if (type == error_mark_node || size == error_mark_node)
9726 return error_mark_node;
9728 /* 8.3.4/1: If the type of the identifier of D contains the auto
9729 type-specifier, the program is ill-formed. */
9730 if (type_uses_auto (type))
9732 error ("%qD declared as array of %qT", name, type);
9733 return error_mark_node;
9736 /* If there are some types which cannot be array elements,
9737 issue an error-message and return. */
9738 switch (TREE_CODE (type))
9740 case VOID_TYPE:
9741 if (name)
9742 error ("declaration of %qD as array of void", name);
9743 else
9744 error ("creating array of void");
9745 return error_mark_node;
9747 case FUNCTION_TYPE:
9748 if (name)
9749 error ("declaration of %qD as array of functions", name);
9750 else
9751 error ("creating array of functions");
9752 return error_mark_node;
9754 case REFERENCE_TYPE:
9755 if (name)
9756 error ("declaration of %qD as array of references", name);
9757 else
9758 error ("creating array of references");
9759 return error_mark_node;
9761 case METHOD_TYPE:
9762 if (name)
9763 error ("declaration of %qD as array of function members", name);
9764 else
9765 error ("creating array of function members");
9766 return error_mark_node;
9768 default:
9769 break;
9772 /* [dcl.array]
9774 The constant expressions that specify the bounds of the arrays
9775 can be omitted only for the first member of the sequence. */
9776 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9778 if (name)
9779 error ("declaration of %qD as multidimensional array must "
9780 "have bounds for all dimensions except the first",
9781 name);
9782 else
9783 error ("multidimensional array must have bounds for all "
9784 "dimensions except the first");
9786 return error_mark_node;
9789 /* Figure out the index type for the array. */
9790 if (size)
9791 itype = compute_array_index_type (name, size, tf_warning_or_error);
9793 /* [dcl.array]
9794 T is called the array element type; this type shall not be [...] an
9795 abstract class type. */
9796 abstract_virtuals_error (name, type);
9798 return build_cplus_array_type (type, itype);
9801 /* Returns the smallest location that is not UNKNOWN_LOCATION. */
9803 static location_t
9804 min_location (location_t loca, location_t locb)
9806 if (loca == UNKNOWN_LOCATION
9807 || (locb != UNKNOWN_LOCATION
9808 && linemap_location_before_p (line_table, locb, loca)))
9809 return locb;
9810 return loca;
9813 /* Returns the smallest location != UNKNOWN_LOCATION among the
9814 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9815 and LOCATIONS[ds_restrict]. */
9817 static location_t
9818 smallest_type_quals_location (int type_quals, const location_t* locations)
9820 location_t loc = UNKNOWN_LOCATION;
9822 if (type_quals & TYPE_QUAL_CONST)
9823 loc = locations[ds_const];
9825 if (type_quals & TYPE_QUAL_VOLATILE)
9826 loc = min_location (loc, locations[ds_volatile]);
9828 if (type_quals & TYPE_QUAL_RESTRICT)
9829 loc = min_location (loc, locations[ds_restrict]);
9831 return loc;
9834 /* Check that it's OK to declare a function with the indicated TYPE
9835 and TYPE_QUALS. SFK indicates the kind of special function (if any)
9836 that this function is. OPTYPE is the type given in a conversion
9837 operator declaration, or the class type for a constructor/destructor.
9838 Returns the actual return type of the function; that may be different
9839 than TYPE if an error occurs, or for certain special functions. */
9841 static tree
9842 check_special_function_return_type (special_function_kind sfk,
9843 tree type,
9844 tree optype,
9845 int type_quals,
9846 const location_t* locations)
9848 switch (sfk)
9850 case sfk_constructor:
9851 if (type)
9852 error ("return type specification for constructor invalid");
9853 else if (type_quals != TYPE_UNQUALIFIED)
9854 error_at (smallest_type_quals_location (type_quals, locations),
9855 "qualifiers are not allowed on constructor declaration");
9857 if (targetm.cxx.cdtor_returns_this ())
9858 type = build_pointer_type (optype);
9859 else
9860 type = void_type_node;
9861 break;
9863 case sfk_destructor:
9864 if (type)
9865 error ("return type specification for destructor invalid");
9866 else if (type_quals != TYPE_UNQUALIFIED)
9867 error_at (smallest_type_quals_location (type_quals, locations),
9868 "qualifiers are not allowed on destructor declaration");
9870 /* We can't use the proper return type here because we run into
9871 problems with ambiguous bases and covariant returns. */
9872 if (targetm.cxx.cdtor_returns_this ())
9873 type = build_pointer_type (void_type_node);
9874 else
9875 type = void_type_node;
9876 break;
9878 case sfk_conversion:
9879 if (type)
9880 error ("return type specified for %<operator %T%>", optype);
9881 else if (type_quals != TYPE_UNQUALIFIED)
9882 error_at (smallest_type_quals_location (type_quals, locations),
9883 "qualifiers are not allowed on declaration of "
9884 "%<operator %T%>", optype);
9886 type = optype;
9887 break;
9889 case sfk_deduction_guide:
9890 if (type)
9891 error ("return type specified for deduction guide");
9892 else if (type_quals != TYPE_UNQUALIFIED)
9893 error_at (smallest_type_quals_location (type_quals, locations),
9894 "qualifiers are not allowed on declaration of "
9895 "deduction guide");
9896 if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
9898 error ("template template parameter %qT in declaration of "
9899 "deduction guide", optype);
9900 type = error_mark_node;
9902 else
9903 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
9904 for (int i = 0; i < ds_last; ++i)
9905 if (i != ds_explicit && locations[i])
9906 error_at (locations[i],
9907 "decl-specifier in declaration of deduction guide");
9908 break;
9910 default:
9911 gcc_unreachable ();
9914 return type;
9917 /* A variable or data member (whose unqualified name is IDENTIFIER)
9918 has been declared with the indicated TYPE. If the TYPE is not
9919 acceptable, issue an error message and return a type to use for
9920 error-recovery purposes. */
9922 tree
9923 check_var_type (tree identifier, tree type)
9925 if (VOID_TYPE_P (type))
9927 if (!identifier)
9928 error ("unnamed variable or field declared void");
9929 else if (identifier_p (identifier))
9931 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
9932 error ("variable or field %qE declared void", identifier);
9934 else
9935 error ("variable or field declared void");
9936 type = error_mark_node;
9939 return type;
9942 /* Handle declaring DECL as an inline variable. */
9944 static void
9945 mark_inline_variable (tree decl, location_t loc)
9947 bool inlinep = true;
9948 if (! toplevel_bindings_p ())
9950 error_at (loc, "%<inline%> specifier invalid for variable "
9951 "%qD declared at block scope", decl);
9952 inlinep = false;
9954 else if (cxx_dialect < cxx17)
9955 pedwarn (loc, 0, "inline variables are only available "
9956 "with -std=c++17 or -std=gnu++17");
9957 if (inlinep)
9959 retrofit_lang_decl (decl);
9960 SET_DECL_VAR_DECLARED_INLINE_P (decl);
9965 /* Assign a typedef-given name to a class or enumeration type declared
9966 as anonymous at first. This was split out of grokdeclarator
9967 because it is also used in libcc1. */
9969 void
9970 name_unnamed_type (tree type, tree decl)
9972 gcc_assert (TYPE_UNNAMED_P (type));
9974 /* Replace the anonymous name with the real name everywhere. */
9975 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9977 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
9978 /* We do not rename the debug info representing the
9979 unnamed tagged type because the standard says in
9980 [dcl.typedef] that the naming applies only for
9981 linkage purposes. */
9982 /*debug_hooks->set_name (t, decl);*/
9983 TYPE_NAME (t) = decl;
9986 if (TYPE_LANG_SPECIFIC (type))
9987 TYPE_WAS_UNNAMED (type) = 1;
9989 /* If this is a typedef within a template class, the nested
9990 type is a (non-primary) template. The name for the
9991 template needs updating as well. */
9992 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9993 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9994 = TYPE_IDENTIFIER (type);
9996 /* Adjust linkage now that we aren't unnamed anymore. */
9997 reset_type_linkage (type);
9999 /* FIXME remangle member functions; member functions of a
10000 type with external linkage have external linkage. */
10002 /* Check that our job is done, and that it would fail if we
10003 attempted to do it again. */
10004 gcc_assert (!TYPE_UNNAMED_P (type));
10007 /* Given declspecs and a declarator (abstract or otherwise), determine
10008 the name and type of the object declared and construct a DECL node
10009 for it.
10011 DECLSPECS points to the representation of declaration-specifier
10012 sequence that precedes declarator.
10014 DECL_CONTEXT says which syntactic context this declaration is in:
10015 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
10016 FUNCDEF for a function definition. Like NORMAL but a few different
10017 error messages in each case. Return value may be zero meaning
10018 this definition is too screwy to try to parse.
10019 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
10020 handle member functions (which have FIELD context).
10021 Return value may be zero meaning this definition is too screwy to
10022 try to parse.
10023 PARM for a parameter declaration (either within a function prototype
10024 or before a function body). Make a PARM_DECL, or return void_type_node.
10025 TPARM for a template parameter declaration.
10026 CATCHPARM for a parameter declaration before a catch clause.
10027 TYPENAME if for a typename (in a cast or sizeof).
10028 Don't make a DECL node; just return the ..._TYPE node.
10029 FIELD for a struct or union field; make a FIELD_DECL.
10030 BITFIELD for a field with specified width.
10032 INITIALIZED is as for start_decl.
10034 ATTRLIST is a pointer to the list of attributes, which may be NULL
10035 if there are none; *ATTRLIST may be modified if attributes from inside
10036 the declarator should be applied to the declaration.
10038 When this function is called, scoping variables (such as
10039 CURRENT_CLASS_TYPE) should reflect the scope in which the
10040 declaration occurs, not the scope in which the new declaration will
10041 be placed. For example, on:
10043 void S::f() { ... }
10045 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
10046 should not be `S'.
10048 Returns a DECL (if a declarator is present), a TYPE (if there is no
10049 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
10050 error occurs. */
10052 tree
10053 grokdeclarator (const cp_declarator *declarator,
10054 cp_decl_specifier_seq *declspecs,
10055 enum decl_context decl_context,
10056 int initialized,
10057 tree* attrlist)
10059 tree type = NULL_TREE;
10060 int longlong = 0;
10061 int explicit_intN = 0;
10062 int virtualp, explicitp, friendp, inlinep, staticp;
10063 int explicit_int = 0;
10064 int explicit_char = 0;
10065 int defaulted_int = 0;
10067 tree typedef_decl = NULL_TREE;
10068 const char *name = NULL;
10069 tree typedef_type = NULL_TREE;
10070 /* True if this declarator is a function definition. */
10071 bool funcdef_flag = false;
10072 cp_declarator_kind innermost_code = cdk_error;
10073 int bitfield = 0;
10074 #if 0
10075 /* See the code below that used this. */
10076 tree decl_attr = NULL_TREE;
10077 #endif
10079 /* Keep track of what sort of function is being processed
10080 so that we can warn about default return values, or explicit
10081 return values which do not match prescribed defaults. */
10082 special_function_kind sfk = sfk_none;
10084 tree dname = NULL_TREE;
10085 tree ctor_return_type = NULL_TREE;
10086 enum overload_flags flags = NO_SPECIAL;
10087 /* cv-qualifiers that apply to the declarator, for a declaration of
10088 a member function. */
10089 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
10090 /* virt-specifiers that apply to the declarator, for a declaration of
10091 a member function. */
10092 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
10093 /* ref-qualifier that applies to the declarator, for a declaration of
10094 a member function. */
10095 cp_ref_qualifier rqual = REF_QUAL_NONE;
10096 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
10097 int type_quals = TYPE_UNQUALIFIED;
10098 tree raises = NULL_TREE;
10099 int template_count = 0;
10100 tree returned_attrs = NULL_TREE;
10101 tree parms = NULL_TREE;
10102 const cp_declarator *id_declarator;
10103 /* The unqualified name of the declarator; either an
10104 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
10105 tree unqualified_id;
10106 /* The class type, if any, in which this entity is located,
10107 or NULL_TREE if none. Note that this value may be different from
10108 the current class type; for example if an attempt is made to declare
10109 "A::f" inside "B", this value will be "A". */
10110 tree ctype = current_class_type;
10111 /* The NAMESPACE_DECL for the namespace in which this entity is
10112 located. If an unqualified name is used to declare the entity,
10113 this value will be NULL_TREE, even if the entity is located at
10114 namespace scope. */
10115 tree in_namespace = NULL_TREE;
10116 cp_storage_class storage_class;
10117 bool unsigned_p, signed_p, short_p, long_p, thread_p;
10118 bool type_was_error_mark_node = false;
10119 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10120 bool template_type_arg = false;
10121 bool template_parm_flag = false;
10122 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10123 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10124 bool late_return_type_p = false;
10125 bool array_parameter_p = false;
10126 source_location saved_loc = input_location;
10127 tree reqs = NULL_TREE;
10129 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10130 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10131 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10132 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10133 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10134 explicit_intN = declspecs->explicit_intN_p;
10135 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10137 // Was concept_p specified? Note that ds_concept
10138 // implies ds_constexpr!
10139 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10140 if (concept_p)
10141 constexpr_p = true;
10143 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10144 type_quals |= TYPE_QUAL_CONST;
10145 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10146 type_quals |= TYPE_QUAL_VOLATILE;
10147 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10148 type_quals |= TYPE_QUAL_RESTRICT;
10150 if (decl_context == FUNCDEF)
10151 funcdef_flag = true, decl_context = NORMAL;
10152 else if (decl_context == MEMFUNCDEF)
10153 funcdef_flag = true, decl_context = FIELD;
10154 else if (decl_context == BITFIELD)
10155 bitfield = 1, decl_context = FIELD;
10156 else if (decl_context == TEMPLATE_TYPE_ARG)
10157 template_type_arg = true, decl_context = TYPENAME;
10158 else if (decl_context == TPARM)
10159 template_parm_flag = true, decl_context = PARM;
10161 if (initialized > 1)
10162 funcdef_flag = true;
10164 location_t typespec_loc = smallest_type_quals_location (type_quals,
10165 declspecs->locations);
10166 if (typespec_loc == UNKNOWN_LOCATION)
10167 typespec_loc = declspecs->locations[ds_type_spec];
10168 if (typespec_loc == UNKNOWN_LOCATION)
10169 typespec_loc = input_location;
10171 /* Look inside a declarator for the name being declared
10172 and get it as a string, for an error message. */
10173 for (id_declarator = declarator;
10174 id_declarator;
10175 id_declarator = id_declarator->declarator)
10177 if (id_declarator->kind != cdk_id)
10178 innermost_code = id_declarator->kind;
10180 switch (id_declarator->kind)
10182 case cdk_function:
10183 if (id_declarator->declarator
10184 && id_declarator->declarator->kind == cdk_id)
10186 sfk = id_declarator->declarator->u.id.sfk;
10187 if (sfk == sfk_destructor)
10188 flags = DTOR_FLAG;
10190 break;
10192 case cdk_id:
10194 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10195 tree decl = id_declarator->u.id.unqualified_name;
10196 if (!decl)
10197 break;
10198 if (qualifying_scope)
10200 if (check_for_bare_parameter_packs (qualifying_scope,
10201 id_declarator->id_loc))
10202 return error_mark_node;
10203 if (at_function_scope_p ())
10205 /* [dcl.meaning]
10207 A declarator-id shall not be qualified except
10208 for ...
10210 None of the cases are permitted in block
10211 scope. */
10212 if (qualifying_scope == global_namespace)
10213 error ("invalid use of qualified-name %<::%D%>",
10214 decl);
10215 else if (TYPE_P (qualifying_scope))
10216 error ("invalid use of qualified-name %<%T::%D%>",
10217 qualifying_scope, decl);
10218 else
10219 error ("invalid use of qualified-name %<%D::%D%>",
10220 qualifying_scope, decl);
10221 return error_mark_node;
10223 else if (TYPE_P (qualifying_scope))
10225 ctype = qualifying_scope;
10226 if (!MAYBE_CLASS_TYPE_P (ctype))
10228 error ("%q#T is not a class or a namespace", ctype);
10229 ctype = NULL_TREE;
10231 else if (innermost_code != cdk_function
10232 && current_class_type
10233 && !uniquely_derived_from_p (ctype,
10234 current_class_type))
10236 error ("invalid use of qualified-name %<%T::%D%>",
10237 qualifying_scope, decl);
10238 return error_mark_node;
10241 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10242 in_namespace = qualifying_scope;
10244 switch (TREE_CODE (decl))
10246 case BIT_NOT_EXPR:
10248 if (innermost_code != cdk_function)
10250 error ("declaration of %qD as non-function", decl);
10251 return error_mark_node;
10253 else if (!qualifying_scope
10254 && !(current_class_type && at_class_scope_p ()))
10256 error ("declaration of %qD as non-member", decl);
10257 return error_mark_node;
10260 tree type = TREE_OPERAND (decl, 0);
10261 if (TYPE_P (type))
10262 type = constructor_name (type);
10263 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10264 dname = decl;
10266 break;
10268 case TEMPLATE_ID_EXPR:
10270 tree fns = TREE_OPERAND (decl, 0);
10272 dname = fns;
10273 if (!identifier_p (dname))
10274 dname = OVL_NAME (dname);
10276 /* Fall through. */
10278 case IDENTIFIER_NODE:
10279 if (identifier_p (decl))
10280 dname = decl;
10282 if (IDENTIFIER_KEYWORD_P (dname))
10284 error ("declarator-id missing; using reserved word %qD",
10285 dname);
10286 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10288 else if (!IDENTIFIER_CONV_OP_P (dname))
10289 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10290 else
10292 gcc_assert (flags == NO_SPECIAL);
10293 flags = TYPENAME_FLAG;
10294 sfk = sfk_conversion;
10295 tree glob = get_global_binding (dname);
10296 if (glob && TREE_CODE (glob) == TYPE_DECL)
10297 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10298 else
10299 name = "<invalid operator>";
10301 break;
10303 default:
10304 gcc_unreachable ();
10306 break;
10309 case cdk_array:
10310 case cdk_pointer:
10311 case cdk_reference:
10312 case cdk_ptrmem:
10313 break;
10315 case cdk_decomp:
10316 name = "structured binding";
10317 break;
10319 case cdk_error:
10320 return error_mark_node;
10322 default:
10323 gcc_unreachable ();
10325 if (id_declarator->kind == cdk_id)
10326 break;
10329 /* [dcl.fct.edf]
10331 The declarator in a function-definition shall have the form
10332 D1 ( parameter-declaration-clause) ... */
10333 if (funcdef_flag && innermost_code != cdk_function)
10335 error ("function definition does not declare parameters");
10336 return error_mark_node;
10339 if (flags == TYPENAME_FLAG
10340 && innermost_code != cdk_function
10341 && ! (ctype && !declspecs->any_specifiers_p))
10343 error ("declaration of %qD as non-function", dname);
10344 return error_mark_node;
10347 if (dname && identifier_p (dname))
10349 if (UDLIT_OPER_P (dname)
10350 && innermost_code != cdk_function)
10352 error ("declaration of %qD as non-function", dname);
10353 return error_mark_node;
10356 if (IDENTIFIER_ANY_OP_P (dname))
10358 if (typedef_p)
10360 error ("declaration of %qD as %<typedef%>", dname);
10361 return error_mark_node;
10363 else if (decl_context == PARM || decl_context == CATCHPARM)
10365 error ("declaration of %qD as parameter", dname);
10366 return error_mark_node;
10371 /* Anything declared one level down from the top level
10372 must be one of the parameters of a function
10373 (because the body is at least two levels down). */
10375 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10376 by not allowing C++ class definitions to specify their parameters
10377 with xdecls (must be spec.d in the parmlist).
10379 Since we now wait to push a class scope until we are sure that
10380 we are in a legitimate method context, we must set oldcname
10381 explicitly (since current_class_name is not yet alive).
10383 We also want to avoid calling this a PARM if it is in a namespace. */
10385 if (decl_context == NORMAL && !toplevel_bindings_p ())
10387 cp_binding_level *b = current_binding_level;
10388 current_binding_level = b->level_chain;
10389 if (current_binding_level != 0 && toplevel_bindings_p ())
10390 decl_context = PARM;
10391 current_binding_level = b;
10394 if (name == NULL)
10395 name = decl_context == PARM ? "parameter" : "type name";
10397 if (concept_p && typedef_p)
10399 error_at (declspecs->locations[ds_concept],
10400 "%<concept%> cannot appear in a typedef declaration");
10401 return error_mark_node;
10404 if (constexpr_p && typedef_p)
10406 error_at (declspecs->locations[ds_constexpr],
10407 "%<constexpr%> cannot appear in a typedef declaration");
10408 return error_mark_node;
10411 /* If there were multiple types specified in the decl-specifier-seq,
10412 issue an error message. */
10413 if (declspecs->multiple_types_p)
10415 error ("two or more data types in declaration of %qs", name);
10416 return error_mark_node;
10419 if (declspecs->conflicting_specifiers_p)
10421 error ("conflicting specifiers in declaration of %qs", name);
10422 return error_mark_node;
10425 /* Extract the basic type from the decl-specifier-seq. */
10426 type = declspecs->type;
10427 if (type == error_mark_node)
10429 type = NULL_TREE;
10430 type_was_error_mark_node = true;
10432 cp_warn_deprecated_use (type);
10433 if (type && TREE_CODE (type) == TYPE_DECL)
10435 typedef_decl = type;
10436 type = TREE_TYPE (typedef_decl);
10437 if (DECL_ARTIFICIAL (typedef_decl))
10438 cp_warn_deprecated_use (type);
10440 /* No type at all: default to `int', and set DEFAULTED_INT
10441 because it was not a user-defined typedef. */
10442 if (type == NULL_TREE)
10444 if (signed_p || unsigned_p || long_p || short_p)
10446 /* These imply 'int'. */
10447 type = integer_type_node;
10448 defaulted_int = 1;
10450 /* If we just have "complex", it is equivalent to "complex double". */
10451 else if (!longlong && !explicit_intN
10452 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10454 type = double_type_node;
10455 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10456 "ISO C++ does not support plain %<complex%> meaning "
10457 "%<double complex%>");
10460 /* Gather flags. */
10461 explicit_int = declspecs->explicit_int_p;
10462 explicit_char = declspecs->explicit_char_p;
10464 #if 0
10465 /* See the code below that used this. */
10466 if (typedef_decl)
10467 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10468 #endif
10469 typedef_type = type;
10471 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10472 ctor_return_type = TREE_TYPE (dname);
10473 else
10474 ctor_return_type = ctype;
10476 if (sfk != sfk_none)
10478 type = check_special_function_return_type (sfk, type,
10479 ctor_return_type,
10480 type_quals,
10481 declspecs->locations);
10482 type_quals = TYPE_UNQUALIFIED;
10484 else if (type == NULL_TREE)
10486 int is_main;
10488 explicit_int = -1;
10490 /* We handle `main' specially here, because 'main () { }' is so
10491 common. With no options, it is allowed. With -Wreturn-type,
10492 it is a warning. It is only an error with -pedantic-errors. */
10493 is_main = (funcdef_flag
10494 && dname && identifier_p (dname)
10495 && MAIN_NAME_P (dname)
10496 && ctype == NULL_TREE
10497 && in_namespace == NULL_TREE
10498 && current_namespace == global_namespace);
10500 if (type_was_error_mark_node)
10501 /* We've already issued an error, don't complain more. */;
10502 else if (in_system_header_at (input_location) || flag_ms_extensions)
10503 /* Allow it, sigh. */;
10504 else if (! is_main)
10505 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10506 else if (pedantic)
10507 pedwarn (input_location, OPT_Wpedantic,
10508 "ISO C++ forbids declaration of %qs with no type", name);
10509 else
10510 warning (OPT_Wreturn_type,
10511 "ISO C++ forbids declaration of %qs with no type", name);
10513 if (type_was_error_mark_node && template_parm_flag)
10514 /* FIXME we should be able to propagate the error_mark_node as is
10515 for other contexts too. */
10516 type = error_mark_node;
10517 else
10518 type = integer_type_node;
10521 ctype = NULL_TREE;
10523 if (explicit_intN)
10525 if (! int_n_enabled_p[declspecs->int_n_idx])
10527 error ("%<__int%d%> is not supported by this target",
10528 int_n_data[declspecs->int_n_idx].bitsize);
10529 explicit_intN = false;
10531 else if (pedantic && ! in_system_header_at (input_location))
10532 pedwarn (input_location, OPT_Wpedantic,
10533 "ISO C++ does not support %<__int%d%> for %qs",
10534 int_n_data[declspecs->int_n_idx].bitsize, name);
10537 /* Now process the modifiers that were specified
10538 and check for invalid combinations. */
10540 /* Long double is a special combination. */
10541 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10543 long_p = false;
10544 type = cp_build_qualified_type (long_double_type_node,
10545 cp_type_quals (type));
10548 /* Check all other uses of type modifiers. */
10550 if (unsigned_p || signed_p || long_p || short_p)
10552 location_t loc;
10553 const char *key;
10554 if (unsigned_p)
10556 key = "unsigned";
10557 loc = declspecs->locations[ds_unsigned];
10559 else if (signed_p)
10561 key = "signed";
10562 loc = declspecs->locations[ds_signed];
10564 else if (longlong)
10566 key = "long long";
10567 loc = declspecs->locations[ds_long_long];
10569 else if (long_p)
10571 key = "long";
10572 loc = declspecs->locations[ds_long];
10574 else /* if (short_p) */
10576 key = "short";
10577 loc = declspecs->locations[ds_short];
10580 int ok = 0;
10582 if (signed_p && unsigned_p)
10583 error_at (loc, "%<signed%> and %<unsigned%> specified together");
10584 else if (long_p && short_p)
10585 error_at (loc, "%<long%> and %<short%> specified together");
10586 else if (TREE_CODE (type) != INTEGER_TYPE
10587 || type == char16_type_node || type == char32_type_node
10588 || ((long_p || short_p)
10589 && (explicit_char || explicit_intN)))
10590 error_at (loc, "%qs specified with %qT", key, type);
10591 else if (!explicit_int && !defaulted_int
10592 && !explicit_char && !explicit_intN)
10594 if (typedef_decl)
10596 pedwarn (loc, OPT_Wpedantic, "%qs specified with %qT",
10597 key, type);
10598 ok = !flag_pedantic_errors;
10600 else if (declspecs->decltype_p)
10601 error_at (loc, "%qs specified with %<decltype%>", key);
10602 else
10603 error_at (loc, "%qs specified with %<typeof%>", key);
10605 else
10606 ok = 1;
10608 /* Discard the type modifiers if they are invalid. */
10609 if (! ok)
10611 unsigned_p = false;
10612 signed_p = false;
10613 long_p = false;
10614 short_p = false;
10615 longlong = 0;
10619 /* Decide whether an integer type is signed or not.
10620 Optionally treat bitfields as signed by default. */
10621 if (unsigned_p
10622 /* [class.bit]
10624 It is implementation-defined whether a plain (neither
10625 explicitly signed or unsigned) char, short, int, or long
10626 bit-field is signed or unsigned.
10628 Naturally, we extend this to long long as well. Note that
10629 this does not include wchar_t. */
10630 || (bitfield && !flag_signed_bitfields
10631 && !signed_p
10632 /* A typedef for plain `int' without `signed' can be
10633 controlled just like plain `int', but a typedef for
10634 `signed int' cannot be so controlled. */
10635 && !(typedef_decl
10636 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10637 && TREE_CODE (type) == INTEGER_TYPE
10638 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10640 if (explicit_intN)
10641 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10642 else if (longlong)
10643 type = long_long_unsigned_type_node;
10644 else if (long_p)
10645 type = long_unsigned_type_node;
10646 else if (short_p)
10647 type = short_unsigned_type_node;
10648 else if (type == char_type_node)
10649 type = unsigned_char_type_node;
10650 else if (typedef_decl)
10651 type = unsigned_type_for (type);
10652 else
10653 type = unsigned_type_node;
10655 else if (signed_p && type == char_type_node)
10656 type = signed_char_type_node;
10657 else if (explicit_intN)
10658 type = int_n_trees[declspecs->int_n_idx].signed_type;
10659 else if (longlong)
10660 type = long_long_integer_type_node;
10661 else if (long_p)
10662 type = long_integer_type_node;
10663 else if (short_p)
10664 type = short_integer_type_node;
10666 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10668 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10669 error ("complex invalid for %qs", name);
10670 /* If a modifier is specified, the resulting complex is the complex
10671 form of TYPE. E.g, "complex short" is "complex short int". */
10672 else if (type == integer_type_node)
10673 type = complex_integer_type_node;
10674 else if (type == float_type_node)
10675 type = complex_float_type_node;
10676 else if (type == double_type_node)
10677 type = complex_double_type_node;
10678 else if (type == long_double_type_node)
10679 type = complex_long_double_type_node;
10680 else
10681 type = build_complex_type (type);
10684 /* If we're using the injected-class-name to form a compound type or a
10685 declaration, replace it with the underlying class so we don't get
10686 redundant typedefs in the debug output. But if we are returning the
10687 type unchanged, leave it alone so that it's available to
10688 maybe_get_template_decl_from_type_decl. */
10689 if (CLASS_TYPE_P (type)
10690 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10691 && type == TREE_TYPE (TYPE_NAME (type))
10692 && (declarator || type_quals))
10693 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10695 type_quals |= cp_type_quals (type);
10696 type = cp_build_qualified_type_real
10697 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10698 || declspecs->decltype_p)
10699 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10700 /* We might have ignored or rejected some of the qualifiers. */
10701 type_quals = cp_type_quals (type);
10703 if (cxx_dialect >= cxx17 && type && is_auto (type)
10704 && innermost_code != cdk_function
10705 && id_declarator && declarator != id_declarator)
10706 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10708 error_at (typespec_loc, "template placeholder type %qT must be followed "
10709 "by a simple declarator-id", type);
10710 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10713 staticp = 0;
10714 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10715 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10716 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10718 storage_class = declspecs->storage_class;
10719 if (storage_class == sc_static)
10720 staticp = 1 + (decl_context == FIELD);
10722 if (virtualp)
10724 if (staticp == 2)
10726 rich_location richloc (line_table, declspecs->locations[ds_virtual]);
10727 richloc.add_range (declspecs->locations[ds_storage_class], false);
10728 error_at (&richloc, "member %qD cannot be declared both %<virtual%> "
10729 "and %<static%>", dname);
10730 storage_class = sc_none;
10731 staticp = 0;
10733 if (constexpr_p)
10735 rich_location richloc (line_table, declspecs->locations[ds_virtual]);
10736 richloc.add_range (declspecs->locations[ds_constexpr], false);
10737 error_at (&richloc, "member %qD cannot be declared both %<virtual%> "
10738 "and %<constexpr%>", dname);
10741 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10743 /* Issue errors about use of storage classes for parameters. */
10744 if (decl_context == PARM)
10746 if (typedef_p)
10748 error_at (declspecs->locations[ds_typedef],
10749 "typedef declaration invalid in parameter declaration");
10750 return error_mark_node;
10752 else if (template_parm_flag && storage_class != sc_none)
10754 error_at (min_location (declspecs->locations[ds_thread],
10755 declspecs->locations[ds_storage_class]),
10756 "storage class specified for template parameter %qs",
10757 name);
10758 return error_mark_node;
10760 else if (storage_class == sc_static
10761 || storage_class == sc_extern
10762 || thread_p)
10764 error_at (min_location (declspecs->locations[ds_thread],
10765 declspecs->locations[ds_storage_class]),
10766 "storage class specified for parameter %qs", name);
10767 return error_mark_node;
10770 /* Function parameters cannot be concept. */
10771 if (concept_p)
10772 error_at (declspecs->locations[ds_concept],
10773 "a parameter cannot be declared %<concept%>");
10774 /* Function parameters cannot be constexpr. If we saw one, moan
10775 and pretend it wasn't there. */
10776 else if (constexpr_p)
10778 error_at (declspecs->locations[ds_constexpr],
10779 "a parameter cannot be declared %<constexpr%>");
10780 constexpr_p = 0;
10784 /* Give error if `virtual' is used outside of class declaration. */
10785 if (virtualp
10786 && (current_class_name == NULL_TREE || decl_context != FIELD))
10788 error_at (declspecs->locations[ds_virtual],
10789 "%<virtual%> outside class declaration");
10790 virtualp = 0;
10793 if (innermost_code == cdk_decomp)
10795 location_t loc = (declarator->kind == cdk_reference
10796 ? declarator->declarator->id_loc : declarator->id_loc);
10797 if (inlinep)
10798 error_at (declspecs->locations[ds_inline],
10799 "structured binding declaration cannot be %<inline%>");
10800 if (typedef_p)
10801 error_at (declspecs->locations[ds_typedef],
10802 "structured binding declaration cannot be %<typedef%>");
10803 if (constexpr_p)
10804 error_at (declspecs->locations[ds_constexpr], "structured "
10805 "binding declaration cannot be %<constexpr%>");
10806 if (thread_p)
10807 error_at (declspecs->locations[ds_thread],
10808 "structured binding declaration cannot be %qs",
10809 declspecs->gnu_thread_keyword_p
10810 ? "__thread" : "thread_local");
10811 if (concept_p)
10812 error_at (declspecs->locations[ds_concept],
10813 "structured binding declaration cannot be %<concept%>");
10814 switch (storage_class)
10816 case sc_none:
10817 break;
10818 case sc_register:
10819 error_at (loc, "structured binding declaration cannot be "
10820 "%<register%>");
10821 break;
10822 case sc_static:
10823 error_at (loc, "structured binding declaration cannot be "
10824 "%<static%>");
10825 break;
10826 case sc_extern:
10827 error_at (loc, "structured binding declaration cannot be "
10828 "%<extern%>");
10829 break;
10830 case sc_mutable:
10831 error_at (loc, "structured binding declaration cannot be "
10832 "%<mutable%>");
10833 break;
10834 case sc_auto:
10835 error_at (loc, "structured binding declaration cannot be "
10836 "C++98 %<auto%>");
10837 break;
10838 default:
10839 gcc_unreachable ();
10841 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
10842 || TYPE_IDENTIFIER (type) != auto_identifier)
10844 if (type != error_mark_node)
10846 error_at (loc, "structured binding declaration cannot have "
10847 "type %qT", type);
10848 inform (loc,
10849 "type must be cv-qualified %<auto%> or reference to "
10850 "cv-qualified %<auto%>");
10852 type = build_qualified_type (make_auto (), type_quals);
10853 declspecs->type = type;
10855 inlinep = 0;
10856 typedef_p = 0;
10857 constexpr_p = 0;
10858 thread_p = 0;
10859 concept_p = 0;
10860 storage_class = sc_none;
10861 staticp = 0;
10862 declspecs->storage_class = sc_none;
10863 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
10866 /* Static anonymous unions are dealt with here. */
10867 if (staticp && decl_context == TYPENAME
10868 && declspecs->type
10869 && ANON_AGGR_TYPE_P (declspecs->type))
10870 decl_context = FIELD;
10872 /* Warn about storage classes that are invalid for certain
10873 kinds of declarations (parameters, typenames, etc.). */
10874 if (thread_p
10875 && ((storage_class
10876 && storage_class != sc_extern
10877 && storage_class != sc_static)
10878 || typedef_p))
10880 error ("multiple storage classes in declaration of %qs", name);
10881 thread_p = false;
10883 if (decl_context != NORMAL
10884 && ((storage_class != sc_none
10885 && storage_class != sc_mutable)
10886 || thread_p))
10888 if ((decl_context == PARM || decl_context == CATCHPARM)
10889 && (storage_class == sc_register
10890 || storage_class == sc_auto))
10892 else if (typedef_p)
10894 else if (decl_context == FIELD
10895 /* C++ allows static class elements. */
10896 && storage_class == sc_static)
10897 /* C++ also allows inlines and signed and unsigned elements,
10898 but in those cases we don't come in here. */
10900 else
10902 location_t loc
10903 = min_location (declspecs->locations[ds_thread],
10904 declspecs->locations[ds_storage_class]);
10905 if (decl_context == FIELD)
10906 error_at (loc, "storage class specified for %qs", name);
10907 else if (decl_context == PARM || decl_context == CATCHPARM)
10908 error_at (loc, "storage class specified for parameter %qs", name);
10909 else
10910 error_at (loc, "storage class specified for typename");
10911 if (storage_class == sc_register
10912 || storage_class == sc_auto
10913 || storage_class == sc_extern
10914 || thread_p)
10915 storage_class = sc_none;
10918 else if (storage_class == sc_extern && funcdef_flag
10919 && ! toplevel_bindings_p ())
10920 error ("nested function %qs declared %<extern%>", name);
10921 else if (toplevel_bindings_p ())
10923 if (storage_class == sc_auto)
10924 error ("top-level declaration of %qs specifies %<auto%>", name);
10926 else if (thread_p
10927 && storage_class != sc_extern
10928 && storage_class != sc_static)
10930 if (declspecs->gnu_thread_keyword_p)
10931 pedwarn (declspecs->locations[ds_thread],
10932 0, "function-scope %qs implicitly auto and "
10933 "declared %<__thread%>", name);
10935 /* When thread_local is applied to a variable of block scope the
10936 storage-class-specifier static is implied if it does not appear
10937 explicitly. */
10938 storage_class = declspecs->storage_class = sc_static;
10939 staticp = 1;
10942 if (storage_class && friendp)
10944 error_at (min_location (declspecs->locations[ds_thread],
10945 declspecs->locations[ds_storage_class]),
10946 "storage class specifiers invalid in friend function "
10947 "declarations");
10948 storage_class = sc_none;
10949 staticp = 0;
10952 if (!id_declarator)
10953 unqualified_id = NULL_TREE;
10954 else
10956 unqualified_id = id_declarator->u.id.unqualified_name;
10957 switch (TREE_CODE (unqualified_id))
10959 case BIT_NOT_EXPR:
10960 unqualified_id = TREE_OPERAND (unqualified_id, 0);
10961 if (TYPE_P (unqualified_id))
10962 unqualified_id = constructor_name (unqualified_id);
10963 break;
10965 case IDENTIFIER_NODE:
10966 case TEMPLATE_ID_EXPR:
10967 break;
10969 default:
10970 gcc_unreachable ();
10974 if (declspecs->std_attributes)
10976 location_t attr_loc = declspecs->locations[ds_std_attribute];
10977 if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
10978 inform (attr_loc, "an attribute that appertains to a type-specifier "
10979 "is ignored");
10982 /* Determine the type of the entity declared by recurring on the
10983 declarator. */
10984 for (; declarator; declarator = declarator->declarator)
10986 const cp_declarator *inner_declarator;
10987 tree attrs;
10989 if (type == error_mark_node)
10990 return error_mark_node;
10992 attrs = declarator->attributes;
10993 if (attrs)
10995 int attr_flags;
10997 attr_flags = 0;
10998 if (declarator == NULL || declarator->kind == cdk_id)
10999 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
11000 if (declarator->kind == cdk_function)
11001 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
11002 if (declarator->kind == cdk_array)
11003 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
11004 returned_attrs = decl_attributes (&type,
11005 chainon (returned_attrs, attrs),
11006 attr_flags);
11009 inner_declarator = declarator->declarator;
11011 /* We don't want to warn in parameter context because we don't
11012 yet know if the parse will succeed, and this might turn out
11013 to be a constructor call. */
11014 if (decl_context != PARM
11015 && decl_context != TYPENAME
11016 && !typedef_p
11017 && declarator->parenthesized != UNKNOWN_LOCATION
11018 /* If the type is class-like and the inner name used a
11019 global namespace qualifier, we need the parens.
11020 Unfortunately all we can tell is whether a qualified name
11021 was used or not. */
11022 && !(inner_declarator
11023 && inner_declarator->kind == cdk_id
11024 && inner_declarator->u.id.qualifying_scope
11025 && (MAYBE_CLASS_TYPE_P (type)
11026 || TREE_CODE (type) == ENUMERAL_TYPE)))
11027 warning_at (declarator->parenthesized, OPT_Wparentheses,
11028 "unnecessary parentheses in declaration of %qs", name);
11029 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
11030 break;
11032 switch (declarator->kind)
11034 case cdk_array:
11035 type = create_array_type_for_decl (dname, type,
11036 declarator->u.array.bounds);
11037 if (!valid_array_size_p (input_location, type, dname))
11038 type = error_mark_node;
11040 if (declarator->std_attributes)
11041 /* [dcl.array]/1:
11043 The optional attribute-specifier-seq appertains to the
11044 array. */
11045 returned_attrs = chainon (returned_attrs,
11046 declarator->std_attributes);
11047 break;
11049 case cdk_function:
11051 tree arg_types;
11052 int funcdecl_p;
11054 /* Declaring a function type. */
11056 input_location = declspecs->locations[ds_type_spec];
11057 abstract_virtuals_error (ACU_RETURN, type);
11058 input_location = saved_loc;
11060 /* Pick up type qualifiers which should be applied to `this'. */
11061 memfn_quals = declarator->u.function.qualifiers;
11062 /* Pick up virt-specifiers. */
11063 virt_specifiers = declarator->u.function.virt_specifiers;
11064 /* And ref-qualifier, too */
11065 rqual = declarator->u.function.ref_qualifier;
11066 /* And tx-qualifier. */
11067 tree tx_qual = declarator->u.function.tx_qualifier;
11068 /* Pick up the exception specifications. */
11069 raises = declarator->u.function.exception_specification;
11070 /* If the exception-specification is ill-formed, let's pretend
11071 there wasn't one. */
11072 if (raises == error_mark_node)
11073 raises = NULL_TREE;
11075 if (reqs)
11076 error_at (location_of (reqs), "requires-clause on return type");
11077 reqs = declarator->u.function.requires_clause;
11079 /* Say it's a definition only for the CALL_EXPR
11080 closest to the identifier. */
11081 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
11083 /* Handle a late-specified return type. */
11084 tree late_return_type = declarator->u.function.late_return_type;
11085 if (funcdecl_p)
11087 if (tree auto_node = type_uses_auto (type))
11089 if (!late_return_type)
11091 if (current_class_type
11092 && LAMBDA_TYPE_P (current_class_type))
11093 /* OK for C++11 lambdas. */;
11094 else if (cxx_dialect < cxx14)
11096 error ("%qs function uses "
11097 "%<auto%> type specifier without trailing "
11098 "return type", name);
11099 inform (input_location, "deduced return type "
11100 "only available with -std=c++14 or "
11101 "-std=gnu++14");
11103 else if (virtualp)
11105 error ("virtual function cannot "
11106 "have deduced return type");
11107 virtualp = false;
11110 else if (!is_auto (type) && sfk != sfk_conversion)
11112 error ("%qs function with trailing return type has"
11113 " %qT as its type rather than plain %<auto%>",
11114 name, type);
11115 return error_mark_node;
11117 tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
11118 if (!tmpl)
11119 if (tree late_auto = type_uses_auto (late_return_type))
11120 tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
11121 if (tmpl)
11123 if (!dguide_name_p (unqualified_id))
11125 error_at (declarator->id_loc, "deduced class "
11126 "type %qD in function return type",
11127 DECL_NAME (tmpl));
11128 inform (DECL_SOURCE_LOCATION (tmpl),
11129 "%qD declared here", tmpl);
11130 return error_mark_node;
11132 else if (!late_return_type)
11134 error_at (declarator->id_loc, "deduction guide "
11135 "for %qT must have trailing return "
11136 "type", TREE_TYPE (tmpl));
11137 inform (DECL_SOURCE_LOCATION (tmpl),
11138 "%qD declared here", tmpl);
11139 return error_mark_node;
11141 else if (CLASS_TYPE_P (late_return_type)
11142 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11143 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11144 == tmpl))
11145 /* OK */;
11146 else
11147 error ("trailing return type %qT of deduction guide "
11148 "is not a specialization of %qT",
11149 late_return_type, TREE_TYPE (tmpl));
11152 else if (late_return_type
11153 && sfk != sfk_conversion)
11155 if (cxx_dialect < cxx11)
11156 /* Not using maybe_warn_cpp0x because this should
11157 always be an error. */
11158 error ("trailing return type only available with "
11159 "-std=c++11 or -std=gnu++11");
11160 else
11161 error ("%qs function with trailing return type not "
11162 "declared with %<auto%> type specifier", name);
11163 return error_mark_node;
11166 type = splice_late_return_type (type, late_return_type);
11167 if (type == error_mark_node)
11168 return error_mark_node;
11170 if (late_return_type)
11172 late_return_type_p = true;
11173 type_quals = cp_type_quals (type);
11176 if (type_quals != TYPE_UNQUALIFIED)
11178 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11179 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11180 "qualifiers ignored on function return type");
11181 /* We now know that the TYPE_QUALS don't apply to the
11182 decl, but to its return type. */
11183 type_quals = TYPE_UNQUALIFIED;
11186 /* Error about some types functions can't return. */
11188 if (TREE_CODE (type) == FUNCTION_TYPE)
11190 error_at (typespec_loc, "%qs declared as function returning "
11191 "a function", name);
11192 return error_mark_node;
11194 if (TREE_CODE (type) == ARRAY_TYPE)
11196 error_at (typespec_loc, "%qs declared as function returning "
11197 "an array", name);
11198 return error_mark_node;
11201 if (ctype == NULL_TREE
11202 && decl_context == FIELD
11203 && funcdecl_p
11204 && friendp == 0)
11205 ctype = current_class_type;
11207 if (ctype && (sfk == sfk_constructor
11208 || sfk == sfk_destructor))
11210 /* We are within a class's scope. If our declarator name
11211 is the same as the class name, and we are defining
11212 a function, then it is a constructor/destructor, and
11213 therefore returns a void type. */
11215 /* ISO C++ 12.4/2. A destructor may not be declared
11216 const or volatile. A destructor may not be static.
11217 A destructor may not be declared with ref-qualifier.
11219 ISO C++ 12.1. A constructor may not be declared
11220 const or volatile. A constructor may not be
11221 virtual. A constructor may not be static.
11222 A constructor may not be declared with ref-qualifier. */
11223 if (staticp == 2)
11224 error ((flags == DTOR_FLAG)
11225 ? G_("destructor cannot be static member function")
11226 : G_("constructor cannot be static member function"));
11227 if (memfn_quals)
11229 error ((flags == DTOR_FLAG)
11230 ? G_("destructors may not be cv-qualified")
11231 : G_("constructors may not be cv-qualified"));
11232 memfn_quals = TYPE_UNQUALIFIED;
11235 if (rqual)
11237 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11238 error ((flags == DTOR_FLAG)
11239 ? G_("destructors may not be ref-qualified")
11240 : G_("constructors may not be ref-qualified"));
11241 rqual = REF_QUAL_NONE;
11244 if (decl_context == FIELD
11245 && !member_function_or_else (ctype,
11246 current_class_type,
11247 flags))
11248 return error_mark_node;
11250 if (flags != DTOR_FLAG)
11252 /* It's a constructor. */
11253 if (explicitp == 1)
11254 explicitp = 2;
11255 if (virtualp)
11257 permerror (declspecs->locations[ds_virtual],
11258 "constructors cannot be declared %<virtual%>");
11259 virtualp = 0;
11261 if (decl_context == FIELD
11262 && sfk != sfk_constructor)
11263 return error_mark_node;
11265 if (decl_context == FIELD)
11266 staticp = 0;
11268 else if (friendp)
11270 if (virtualp)
11272 /* Cannot be both friend and virtual. */
11273 error_at (declspecs->locations[ds_friend],
11274 "virtual functions cannot be friends");
11275 friendp = 0;
11277 if (decl_context == NORMAL)
11278 error ("friend declaration not in class definition");
11279 if (current_function_decl && funcdef_flag)
11281 error ("can%'t define friend function %qs in a local "
11282 "class definition", name);
11283 friendp = 0;
11286 else if (ctype && sfk == sfk_conversion)
11288 if (explicitp == 1)
11290 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11291 explicitp = 2;
11293 if (late_return_type_p)
11294 error ("a conversion function cannot have a trailing return type");
11296 else if (sfk == sfk_deduction_guide)
11298 if (explicitp == 1)
11299 explicitp = 2;
11302 tree pushed_scope = NULL_TREE;
11303 if (funcdecl_p
11304 && decl_context != FIELD
11305 && inner_declarator->u.id.qualifying_scope
11306 && CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
11307 pushed_scope
11308 = push_scope (inner_declarator->u.id.qualifying_scope);
11310 arg_types = grokparms (declarator->u.function.parameters, &parms);
11312 if (pushed_scope)
11313 pop_scope (pushed_scope);
11315 if (inner_declarator
11316 && inner_declarator->kind == cdk_id
11317 && inner_declarator->u.id.sfk == sfk_destructor
11318 && arg_types != void_list_node)
11320 error ("destructors may not have parameters");
11321 arg_types = void_list_node;
11322 parms = NULL_TREE;
11325 type = build_function_type (type, arg_types);
11327 tree attrs = declarator->std_attributes;
11328 if (tx_qual)
11330 tree att = build_tree_list (tx_qual, NULL_TREE);
11331 /* transaction_safe applies to the type, but
11332 transaction_safe_dynamic applies to the function. */
11333 if (is_attribute_p ("transaction_safe", tx_qual))
11334 attrs = chainon (attrs, att);
11335 else
11336 returned_attrs = chainon (returned_attrs, att);
11338 if (attrs)
11339 /* [dcl.fct]/2:
11341 The optional attribute-specifier-seq appertains to
11342 the function type. */
11343 decl_attributes (&type, attrs, 0);
11345 if (raises)
11346 type = build_exception_variant (type, raises);
11348 break;
11350 case cdk_pointer:
11351 case cdk_reference:
11352 case cdk_ptrmem:
11353 /* Filter out pointers-to-references and references-to-references.
11354 We can get these if a TYPE_DECL is used. */
11356 if (TYPE_REF_P (type))
11358 if (declarator->kind != cdk_reference)
11360 error ("cannot declare pointer to %q#T", type);
11361 type = TREE_TYPE (type);
11364 /* In C++0x, we allow reference to reference declarations
11365 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11366 and template type arguments [14.3.1/4 temp.arg.type]. The
11367 check for direct reference to reference declarations, which
11368 are still forbidden, occurs below. Reasoning behind the change
11369 can be found in DR106, DR540, and the rvalue reference
11370 proposals. */
11371 else if (cxx_dialect == cxx98)
11373 error ("cannot declare reference to %q#T", type);
11374 type = TREE_TYPE (type);
11377 else if (VOID_TYPE_P (type))
11379 if (declarator->kind == cdk_reference)
11380 error ("cannot declare reference to %q#T", type);
11381 else if (declarator->kind == cdk_ptrmem)
11382 error ("cannot declare pointer to %q#T member", type);
11385 /* We now know that the TYPE_QUALS don't apply to the decl,
11386 but to the target of the pointer. */
11387 type_quals = TYPE_UNQUALIFIED;
11389 /* This code used to handle METHOD_TYPE, but I don't think it's
11390 possible to get it here anymore. */
11391 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11392 if (declarator->kind == cdk_ptrmem
11393 && TREE_CODE (type) == FUNCTION_TYPE)
11395 memfn_quals |= type_memfn_quals (type);
11396 type = build_memfn_type (type,
11397 declarator->u.pointer.class_type,
11398 memfn_quals,
11399 rqual);
11400 if (type == error_mark_node)
11401 return error_mark_node;
11403 rqual = REF_QUAL_NONE;
11404 memfn_quals = TYPE_UNQUALIFIED;
11407 if (TREE_CODE (type) == FUNCTION_TYPE
11408 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11409 || type_memfn_rqual (type) != REF_QUAL_NONE))
11410 error (declarator->kind == cdk_reference
11411 ? G_("cannot declare reference to qualified function type %qT")
11412 : G_("cannot declare pointer to qualified function type %qT"),
11413 type);
11415 /* When the pointed-to type involves components of variable size,
11416 care must be taken to ensure that the size evaluation code is
11417 emitted early enough to dominate all the possible later uses
11418 and late enough for the variables on which it depends to have
11419 been assigned.
11421 This is expected to happen automatically when the pointed-to
11422 type has a name/declaration of it's own, but special attention
11423 is required if the type is anonymous.
11425 We handle the NORMAL and FIELD contexts here by inserting a
11426 dummy statement that just evaluates the size at a safe point
11427 and ensures it is not deferred until e.g. within a deeper
11428 conditional context (c++/43555).
11430 We expect nothing to be needed here for PARM or TYPENAME.
11431 Evaluating the size at this point for TYPENAME would
11432 actually be incorrect, as we might be in the middle of an
11433 expression with side effects on the pointed-to type size
11434 "arguments" prior to the pointer declaration point and the
11435 size evaluation could end up prior to the side effects. */
11437 if (!TYPE_NAME (type)
11438 && (decl_context == NORMAL || decl_context == FIELD)
11439 && at_function_scope_p ()
11440 && variably_modified_type_p (type, NULL_TREE))
11442 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11443 NULL_TREE, type);
11444 add_decl_expr (TYPE_NAME (type));
11447 if (declarator->kind == cdk_reference)
11449 /* In C++0x, the type we are creating a reference to might be
11450 a typedef which is itself a reference type. In that case,
11451 we follow the reference collapsing rules in
11452 [7.1.3/8 dcl.typedef] to create the final reference type:
11454 "If a typedef TD names a type that is a reference to a type
11455 T, an attempt to create the type 'lvalue reference to cv TD'
11456 creates the type 'lvalue reference to T,' while an attempt
11457 to create the type "rvalue reference to cv TD' creates the
11458 type TD."
11460 if (VOID_TYPE_P (type))
11461 /* We already gave an error. */;
11462 else if (TYPE_REF_P (type))
11464 if (declarator->u.reference.rvalue_ref)
11465 /* Leave type alone. */;
11466 else
11467 type = cp_build_reference_type (TREE_TYPE (type), false);
11469 else
11470 type = cp_build_reference_type
11471 (type, declarator->u.reference.rvalue_ref);
11473 /* In C++0x, we need this check for direct reference to
11474 reference declarations, which are forbidden by
11475 [8.3.2/5 dcl.ref]. Reference to reference declarations
11476 are only allowed indirectly through typedefs and template
11477 type arguments. Example:
11479 void foo(int & &); // invalid ref-to-ref decl
11481 typedef int & int_ref;
11482 void foo(int_ref &); // valid ref-to-ref decl
11484 if (inner_declarator && inner_declarator->kind == cdk_reference)
11485 error ("cannot declare reference to %q#T, which is not "
11486 "a typedef or a template type argument", type);
11488 else if (TREE_CODE (type) == METHOD_TYPE)
11489 type = build_ptrmemfunc_type (build_pointer_type (type));
11490 else if (declarator->kind == cdk_ptrmem)
11492 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11493 != NAMESPACE_DECL);
11494 if (declarator->u.pointer.class_type == error_mark_node)
11495 /* We will already have complained. */
11496 type = error_mark_node;
11497 else
11498 type = build_ptrmem_type (declarator->u.pointer.class_type,
11499 type);
11501 else
11502 type = build_pointer_type (type);
11504 /* Process a list of type modifier keywords (such as
11505 const or volatile) that were given inside the `*' or `&'. */
11507 if (declarator->u.pointer.qualifiers)
11509 type
11510 = cp_build_qualified_type (type,
11511 declarator->u.pointer.qualifiers);
11512 type_quals = cp_type_quals (type);
11515 /* Apply C++11 attributes to the pointer, and not to the
11516 type pointed to. This is unlike what is done for GNU
11517 attributes above. It is to comply with [dcl.ptr]/1:
11519 [the optional attribute-specifier-seq (7.6.1) appertains
11520 to the pointer and not to the object pointed to]. */
11521 if (declarator->std_attributes)
11522 decl_attributes (&type, declarator->std_attributes,
11525 ctype = NULL_TREE;
11526 break;
11528 case cdk_error:
11529 break;
11531 default:
11532 gcc_unreachable ();
11536 /* A `constexpr' specifier used in an object declaration declares
11537 the object as `const'. */
11538 if (constexpr_p && innermost_code != cdk_function)
11540 /* DR1688 says that a `constexpr' specifier in combination with
11541 `volatile' is valid. */
11543 if (!TYPE_REF_P (type))
11545 type_quals |= TYPE_QUAL_CONST;
11546 type = cp_build_qualified_type (type, type_quals);
11550 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11551 && TREE_CODE (type) != FUNCTION_TYPE
11552 && TREE_CODE (type) != METHOD_TYPE
11553 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11555 error ("template-id %qD used as a declarator",
11556 unqualified_id);
11557 unqualified_id = dname;
11560 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11561 qualified with a class-name, turn it into a METHOD_TYPE, unless
11562 we know that the function is static. We take advantage of this
11563 opportunity to do other processing that pertains to entities
11564 explicitly declared to be class members. Note that if DECLARATOR
11565 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11566 would not have exited the loop above. */
11567 if (declarator
11568 && declarator->kind == cdk_id
11569 && declarator->u.id.qualifying_scope
11570 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11572 ctype = declarator->u.id.qualifying_scope;
11573 ctype = TYPE_MAIN_VARIANT (ctype);
11574 template_count = num_template_headers_for_class (ctype);
11576 if (ctype == current_class_type)
11578 if (friendp)
11580 permerror (input_location, "member functions are implicitly "
11581 "friends of their class");
11582 friendp = 0;
11584 else
11585 permerror (declarator->id_loc,
11586 "extra qualification %<%T::%> on member %qs",
11587 ctype, name);
11589 else if (/* If the qualifying type is already complete, then we
11590 can skip the following checks. */
11591 !COMPLETE_TYPE_P (ctype)
11592 && (/* If the function is being defined, then
11593 qualifying type must certainly be complete. */
11594 funcdef_flag
11595 /* A friend declaration of "T::f" is OK, even if
11596 "T" is a template parameter. But, if this
11597 function is not a friend, the qualifying type
11598 must be a class. */
11599 || (!friendp && !CLASS_TYPE_P (ctype))
11600 /* For a declaration, the type need not be
11601 complete, if either it is dependent (since there
11602 is no meaningful definition of complete in that
11603 case) or the qualifying class is currently being
11604 defined. */
11605 || !(dependent_type_p (ctype)
11606 || currently_open_class (ctype)))
11607 /* Check that the qualifying type is complete. */
11608 && !complete_type_or_else (ctype, NULL_TREE))
11609 return error_mark_node;
11610 else if (TREE_CODE (type) == FUNCTION_TYPE)
11612 if (current_class_type
11613 && (!friendp || funcdef_flag || initialized))
11615 error (funcdef_flag || initialized
11616 ? G_("cannot define member function %<%T::%s%> "
11617 "within %qT")
11618 : G_("cannot declare member function %<%T::%s%> "
11619 "within %qT"),
11620 ctype, name, current_class_type);
11621 return error_mark_node;
11624 else if (typedef_p && current_class_type)
11626 error ("cannot declare member %<%T::%s%> within %qT",
11627 ctype, name, current_class_type);
11628 return error_mark_node;
11632 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11633 ctype = current_class_type;
11635 /* Now TYPE has the actual type. */
11637 if (returned_attrs)
11639 if (attrlist)
11640 *attrlist = chainon (returned_attrs, *attrlist);
11641 else
11642 attrlist = &returned_attrs;
11645 if (declarator
11646 && declarator->kind == cdk_id
11647 && declarator->std_attributes
11648 && attrlist != NULL)
11650 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11651 a declarator-id appertains to the entity that is declared. */
11652 if (declarator->std_attributes != error_mark_node)
11653 *attrlist = chainon (*attrlist, declarator->std_attributes);
11654 else
11655 /* We should have already diagnosed the issue (c++/78344). */
11656 gcc_assert (seen_error ());
11659 /* Handle parameter packs. */
11660 if (parameter_pack_p)
11662 if (decl_context == PARM)
11663 /* Turn the type into a pack expansion.*/
11664 type = make_pack_expansion (type);
11665 else
11666 error ("non-parameter %qs cannot be a parameter pack", name);
11669 if ((decl_context == FIELD || decl_context == PARM)
11670 && !processing_template_decl
11671 && variably_modified_type_p (type, NULL_TREE))
11673 if (decl_context == FIELD)
11674 error ("data member may not have variably modified type %qT", type);
11675 else
11676 error ("parameter may not have variably modified type %qT", type);
11677 type = error_mark_node;
11680 if (explicitp == 1 || (explicitp && friendp))
11682 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11683 in the declaration of a constructor or conversion function within
11684 a class definition. */
11685 if (!current_class_type)
11686 error_at (declspecs->locations[ds_explicit],
11687 "%<explicit%> outside class declaration");
11688 else if (friendp)
11689 error_at (declspecs->locations[ds_explicit],
11690 "%<explicit%> in friend declaration");
11691 else
11692 error_at (declspecs->locations[ds_explicit],
11693 "only declarations of constructors and conversion operators "
11694 "can be %<explicit%>");
11695 explicitp = 0;
11698 if (storage_class == sc_mutable)
11700 if (decl_context != FIELD || friendp)
11702 error ("non-member %qs cannot be declared %<mutable%>", name);
11703 storage_class = sc_none;
11705 else if (decl_context == TYPENAME || typedef_p)
11707 error ("non-object member %qs cannot be declared %<mutable%>", name);
11708 storage_class = sc_none;
11710 else if (TREE_CODE (type) == FUNCTION_TYPE
11711 || TREE_CODE (type) == METHOD_TYPE)
11713 error ("function %qs cannot be declared %<mutable%>", name);
11714 storage_class = sc_none;
11716 else if (staticp)
11718 error ("static %qs cannot be declared %<mutable%>", name);
11719 storage_class = sc_none;
11721 else if (type_quals & TYPE_QUAL_CONST)
11723 error ("const %qs cannot be declared %<mutable%>", name);
11724 storage_class = sc_none;
11726 else if (TYPE_REF_P (type))
11728 permerror (input_location, "reference %qs cannot be declared "
11729 "%<mutable%>", name);
11730 storage_class = sc_none;
11734 /* If this is declaring a typedef name, return a TYPE_DECL. */
11735 if (typedef_p && decl_context != TYPENAME)
11737 tree decl;
11739 /* This declaration:
11741 typedef void f(int) const;
11743 declares a function type which is not a member of any
11744 particular class, but which is cv-qualified; for
11745 example "f S::*" declares a pointer to a const-qualified
11746 member function of S. We record the cv-qualification in the
11747 function type. */
11748 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11750 type = apply_memfn_quals (type, memfn_quals, rqual);
11752 /* We have now dealt with these qualifiers. */
11753 memfn_quals = TYPE_UNQUALIFIED;
11754 rqual = REF_QUAL_NONE;
11757 if (type_uses_auto (type))
11759 error ("typedef declared %<auto%>");
11760 type = error_mark_node;
11763 if (reqs)
11764 error_at (location_of (reqs), "requires-clause on typedef");
11766 if (id_declarator && declarator->u.id.qualifying_scope)
11768 error ("typedef name may not be a nested-name-specifier");
11769 type = error_mark_node;
11772 if (decl_context == FIELD)
11773 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11774 else
11775 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11777 if (decl_context != FIELD)
11779 if (!current_function_decl)
11780 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11781 else if (DECL_MAYBE_IN_CHARGE_CDTOR_P (current_function_decl))
11782 /* The TYPE_DECL is "abstract" because there will be
11783 clones of this constructor/destructor, and there will
11784 be copies of this TYPE_DECL generated in those
11785 clones. The decloning optimization (for space) may
11786 revert this subsequently if it determines that
11787 the clones should share a common implementation. */
11788 DECL_ABSTRACT_P (decl) = true;
11790 else if (current_class_type
11791 && constructor_name_p (unqualified_id, current_class_type))
11792 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11793 "as enclosing class",
11794 unqualified_id);
11796 /* If the user declares "typedef struct {...} foo" then the
11797 struct will have an anonymous name. Fill that name in now.
11798 Nothing can refer to it, so nothing needs know about the name
11799 change. */
11800 if (type != error_mark_node
11801 && unqualified_id
11802 && TYPE_NAME (type)
11803 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11804 && TYPE_UNNAMED_P (type)
11805 && declspecs->type_definition_p
11806 && attributes_naming_typedef_ok (*attrlist)
11807 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11808 name_unnamed_type (type, decl);
11810 if (signed_p
11811 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11812 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11814 bad_specifiers (decl, BSP_TYPE, virtualp,
11815 memfn_quals != TYPE_UNQUALIFIED,
11816 inlinep, friendp, raises != NULL_TREE,
11817 declspecs->locations);
11819 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11820 /* Acknowledge that this was written:
11821 `using analias = atype;'. */
11822 TYPE_DECL_ALIAS_P (decl) = 1;
11824 return decl;
11827 /* Detect the case of an array type of unspecified size
11828 which came, as such, direct from a typedef name.
11829 We must copy the type, so that the array's domain can be
11830 individually set by the object's initializer. */
11832 if (type && typedef_type
11833 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11834 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11835 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11837 /* Detect where we're using a typedef of function type to declare a
11838 function. PARMS will not be set, so we must create it now. */
11840 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11842 tree decls = NULL_TREE;
11843 tree args;
11845 for (args = TYPE_ARG_TYPES (type);
11846 args && args != void_list_node;
11847 args = TREE_CHAIN (args))
11849 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
11850 TREE_VALUE (args));
11852 DECL_CHAIN (decl) = decls;
11853 decls = decl;
11856 parms = nreverse (decls);
11858 if (decl_context != TYPENAME)
11860 /* The qualifiers on the function type become the qualifiers on
11861 the non-static member function. */
11862 memfn_quals |= type_memfn_quals (type);
11863 rqual = type_memfn_rqual (type);
11864 type_quals = TYPE_UNQUALIFIED;
11868 /* If this is a type name (such as, in a cast or sizeof),
11869 compute the type and return it now. */
11871 if (decl_context == TYPENAME)
11873 /* Note that here we don't care about type_quals. */
11875 /* Special case: "friend class foo" looks like a TYPENAME context. */
11876 if (friendp)
11878 if (inlinep)
11880 error ("%<inline%> specified for friend class declaration");
11881 inlinep = 0;
11884 if (!current_aggr)
11886 /* Don't allow friend declaration without a class-key. */
11887 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11888 permerror (input_location, "template parameters cannot be friends");
11889 else if (TREE_CODE (type) == TYPENAME_TYPE)
11890 permerror (input_location, "friend declaration requires class-key, "
11891 "i.e. %<friend class %T::%D%>",
11892 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11893 else
11894 permerror (input_location, "friend declaration requires class-key, "
11895 "i.e. %<friend %#T%>",
11896 type);
11899 /* Only try to do this stuff if we didn't already give up. */
11900 if (type != integer_type_node)
11902 /* A friendly class? */
11903 if (current_class_type)
11904 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11905 /*complain=*/true);
11906 else
11907 error ("trying to make class %qT a friend of global scope",
11908 type);
11910 type = void_type_node;
11913 else if (memfn_quals || rqual)
11915 if (ctype == NULL_TREE
11916 && TREE_CODE (type) == METHOD_TYPE)
11917 ctype = TYPE_METHOD_BASETYPE (type);
11919 if (ctype)
11920 type = build_memfn_type (type, ctype, memfn_quals, rqual);
11921 /* Core issue #547: need to allow this in template type args.
11922 Allow it in general in C++11 for alias-declarations. */
11923 else if ((template_type_arg || cxx_dialect >= cxx11)
11924 && TREE_CODE (type) == FUNCTION_TYPE)
11925 type = apply_memfn_quals (type, memfn_quals, rqual);
11926 else
11927 error ("invalid qualifiers on non-member function type");
11930 if (reqs)
11931 error_at (location_of (reqs), "requires-clause on type-id");
11933 return type;
11935 else if (unqualified_id == NULL_TREE && decl_context != PARM
11936 && decl_context != CATCHPARM
11937 && TREE_CODE (type) != UNION_TYPE
11938 && ! bitfield
11939 && innermost_code != cdk_decomp)
11941 error ("abstract declarator %qT used as declaration", type);
11942 return error_mark_node;
11945 if (!FUNC_OR_METHOD_TYPE_P (type))
11947 /* Only functions may be declared using an operator-function-id. */
11948 if (dname && IDENTIFIER_ANY_OP_P (dname))
11950 error ("declaration of %qD as non-function", dname);
11951 return error_mark_node;
11954 if (reqs)
11955 error_at (location_of (reqs),
11956 "requires-clause on declaration of non-function type %qT",
11957 type);
11960 /* We don't check parameter types here because we can emit a better
11961 error message later. */
11962 if (decl_context != PARM)
11964 type = check_var_type (unqualified_id, type);
11965 if (type == error_mark_node)
11966 return error_mark_node;
11969 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11970 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11972 if (decl_context == PARM || decl_context == CATCHPARM)
11974 if (ctype || in_namespace)
11975 error ("cannot use %<::%> in parameter declaration");
11977 if (type_uses_auto (type)
11978 && !(cxx_dialect >= cxx17 && template_parm_flag))
11980 if (cxx_dialect >= cxx14)
11981 error ("%<auto%> parameter not permitted in this context");
11982 else
11983 error ("parameter declared %<auto%>");
11984 type = error_mark_node;
11987 /* A parameter declared as an array of T is really a pointer to T.
11988 One declared as a function is really a pointer to a function.
11989 One declared as a member is really a pointer to member. */
11991 if (TREE_CODE (type) == ARRAY_TYPE)
11993 /* Transfer const-ness of array into that of type pointed to. */
11994 type = build_pointer_type (TREE_TYPE (type));
11995 type_quals = TYPE_UNQUALIFIED;
11996 array_parameter_p = true;
11998 else if (TREE_CODE (type) == FUNCTION_TYPE)
11999 type = build_pointer_type (type);
12002 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
12003 && !(identifier_p (unqualified_id)
12004 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
12006 cp_cv_quals real_quals = memfn_quals;
12007 if (cxx_dialect < cxx14 && constexpr_p
12008 && sfk != sfk_constructor && sfk != sfk_destructor)
12009 real_quals |= TYPE_QUAL_CONST;
12010 type = build_memfn_type (type, ctype, real_quals, rqual);
12014 tree decl = NULL_TREE;
12016 if (decl_context == PARM)
12018 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
12019 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
12021 bad_specifiers (decl, BSP_PARM, virtualp,
12022 memfn_quals != TYPE_UNQUALIFIED,
12023 inlinep, friendp, raises != NULL_TREE,
12024 declspecs->locations);
12026 else if (decl_context == FIELD)
12028 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
12029 if (tree auto_node = type_uses_auto (type))
12031 location_t loc = declspecs->locations[ds_type_spec];
12032 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12033 error_at (loc, "invalid use of template-name %qE without an "
12034 "argument list",
12035 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
12036 else
12037 error_at (loc, "non-static data member declared with "
12038 "placeholder %qT", auto_node);
12039 type = error_mark_node;
12042 /* The C99 flexible array extension. */
12043 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
12044 && TYPE_DOMAIN (type) == NULL_TREE)
12046 if (ctype
12047 && (TREE_CODE (ctype) == UNION_TYPE
12048 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
12050 error ("flexible array member in union");
12051 type = error_mark_node;
12053 else
12055 /* Array is a flexible member. */
12056 if (in_system_header_at (input_location))
12057 /* Do not warn on flexible array members in system
12058 headers because glibc uses them. */;
12059 else if (name)
12060 pedwarn (input_location, OPT_Wpedantic,
12061 "ISO C++ forbids flexible array member %qs", name);
12062 else
12063 pedwarn (input_location, OPT_Wpedantic,
12064 "ISO C++ forbids flexible array members");
12066 /* Flexible array member has a null domain. */
12067 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12071 if (type == error_mark_node)
12073 /* Happens when declaring arrays of sizes which
12074 are error_mark_node, for example. */
12075 decl = NULL_TREE;
12077 else if (in_namespace && !friendp)
12079 /* Something like struct S { int N::j; }; */
12080 error ("invalid use of %<::%>");
12081 return error_mark_node;
12083 else if (TREE_CODE (type) == FUNCTION_TYPE
12084 || TREE_CODE (type) == METHOD_TYPE)
12086 int publicp = 0;
12087 tree function_context;
12089 if (friendp == 0)
12091 /* This should never happen in pure C++ (the check
12092 could be an assert). It could happen in
12093 Objective-C++ if someone writes invalid code that
12094 uses a function declaration for an instance
12095 variable or property (instance variables and
12096 properties are parsed as FIELD_DECLs, but they are
12097 part of an Objective-C class, not a C++ class).
12098 That code is invalid and is caught by this
12099 check. */
12100 if (!ctype)
12102 error ("declaration of function %qD in invalid context",
12103 unqualified_id);
12104 return error_mark_node;
12107 /* ``A union may [ ... ] not [ have ] virtual functions.''
12108 ARM 9.5 */
12109 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12111 error_at (declspecs->locations[ds_virtual],
12112 "function %qD declared %<virtual%> inside a union",
12113 unqualified_id);
12114 return error_mark_node;
12117 if (virtualp
12118 && identifier_p (unqualified_id)
12119 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
12121 error_at (declspecs->locations[ds_virtual],
12122 "%qD cannot be declared %<virtual%>, since it "
12123 "is always static", unqualified_id);
12124 virtualp = 0;
12128 /* Check that the name used for a destructor makes sense. */
12129 if (sfk == sfk_destructor)
12131 tree uqname = id_declarator->u.id.unqualified_name;
12133 if (!ctype)
12135 gcc_assert (friendp);
12136 error ("expected qualified name in friend declaration "
12137 "for destructor %qD", uqname);
12138 return error_mark_node;
12141 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
12143 error ("declaration of %qD as member of %qT",
12144 uqname, ctype);
12145 return error_mark_node;
12147 if (concept_p)
12149 error_at (declspecs->locations[ds_concept],
12150 "a destructor cannot be %<concept%>");
12151 return error_mark_node;
12153 if (constexpr_p)
12155 error_at (declspecs->locations[ds_constexpr],
12156 "a destructor cannot be %<constexpr%>");
12157 return error_mark_node;
12160 else if (sfk == sfk_constructor && friendp && !ctype)
12162 error ("expected qualified name in friend declaration "
12163 "for constructor %qD",
12164 id_declarator->u.id.unqualified_name);
12165 return error_mark_node;
12167 if (sfk == sfk_constructor)
12168 if (concept_p)
12170 error_at (declspecs->locations[ds_concept],
12171 "a constructor cannot be %<concept%>");
12172 return error_mark_node;
12174 if (concept_p)
12176 error_at (declspecs->locations[ds_concept],
12177 "a concept cannot be a member function");
12178 concept_p = false;
12181 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12183 tree tmpl = TREE_OPERAND (unqualified_id, 0);
12184 if (variable_template_p (tmpl))
12186 error ("specialization of variable template %qD "
12187 "declared as function", tmpl);
12188 inform (DECL_SOURCE_LOCATION (tmpl),
12189 "variable template declared here");
12190 return error_mark_node;
12194 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12195 function_context = (ctype != NULL_TREE) ?
12196 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12197 publicp = (! friendp || ! staticp)
12198 && function_context == NULL_TREE;
12200 decl = grokfndecl (ctype, type,
12201 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12202 ? unqualified_id : dname,
12203 parms,
12204 unqualified_id,
12205 declspecs,
12206 reqs,
12207 virtualp, flags, memfn_quals, rqual, raises,
12208 friendp ? -1 : 0, friendp, publicp,
12209 inlinep | (2 * constexpr_p) | (4 * concept_p),
12210 initialized == SD_DELETED, sfk,
12211 funcdef_flag, late_return_type_p,
12212 template_count, in_namespace,
12213 attrlist, declarator->id_loc);
12214 decl = set_virt_specifiers (decl, virt_specifiers);
12215 if (decl == NULL_TREE)
12216 return error_mark_node;
12217 #if 0
12218 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12219 /* The decl and setting of decl_attr is also turned off. */
12220 decl = build_decl_attribute_variant (decl, decl_attr);
12221 #endif
12223 /* [class.conv.ctor]
12225 A constructor declared without the function-specifier
12226 explicit that can be called with a single parameter
12227 specifies a conversion from the type of its first
12228 parameter to the type of its class. Such a constructor
12229 is called a converting constructor. */
12230 if (explicitp == 2)
12231 DECL_NONCONVERTING_P (decl) = 1;
12233 else if (!staticp && !dependent_type_p (type)
12234 && !COMPLETE_TYPE_P (complete_type (type))
12235 && (!complete_or_array_type_p (type)
12236 || initialized == 0))
12238 if (TREE_CODE (type) != ARRAY_TYPE
12239 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12241 if (unqualified_id)
12243 error ("field %qD has incomplete type %qT",
12244 unqualified_id, type);
12245 cxx_incomplete_type_inform (strip_array_types (type));
12247 else
12248 error ("name %qT has incomplete type", type);
12250 type = error_mark_node;
12251 decl = NULL_TREE;
12254 else
12256 if (friendp)
12258 error ("%qE is neither function nor member function; "
12259 "cannot be declared friend", unqualified_id);
12260 return error_mark_node;
12262 decl = NULL_TREE;
12265 if (friendp)
12267 /* Friends are treated specially. */
12268 if (ctype == current_class_type)
12269 ; /* We already issued a permerror. */
12270 else if (decl && DECL_NAME (decl))
12272 if (template_class_depth (current_class_type) == 0)
12274 decl = check_explicit_specialization
12275 (unqualified_id, decl, template_count,
12276 2 * funcdef_flag + 4);
12277 if (decl == error_mark_node)
12278 return error_mark_node;
12281 decl = do_friend (ctype, unqualified_id, decl,
12282 *attrlist, flags,
12283 funcdef_flag);
12284 return decl;
12286 else
12287 return error_mark_node;
12290 /* Structure field. It may not be a function, except for C++. */
12292 if (decl == NULL_TREE)
12294 if (staticp)
12296 /* C++ allows static class members. All other work
12297 for this is done by grokfield. */
12298 decl = build_lang_decl_loc (declarator
12299 ? declarator->id_loc
12300 : input_location,
12301 VAR_DECL, unqualified_id, type);
12302 set_linkage_for_static_data_member (decl);
12303 if (concept_p)
12304 error_at (declspecs->locations[ds_concept],
12305 "static data member %qE declared %<concept%>",
12306 unqualified_id);
12307 else if (constexpr_p && !initialized)
12309 error ("%<constexpr%> static data member %qD must have an "
12310 "initializer", decl);
12311 constexpr_p = false;
12314 if (inlinep)
12315 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12317 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12318 && !(cxx_dialect >= cxx17 && constexpr_p))
12319 /* Even if there is an in-class initialization, DECL
12320 is considered undefined until an out-of-class
12321 definition is provided, unless this is an inline
12322 variable. */
12323 DECL_EXTERNAL (decl) = 1;
12325 if (thread_p)
12327 CP_DECL_THREAD_LOCAL_P (decl) = true;
12328 if (!processing_template_decl)
12329 set_decl_tls_model (decl, decl_default_tls_model (decl));
12330 if (declspecs->gnu_thread_keyword_p)
12331 SET_DECL_GNU_TLS_P (decl);
12334 else
12336 if (concept_p)
12337 error_at (declspecs->locations[ds_concept],
12338 "non-static data member %qE declared %<concept%>",
12339 unqualified_id);
12340 else if (constexpr_p)
12342 error_at (declspecs->locations[ds_constexpr],
12343 "non-static data member %qE declared %<constexpr%>",
12344 unqualified_id);
12345 constexpr_p = false;
12347 decl = build_decl (input_location,
12348 FIELD_DECL, unqualified_id, type);
12349 DECL_NONADDRESSABLE_P (decl) = bitfield;
12350 if (bitfield && !unqualified_id)
12352 TREE_NO_WARNING (decl) = 1;
12353 DECL_PADDING_P (decl) = 1;
12356 if (storage_class == sc_mutable)
12358 DECL_MUTABLE_P (decl) = 1;
12359 storage_class = sc_none;
12362 if (initialized)
12364 /* An attempt is being made to initialize a non-static
12365 member. This is new in C++11. */
12366 maybe_warn_cpp0x (CPP0X_NSDMI);
12368 /* If this has been parsed with static storage class, but
12369 errors forced staticp to be cleared, ensure NSDMI is
12370 not present. */
12371 if (declspecs->storage_class == sc_static)
12372 DECL_INITIAL (decl) = error_mark_node;
12376 bad_specifiers (decl, BSP_FIELD, virtualp,
12377 memfn_quals != TYPE_UNQUALIFIED,
12378 staticp ? false : inlinep, friendp,
12379 raises != NULL_TREE,
12380 declspecs->locations);
12383 else if (TREE_CODE (type) == FUNCTION_TYPE
12384 || TREE_CODE (type) == METHOD_TYPE)
12386 tree original_name;
12387 int publicp = 0;
12389 if (!unqualified_id)
12390 return error_mark_node;
12392 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12393 original_name = dname;
12394 else
12395 original_name = unqualified_id;
12396 // FIXME:gcc_assert (original_name == dname);
12398 if (storage_class == sc_auto)
12399 error ("storage class %<auto%> invalid for function %qs", name);
12400 else if (storage_class == sc_register)
12401 error ("storage class %<register%> invalid for function %qs", name);
12402 else if (thread_p)
12404 if (declspecs->gnu_thread_keyword_p)
12405 error_at (declspecs->locations[ds_thread],
12406 "storage class %<__thread%> invalid for function %qs",
12407 name);
12408 else
12409 error_at (declspecs->locations[ds_thread],
12410 "storage class %<thread_local%> invalid for "
12411 "function %qs", name);
12414 if (virt_specifiers)
12415 error ("virt-specifiers in %qs not allowed outside a class "
12416 "definition", name);
12417 /* Function declaration not at top level.
12418 Storage classes other than `extern' are not allowed
12419 and `extern' makes no difference. */
12420 if (! toplevel_bindings_p ()
12421 && (storage_class == sc_static
12422 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12423 && pedantic)
12425 if (storage_class == sc_static)
12426 pedwarn (declspecs->locations[ds_storage_class], OPT_Wpedantic,
12427 "%<static%> specifier invalid for function %qs "
12428 "declared out of global scope", name);
12429 else
12430 pedwarn (declspecs->locations[ds_inline], OPT_Wpedantic,
12431 "%<inline%> specifier invalid for function %qs "
12432 "declared out of global scope", name);
12435 if (ctype == NULL_TREE)
12437 if (virtualp)
12439 error ("virtual non-class function %qs", name);
12440 virtualp = 0;
12442 else if (sfk == sfk_constructor
12443 || sfk == sfk_destructor)
12445 error (funcdef_flag
12446 ? G_("%qs defined in a non-class scope")
12447 : G_("%qs declared in a non-class scope"), name);
12448 sfk = sfk_none;
12452 /* Record whether the function is public. */
12453 publicp = (ctype != NULL_TREE
12454 || storage_class != sc_static);
12456 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12457 declspecs,
12458 reqs, virtualp, flags, memfn_quals, rqual, raises,
12459 1, friendp,
12460 publicp,
12461 inlinep | (2 * constexpr_p) | (4 * concept_p),
12462 initialized == SD_DELETED,
12463 sfk,
12464 funcdef_flag,
12465 late_return_type_p,
12466 template_count, in_namespace, attrlist,
12467 declarator->id_loc);
12468 if (decl == NULL_TREE)
12469 return error_mark_node;
12471 if (explicitp == 2)
12472 DECL_NONCONVERTING_P (decl) = 1;
12473 if (staticp == 1)
12475 int invalid_static = 0;
12477 /* Don't allow a static member function in a class, and forbid
12478 declaring main to be static. */
12479 if (TREE_CODE (type) == METHOD_TYPE)
12481 permerror (input_location, "cannot declare member function %qD to have "
12482 "static linkage", decl);
12483 invalid_static = 1;
12485 else if (current_function_decl)
12487 /* 7.1.1: There can be no static function declarations within a
12488 block. */
12489 error_at (declspecs->locations[ds_storage_class],
12490 "cannot declare static function inside another function");
12491 invalid_static = 1;
12494 if (invalid_static)
12496 staticp = 0;
12497 storage_class = sc_none;
12501 else
12503 /* It's a variable. */
12505 /* An uninitialized decl with `extern' is a reference. */
12506 decl = grokvardecl (type, dname, unqualified_id,
12507 declspecs,
12508 initialized,
12509 type_quals,
12510 inlinep,
12511 concept_p,
12512 template_count,
12513 ctype ? ctype : in_namespace);
12514 if (decl == NULL_TREE)
12515 return error_mark_node;
12517 bad_specifiers (decl, BSP_VAR, virtualp,
12518 memfn_quals != TYPE_UNQUALIFIED,
12519 inlinep, friendp, raises != NULL_TREE,
12520 declspecs->locations);
12522 if (ctype)
12524 DECL_CONTEXT (decl) = ctype;
12525 if (staticp == 1)
12527 permerror (input_location, "%<static%> may not be used when defining "
12528 "(as opposed to declaring) a static data member");
12529 staticp = 0;
12530 storage_class = sc_none;
12532 if (storage_class == sc_register && TREE_STATIC (decl))
12534 error ("static member %qD declared %<register%>", decl);
12535 storage_class = sc_none;
12537 if (storage_class == sc_extern && pedantic)
12539 pedwarn (input_location, OPT_Wpedantic,
12540 "cannot explicitly declare member %q#D to have "
12541 "extern linkage", decl);
12542 storage_class = sc_none;
12545 else if (constexpr_p && DECL_EXTERNAL (decl))
12547 error ("declaration of %<constexpr%> variable %qD "
12548 "is not a definition", decl);
12549 constexpr_p = false;
12552 if (inlinep)
12553 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12554 if (innermost_code == cdk_decomp)
12556 gcc_assert (declarator && declarator->kind == cdk_decomp);
12557 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12558 DECL_ARTIFICIAL (decl) = 1;
12559 fit_decomposition_lang_decl (decl, NULL_TREE);
12563 if (VAR_P (decl) && !initialized)
12564 if (tree auto_node = type_uses_auto (type))
12565 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12567 location_t loc = declspecs->locations[ds_type_spec];
12568 error_at (loc, "declaration of %q#D has no initializer", decl);
12569 TREE_TYPE (decl) = error_mark_node;
12572 if (storage_class == sc_extern && initialized && !funcdef_flag)
12574 if (toplevel_bindings_p ())
12576 /* It's common practice (and completely valid) to have a const
12577 be initialized and declared extern. */
12578 if (!(type_quals & TYPE_QUAL_CONST))
12579 warning (0, "%qs initialized and declared %<extern%>", name);
12581 else
12583 error ("%qs has both %<extern%> and initializer", name);
12584 return error_mark_node;
12588 /* Record `register' declaration for warnings on &
12589 and in case doing stupid register allocation. */
12591 if (storage_class == sc_register)
12593 DECL_REGISTER (decl) = 1;
12594 /* Warn about register storage specifiers on PARM_DECLs. */
12595 if (TREE_CODE (decl) == PARM_DECL)
12597 if (cxx_dialect >= cxx17)
12598 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12599 "ISO C++17 does not allow %<register%> storage "
12600 "class specifier");
12601 else
12602 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12603 "%<register%> storage class specifier used");
12606 else if (storage_class == sc_extern)
12607 DECL_THIS_EXTERN (decl) = 1;
12608 else if (storage_class == sc_static)
12609 DECL_THIS_STATIC (decl) = 1;
12611 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12612 if (constexpr_p && VAR_P (decl))
12613 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12615 /* Record constancy and volatility on the DECL itself . There's
12616 no need to do this when processing a template; we'll do this
12617 for the instantiated declaration based on the type of DECL. */
12618 if (!processing_template_decl)
12619 cp_apply_type_quals_to_decl (type_quals, decl);
12621 return decl;
12625 /* Subroutine of start_function. Ensure that each of the parameter
12626 types (as listed in PARMS) is complete, as is required for a
12627 function definition. */
12629 static void
12630 require_complete_types_for_parms (tree parms)
12632 for (; parms; parms = DECL_CHAIN (parms))
12634 if (dependent_type_p (TREE_TYPE (parms)))
12635 continue;
12636 if (!VOID_TYPE_P (TREE_TYPE (parms))
12637 && complete_type_or_else (TREE_TYPE (parms), parms))
12639 relayout_decl (parms);
12640 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12642 maybe_warn_parm_abi (TREE_TYPE (parms),
12643 DECL_SOURCE_LOCATION (parms));
12645 else
12646 /* grokparms or complete_type_or_else will have already issued
12647 an error. */
12648 TREE_TYPE (parms) = error_mark_node;
12652 /* Returns nonzero if T is a local variable. */
12655 local_variable_p (const_tree t)
12657 if ((VAR_P (t)
12658 /* A VAR_DECL with a context that is a _TYPE is a static data
12659 member. */
12660 && !TYPE_P (CP_DECL_CONTEXT (t))
12661 /* Any other non-local variable must be at namespace scope. */
12662 && !DECL_NAMESPACE_SCOPE_P (t))
12663 || (TREE_CODE (t) == PARM_DECL))
12664 return 1;
12666 return 0;
12669 /* Like local_variable_p, but suitable for use as a tree-walking
12670 function. */
12672 static tree
12673 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12674 void * /*data*/)
12676 if (local_variable_p (*tp)
12677 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12678 return *tp;
12679 else if (TYPE_P (*tp))
12680 *walk_subtrees = 0;
12682 return NULL_TREE;
12685 /* Check that ARG, which is a default-argument expression for a
12686 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12687 something goes wrong. DECL may also be a _TYPE node, rather than a
12688 DECL, if there is no DECL available. */
12690 tree
12691 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12693 tree var;
12694 tree decl_type;
12696 if (TREE_CODE (arg) == DEFAULT_ARG)
12697 /* We get a DEFAULT_ARG when looking at an in-class declaration
12698 with a default argument. Ignore the argument for now; we'll
12699 deal with it after the class is complete. */
12700 return arg;
12702 if (TYPE_P (decl))
12704 decl_type = decl;
12705 decl = NULL_TREE;
12707 else
12708 decl_type = TREE_TYPE (decl);
12710 if (arg == error_mark_node
12711 || decl == error_mark_node
12712 || TREE_TYPE (arg) == error_mark_node
12713 || decl_type == error_mark_node)
12714 /* Something already went wrong. There's no need to check
12715 further. */
12716 return error_mark_node;
12718 /* [dcl.fct.default]
12720 A default argument expression is implicitly converted to the
12721 parameter type. */
12722 ++cp_unevaluated_operand;
12723 /* Avoid digest_init clobbering the initializer. */
12724 tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
12725 perform_implicit_conversion_flags (decl_type, carg, complain,
12726 LOOKUP_IMPLICIT);
12727 --cp_unevaluated_operand;
12729 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12730 the call sites. */
12731 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12732 && null_ptr_cst_p (arg))
12733 return nullptr_node;
12735 /* [dcl.fct.default]
12737 Local variables shall not be used in default argument
12738 expressions.
12740 The keyword `this' shall not be used in a default argument of a
12741 member function. */
12742 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12743 if (var)
12745 if (complain & tf_warning_or_error)
12747 if (DECL_NAME (var) == this_identifier)
12748 permerror (input_location, "default argument %qE uses %qD",
12749 arg, var);
12750 else
12751 error ("default argument %qE uses local variable %qD", arg, var);
12753 return error_mark_node;
12756 /* All is well. */
12757 return arg;
12760 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12762 static tree
12763 type_is_deprecated (tree type)
12765 enum tree_code code;
12766 if (TREE_DEPRECATED (type))
12767 return type;
12768 if (TYPE_NAME (type))
12770 if (TREE_DEPRECATED (TYPE_NAME (type)))
12771 return type;
12772 else
12773 return NULL_TREE;
12776 /* Do warn about using typedefs to a deprecated class. */
12777 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12778 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12780 code = TREE_CODE (type);
12782 if (code == POINTER_TYPE || code == REFERENCE_TYPE
12783 || code == OFFSET_TYPE || code == FUNCTION_TYPE
12784 || code == METHOD_TYPE || code == ARRAY_TYPE)
12785 return type_is_deprecated (TREE_TYPE (type));
12787 if (TYPE_PTRMEMFUNC_P (type))
12788 return type_is_deprecated
12789 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12791 return NULL_TREE;
12794 /* Decode the list of parameter types for a function type.
12795 Given the list of things declared inside the parens,
12796 return a list of types.
12798 If this parameter does not end with an ellipsis, we append
12799 void_list_node.
12801 *PARMS is set to the chain of PARM_DECLs created. */
12803 tree
12804 grokparms (tree parmlist, tree *parms)
12806 tree result = NULL_TREE;
12807 tree decls = NULL_TREE;
12808 tree parm;
12809 int any_error = 0;
12811 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12813 tree type = NULL_TREE;
12814 tree init = TREE_PURPOSE (parm);
12815 tree decl = TREE_VALUE (parm);
12817 if (parm == void_list_node)
12818 break;
12820 if (! decl || TREE_TYPE (decl) == error_mark_node)
12821 continue;
12823 type = TREE_TYPE (decl);
12824 if (VOID_TYPE_P (type))
12826 if (same_type_p (type, void_type_node)
12827 && !init
12828 && !DECL_NAME (decl) && !result
12829 && TREE_CHAIN (parm) == void_list_node)
12830 /* DR 577: A parameter list consisting of a single
12831 unnamed parameter of non-dependent type 'void'. */
12832 break;
12833 else if (cv_qualified_p (type))
12834 error_at (DECL_SOURCE_LOCATION (decl),
12835 "invalid use of cv-qualified type %qT in "
12836 "parameter declaration", type);
12837 else
12838 error_at (DECL_SOURCE_LOCATION (decl),
12839 "invalid use of type %<void%> in parameter "
12840 "declaration");
12841 /* It's not a good idea to actually create parameters of
12842 type `void'; other parts of the compiler assume that a
12843 void type terminates the parameter list. */
12844 type = error_mark_node;
12845 TREE_TYPE (decl) = error_mark_node;
12848 if (type != error_mark_node)
12850 if (deprecated_state != DEPRECATED_SUPPRESS)
12852 tree deptype = type_is_deprecated (type);
12853 if (deptype)
12854 cp_warn_deprecated_use (deptype);
12857 /* Top-level qualifiers on the parameters are
12858 ignored for function types. */
12859 type = cp_build_qualified_type (type, 0);
12860 if (TREE_CODE (type) == METHOD_TYPE)
12862 error ("parameter %qD invalidly declared method type", decl);
12863 type = build_pointer_type (type);
12864 TREE_TYPE (decl) = type;
12866 else if (abstract_virtuals_error (decl, type))
12867 any_error = 1; /* Seems like a good idea. */
12868 else if (cxx_dialect < cxx17 && INDIRECT_TYPE_P (type))
12870 /* Before C++17 DR 393:
12871 [dcl.fct]/6, parameter types cannot contain pointers
12872 (references) to arrays of unknown bound. */
12873 tree t = TREE_TYPE (type);
12874 int ptr = TYPE_PTR_P (type);
12876 while (1)
12878 if (TYPE_PTR_P (t))
12879 ptr = 1;
12880 else if (TREE_CODE (t) != ARRAY_TYPE)
12881 break;
12882 else if (!TYPE_DOMAIN (t))
12883 break;
12884 t = TREE_TYPE (t);
12886 if (TREE_CODE (t) == ARRAY_TYPE)
12887 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
12889 ? G_("parameter %qD includes pointer to array of "
12890 "unknown bound %qT")
12891 : G_("parameter %qD includes reference to array of "
12892 "unknown bound %qT"),
12893 decl, t);
12896 if (any_error)
12897 init = NULL_TREE;
12898 else if (init && !processing_template_decl)
12899 init = check_default_argument (decl, init, tf_warning_or_error);
12902 DECL_CHAIN (decl) = decls;
12903 decls = decl;
12904 result = tree_cons (init, type, result);
12906 decls = nreverse (decls);
12907 result = nreverse (result);
12908 if (parm)
12909 result = chainon (result, void_list_node);
12910 *parms = decls;
12912 return result;
12916 /* D is a constructor or overloaded `operator='.
12918 Let T be the class in which D is declared. Then, this function
12919 returns:
12921 -1 if D's is an ill-formed constructor or copy assignment operator
12922 whose first parameter is of type `T'.
12923 0 if D is not a copy constructor or copy assignment
12924 operator.
12925 1 if D is a copy constructor or copy assignment operator whose
12926 first parameter is a reference to non-const qualified T.
12927 2 if D is a copy constructor or copy assignment operator whose
12928 first parameter is a reference to const qualified T.
12930 This function can be used as a predicate. Positive values indicate
12931 a copy constructor and nonzero values indicate a copy assignment
12932 operator. */
12935 copy_fn_p (const_tree d)
12937 tree args;
12938 tree arg_type;
12939 int result = 1;
12941 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12943 if (TREE_CODE (d) == TEMPLATE_DECL
12944 || (DECL_TEMPLATE_INFO (d)
12945 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12946 /* Instantiations of template member functions are never copy
12947 functions. Note that member functions of templated classes are
12948 represented as template functions internally, and we must
12949 accept those as copy functions. */
12950 return 0;
12952 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12953 if (!args)
12954 return 0;
12956 arg_type = TREE_VALUE (args);
12957 if (arg_type == error_mark_node)
12958 return 0;
12960 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12962 /* Pass by value copy assignment operator. */
12963 result = -1;
12965 else if (TYPE_REF_P (arg_type)
12966 && !TYPE_REF_IS_RVALUE (arg_type)
12967 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12969 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12970 result = 2;
12972 else
12973 return 0;
12975 args = TREE_CHAIN (args);
12977 if (args && args != void_list_node && !TREE_PURPOSE (args))
12978 /* There are more non-optional args. */
12979 return 0;
12981 return result;
12984 /* D is a constructor or overloaded `operator='.
12986 Let T be the class in which D is declared. Then, this function
12987 returns true when D is a move constructor or move assignment
12988 operator, false otherwise. */
12990 bool
12991 move_fn_p (const_tree d)
12993 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12995 if (cxx_dialect == cxx98)
12996 /* There are no move constructors if we are in C++98 mode. */
12997 return false;
12999 if (TREE_CODE (d) == TEMPLATE_DECL
13000 || (DECL_TEMPLATE_INFO (d)
13001 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13002 /* Instantiations of template member functions are never move
13003 functions. Note that member functions of templated classes are
13004 represented as template functions internally, and we must
13005 accept those as move functions. */
13006 return 0;
13008 return move_signature_fn_p (d);
13011 /* D is a constructor or overloaded `operator='.
13013 Then, this function returns true when D has the same signature as a move
13014 constructor or move assignment operator (because either it is such a
13015 ctor/op= or it is a template specialization with the same signature),
13016 false otherwise. */
13018 bool
13019 move_signature_fn_p (const_tree d)
13021 tree args;
13022 tree arg_type;
13023 bool result = false;
13025 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13026 if (!args)
13027 return 0;
13029 arg_type = TREE_VALUE (args);
13030 if (arg_type == error_mark_node)
13031 return 0;
13033 if (TYPE_REF_P (arg_type)
13034 && TYPE_REF_IS_RVALUE (arg_type)
13035 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
13036 DECL_CONTEXT (d)))
13037 result = true;
13039 args = TREE_CHAIN (args);
13041 if (args && args != void_list_node && !TREE_PURPOSE (args))
13042 /* There are more non-optional args. */
13043 return false;
13045 return result;
13048 /* Remember any special properties of member function DECL. */
13050 void
13051 grok_special_member_properties (tree decl)
13053 tree class_type;
13055 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
13056 return;
13058 class_type = DECL_CONTEXT (decl);
13059 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
13061 int ctor = copy_fn_p (decl);
13063 if (!DECL_ARTIFICIAL (decl))
13064 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
13066 if (ctor > 0)
13068 /* [class.copy]
13070 A non-template constructor for class X is a copy
13071 constructor if its first parameter is of type X&, const
13072 X&, volatile X& or const volatile X&, and either there
13073 are no other parameters or else all other parameters have
13074 default arguments. */
13075 TYPE_HAS_COPY_CTOR (class_type) = 1;
13076 if (user_provided_p (decl))
13077 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
13078 if (ctor > 1)
13079 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
13081 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
13082 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
13083 else if (move_fn_p (decl) && user_provided_p (decl))
13084 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
13085 else if (is_list_ctor (decl))
13086 TYPE_HAS_LIST_CTOR (class_type) = 1;
13088 if (DECL_DECLARED_CONSTEXPR_P (decl)
13089 && !ctor && !move_fn_p (decl))
13090 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
13092 else if (DECL_NAME (decl) == assign_op_identifier)
13094 /* [class.copy]
13096 A non-template assignment operator for class X is a copy
13097 assignment operator if its parameter is of type X, X&, const
13098 X&, volatile X& or const volatile X&. */
13100 int assop = copy_fn_p (decl);
13102 if (assop)
13104 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
13105 if (user_provided_p (decl))
13106 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
13107 if (assop != 1)
13108 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
13110 else if (move_fn_p (decl) && user_provided_p (decl))
13111 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
13113 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
13114 TYPE_HAS_CONVERSION (class_type) = true;
13116 /* Destructors are handled in check_methods. */
13119 /* Check a constructor DECL has the correct form. Complains
13120 if the class has a constructor of the form X(X). */
13122 bool
13123 grok_ctor_properties (const_tree ctype, const_tree decl)
13125 int ctor_parm = copy_fn_p (decl);
13127 if (ctor_parm < 0)
13129 /* [class.copy]
13131 A declaration of a constructor for a class X is ill-formed if
13132 its first parameter is of type (optionally cv-qualified) X
13133 and either there are no other parameters or else all other
13134 parameters have default arguments.
13136 We *don't* complain about member template instantiations that
13137 have this form, though; they can occur as we try to decide
13138 what constructor to use during overload resolution. Since
13139 overload resolution will never prefer such a constructor to
13140 the non-template copy constructor (which is either explicitly
13141 or implicitly defined), there's no need to worry about their
13142 existence. Theoretically, they should never even be
13143 instantiated, but that's hard to forestall. */
13144 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
13145 ctype, ctype);
13146 return false;
13149 return true;
13152 /* DECL is a declaration for an overloaded or conversion operator. If
13153 COMPLAIN is true, errors are issued for invalid declarations. */
13155 bool
13156 grok_op_properties (tree decl, bool complain)
13158 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13159 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
13160 tree name = DECL_NAME (decl);
13161 location_t loc = DECL_SOURCE_LOCATION (decl);
13163 tree class_type = DECL_CONTEXT (decl);
13164 if (class_type && !CLASS_TYPE_P (class_type))
13165 class_type = NULL_TREE;
13167 tree_code operator_code;
13168 unsigned op_flags;
13169 if (IDENTIFIER_CONV_OP_P (name))
13171 /* Conversion operators are TYPE_EXPR for the purposes of this
13172 function. */
13173 operator_code = TYPE_EXPR;
13174 op_flags = OVL_OP_FLAG_UNARY;
13176 else
13178 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13180 operator_code = ovl_op->tree_code;
13181 op_flags = ovl_op->flags;
13182 gcc_checking_assert (operator_code != ERROR_MARK);
13183 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13186 if (op_flags & OVL_OP_FLAG_ALLOC)
13188 /* operator new and operator delete are quite special. */
13189 if (class_type)
13190 switch (op_flags)
13192 case OVL_OP_FLAG_ALLOC:
13193 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13194 break;
13196 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13197 TYPE_GETS_DELETE (class_type) |= 1;
13198 break;
13200 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13201 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13202 break;
13204 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13205 TYPE_GETS_DELETE (class_type) |= 2;
13206 break;
13208 default:
13209 gcc_unreachable ();
13212 /* [basic.std.dynamic.allocation]/1:
13214 A program is ill-formed if an allocation function is declared
13215 in a namespace scope other than global scope or declared
13216 static in global scope.
13218 The same also holds true for deallocation functions. */
13219 if (DECL_NAMESPACE_SCOPE_P (decl))
13221 if (CP_DECL_CONTEXT (decl) != global_namespace)
13223 error_at (loc, "%qD may not be declared within a namespace",
13224 decl);
13225 return false;
13228 if (!TREE_PUBLIC (decl))
13230 error_at (loc, "%qD may not be declared as static", decl);
13231 return false;
13235 if (op_flags & OVL_OP_FLAG_DELETE)
13236 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl), loc);
13237 else
13239 DECL_IS_OPERATOR_NEW (decl) = 1;
13240 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl), loc);
13243 return true;
13246 /* An operator function must either be a non-static member function
13247 or have at least one parameter of a class, a reference to a class,
13248 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13249 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13251 if (operator_code == TYPE_EXPR
13252 || operator_code == CALL_EXPR
13253 || operator_code == COMPONENT_REF
13254 || operator_code == ARRAY_REF
13255 || operator_code == NOP_EXPR)
13257 error_at (loc, "%qD must be a nonstatic member function", decl);
13258 return false;
13261 if (DECL_STATIC_FUNCTION_P (decl))
13263 error_at (loc, "%qD must be either a non-static member "
13264 "function or a non-member function", decl);
13265 return false;
13268 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13270 if (!arg || arg == void_list_node)
13272 if (complain)
13273 error_at(loc, "%qD must have an argument of class or "
13274 "enumerated type", decl);
13275 return false;
13278 tree type = non_reference (TREE_VALUE (arg));
13279 if (type == error_mark_node)
13280 return false;
13282 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13283 because these checks are performed even on template
13284 functions. */
13285 if (MAYBE_CLASS_TYPE_P (type)
13286 || TREE_CODE (type) == ENUMERAL_TYPE)
13287 break;
13291 if (operator_code == CALL_EXPR)
13292 /* There are no further restrictions on the arguments to an overloaded
13293 "operator ()". */
13294 return true;
13296 if (operator_code == COND_EXPR)
13298 /* 13.4.0.3 */
13299 error_at (loc, "ISO C++ prohibits overloading operator ?:");
13300 return false;
13303 /* Count the number of arguments and check for ellipsis. */
13304 int arity = 0;
13305 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13307 if (!arg)
13309 /* Variadic. */
13310 error_at (loc, "%qD must not have variable number of arguments",
13311 decl);
13312 return false;
13314 ++arity;
13317 /* Verify correct number of arguments. */
13318 switch (op_flags)
13320 case OVL_OP_FLAG_AMBIARY:
13321 if (arity == 1)
13323 /* We have a unary instance of an ambi-ary op. Remap to the
13324 unary one. */
13325 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13326 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13327 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13328 operator_code = ovl_op->tree_code;
13329 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13331 else if (arity != 2)
13333 /* This was an ambiguous operator but is invalid. */
13334 error_at (loc,
13335 methodp
13336 ? G_("%qD must have either zero or one argument")
13337 : G_("%qD must have either one or two arguments"), decl);
13338 return false;
13340 else if ((operator_code == POSTINCREMENT_EXPR
13341 || operator_code == POSTDECREMENT_EXPR)
13342 && ! processing_template_decl
13343 /* x++ and x--'s second argument must be an int. */
13344 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13345 integer_type_node))
13347 error_at (loc,
13348 methodp
13349 ? G_("postfix %qD must have %<int%> as its argument")
13350 : G_("postfix %qD must have %<int%> as its second argument"),
13351 decl);
13352 return false;
13354 break;
13356 case OVL_OP_FLAG_UNARY:
13357 if (arity != 1)
13359 error_at (loc,
13360 methodp
13361 ? G_("%qD must have no arguments")
13362 : G_("%qD must have exactly one argument"), decl);
13363 return false;
13365 break;
13367 case OVL_OP_FLAG_BINARY:
13368 if (arity != 2)
13370 error_at (loc,
13371 methodp
13372 ? G_("%qD must have exactly one argument")
13373 : G_("%qD must have exactly two arguments"), decl);
13374 return false;
13376 break;
13378 default:
13379 gcc_unreachable ();
13382 /* There can be no default arguments. */
13383 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13384 if (TREE_PURPOSE (arg))
13386 TREE_PURPOSE (arg) = NULL_TREE;
13387 error_at (loc, "%qD cannot have default arguments", decl);
13388 return false;
13391 /* At this point the declaration is well-formed. It may not be
13392 sensible though. */
13394 /* Check member function warnings only on the in-class declaration.
13395 There's no point warning on an out-of-class definition. */
13396 if (class_type && class_type != current_class_type)
13397 return true;
13399 /* Warn about conversion operators that will never be used. */
13400 if (IDENTIFIER_CONV_OP_P (name)
13401 && ! DECL_TEMPLATE_INFO (decl)
13402 && warn_conversion)
13404 tree t = TREE_TYPE (name);
13405 int ref = TYPE_REF_P (t);
13407 if (ref)
13408 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13410 if (VOID_TYPE_P (t))
13411 warning_at (loc, OPT_Wconversion,
13413 ? G_("conversion to a reference to void "
13414 "will never use a type conversion operator")
13415 : G_("conversion to void "
13416 "will never use a type conversion operator"));
13417 else if (class_type)
13419 if (t == class_type)
13420 warning_at (loc, OPT_Wconversion,
13422 ? G_("conversion to a reference to the same type "
13423 "will never use a type conversion operator")
13424 : G_("conversion to the same type "
13425 "will never use a type conversion operator"));
13426 /* Don't force t to be complete here. */
13427 else if (MAYBE_CLASS_TYPE_P (t)
13428 && COMPLETE_TYPE_P (t)
13429 && DERIVED_FROM_P (t, class_type))
13430 warning_at (loc, OPT_Wconversion,
13432 ? G_("conversion to a reference to a base class "
13433 "will never use a type conversion operator")
13434 : G_("conversion to a base class "
13435 "will never use a type conversion operator"));
13439 if (!warn_ecpp)
13440 return true;
13442 /* Effective C++ rules below. */
13444 /* More Effective C++ rule 7. */
13445 if (operator_code == TRUTH_ANDIF_EXPR
13446 || operator_code == TRUTH_ORIF_EXPR
13447 || operator_code == COMPOUND_EXPR)
13448 warning_at (loc, OPT_Weffc__,
13449 "user-defined %qD always evaluates both arguments", decl);
13451 /* More Effective C++ rule 6. */
13452 if (operator_code == POSTINCREMENT_EXPR
13453 || operator_code == POSTDECREMENT_EXPR
13454 || operator_code == PREINCREMENT_EXPR
13455 || operator_code == PREDECREMENT_EXPR)
13457 tree arg = TREE_VALUE (argtypes);
13458 tree ret = TREE_TYPE (TREE_TYPE (decl));
13459 if (methodp || TYPE_REF_P (arg))
13460 arg = TREE_TYPE (arg);
13461 arg = TYPE_MAIN_VARIANT (arg);
13463 if (operator_code == PREINCREMENT_EXPR
13464 || operator_code == PREDECREMENT_EXPR)
13466 if (!TYPE_REF_P (ret)
13467 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13468 warning_at (loc, OPT_Weffc__, "prefix %qD should return %qT", decl,
13469 build_reference_type (arg));
13471 else
13473 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13474 warning_at (loc, OPT_Weffc__,
13475 "postfix %qD should return %qT", decl, arg);
13479 /* Effective C++ rule 23. */
13480 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13481 && (operator_code == PLUS_EXPR
13482 || operator_code == MINUS_EXPR
13483 || operator_code == TRUNC_DIV_EXPR
13484 || operator_code == MULT_EXPR
13485 || operator_code == TRUNC_MOD_EXPR)
13486 && TYPE_REF_P (TREE_TYPE (TREE_TYPE (decl))))
13487 warning_at (loc, OPT_Weffc__, "%qD should return by value", decl);
13489 return true;
13492 /* Return a string giving the keyword associate with CODE. */
13494 static const char *
13495 tag_name (enum tag_types code)
13497 switch (code)
13499 case record_type:
13500 return "struct";
13501 case class_type:
13502 return "class";
13503 case union_type:
13504 return "union";
13505 case enum_type:
13506 return "enum";
13507 case typename_type:
13508 return "typename";
13509 default:
13510 gcc_unreachable ();
13514 /* Name lookup in an elaborated-type-specifier (after the keyword
13515 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13516 elaborated-type-specifier is invalid, issue a diagnostic and return
13517 error_mark_node; otherwise, return the *_TYPE to which it referred.
13518 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13520 tree
13521 check_elaborated_type_specifier (enum tag_types tag_code,
13522 tree decl,
13523 bool allow_template_p)
13525 tree type;
13527 /* In the case of:
13529 struct S { struct S *p; };
13531 name lookup will find the TYPE_DECL for the implicit "S::S"
13532 typedef. Adjust for that here. */
13533 if (DECL_SELF_REFERENCE_P (decl))
13534 decl = TYPE_NAME (TREE_TYPE (decl));
13536 type = TREE_TYPE (decl);
13538 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13539 is false for this case as well. */
13540 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13542 error ("using template type parameter %qT after %qs",
13543 type, tag_name (tag_code));
13544 return error_mark_node;
13546 /* Accept template template parameters. */
13547 else if (allow_template_p
13548 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13549 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13551 /* [dcl.type.elab]
13553 If the identifier resolves to a typedef-name or the
13554 simple-template-id resolves to an alias template
13555 specialization, the elaborated-type-specifier is ill-formed.
13557 In other words, the only legitimate declaration to use in the
13558 elaborated type specifier is the implicit typedef created when
13559 the type is declared. */
13560 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13561 && !DECL_SELF_REFERENCE_P (decl)
13562 && tag_code != typename_type)
13564 if (alias_template_specialization_p (type))
13565 error ("using alias template specialization %qT after %qs",
13566 type, tag_name (tag_code));
13567 else
13568 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13569 inform (DECL_SOURCE_LOCATION (decl),
13570 "%qD has a previous declaration here", decl);
13571 return error_mark_node;
13573 else if (TREE_CODE (type) != RECORD_TYPE
13574 && TREE_CODE (type) != UNION_TYPE
13575 && tag_code != enum_type
13576 && tag_code != typename_type)
13578 error ("%qT referred to as %qs", type, tag_name (tag_code));
13579 inform (location_of (type), "%qT has a previous declaration here", type);
13580 return error_mark_node;
13582 else if (TREE_CODE (type) != ENUMERAL_TYPE
13583 && tag_code == enum_type)
13585 error ("%qT referred to as enum", type);
13586 inform (location_of (type), "%qT has a previous declaration here", type);
13587 return error_mark_node;
13589 else if (!allow_template_p
13590 && TREE_CODE (type) == RECORD_TYPE
13591 && CLASSTYPE_IS_TEMPLATE (type))
13593 /* If a class template appears as elaborated type specifier
13594 without a template header such as:
13596 template <class T> class C {};
13597 void f(class C); // No template header here
13599 then the required template argument is missing. */
13600 error ("template argument required for %<%s %T%>",
13601 tag_name (tag_code),
13602 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13603 return error_mark_node;
13606 return type;
13609 /* Lookup NAME in elaborate type specifier in scope according to
13610 SCOPE and issue diagnostics if necessary.
13611 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13612 found, and ERROR_MARK_NODE for type error. */
13614 static tree
13615 lookup_and_check_tag (enum tag_types tag_code, tree name,
13616 tag_scope scope, bool template_header_p)
13618 tree t;
13619 tree decl;
13620 if (scope == ts_global)
13622 /* First try ordinary name lookup, ignoring hidden class name
13623 injected via friend declaration. */
13624 decl = lookup_name_prefer_type (name, 2);
13625 decl = strip_using_decl (decl);
13626 /* If that fails, the name will be placed in the smallest
13627 non-class, non-function-prototype scope according to 3.3.1/5.
13628 We may already have a hidden name declared as friend in this
13629 scope. So lookup again but not ignoring hidden names.
13630 If we find one, that name will be made visible rather than
13631 creating a new tag. */
13632 if (!decl)
13633 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13635 else
13636 decl = lookup_type_scope (name, scope);
13638 if (decl
13639 && (DECL_CLASS_TEMPLATE_P (decl)
13640 /* If scope is ts_current we're defining a class, so ignore a
13641 template template parameter. */
13642 || (scope != ts_current
13643 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13644 decl = DECL_TEMPLATE_RESULT (decl);
13646 if (decl && TREE_CODE (decl) == TYPE_DECL)
13648 /* Look for invalid nested type:
13649 class C {
13650 class C {};
13651 }; */
13652 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13654 error ("%qD has the same name as the class in which it is "
13655 "declared",
13656 decl);
13657 return error_mark_node;
13660 /* Two cases we need to consider when deciding if a class
13661 template is allowed as an elaborated type specifier:
13662 1. It is a self reference to its own class.
13663 2. It comes with a template header.
13665 For example:
13667 template <class T> class C {
13668 class C *c1; // DECL_SELF_REFERENCE_P is true
13669 class D;
13671 template <class U> class C; // template_header_p is true
13672 template <class T> class C<T>::D {
13673 class C *c2; // DECL_SELF_REFERENCE_P is true
13674 }; */
13676 t = check_elaborated_type_specifier (tag_code,
13677 decl,
13678 template_header_p
13679 | DECL_SELF_REFERENCE_P (decl));
13680 if (template_header_p && t && CLASS_TYPE_P (t)
13681 && (!CLASSTYPE_TEMPLATE_INFO (t)
13682 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13684 error ("%qT is not a template", t);
13685 inform (location_of (t), "previous declaration here");
13686 if (TYPE_CLASS_SCOPE_P (t)
13687 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13688 inform (input_location,
13689 "perhaps you want to explicitly add %<%T::%>",
13690 TYPE_CONTEXT (t));
13691 t = error_mark_node;
13694 return t;
13696 else if (decl && TREE_CODE (decl) == TREE_LIST)
13698 error ("reference to %qD is ambiguous", name);
13699 print_candidates (decl);
13700 return error_mark_node;
13702 else
13703 return NULL_TREE;
13706 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13707 Define the tag as a forward-reference if it is not defined.
13709 If a declaration is given, process it here, and report an error if
13710 multiple declarations are not identical.
13712 SCOPE is TS_CURRENT when this is also a definition. Only look in
13713 the current frame for the name (since C++ allows new names in any
13714 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13715 declaration. Only look beginning from the current scope outward up
13716 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13718 TEMPLATE_HEADER_P is true when this declaration is preceded by
13719 a set of template parameters. */
13721 static tree
13722 xref_tag_1 (enum tag_types tag_code, tree name,
13723 tag_scope scope, bool template_header_p)
13725 enum tree_code code;
13726 tree context = NULL_TREE;
13728 gcc_assert (identifier_p (name));
13730 switch (tag_code)
13732 case record_type:
13733 case class_type:
13734 code = RECORD_TYPE;
13735 break;
13736 case union_type:
13737 code = UNION_TYPE;
13738 break;
13739 case enum_type:
13740 code = ENUMERAL_TYPE;
13741 break;
13742 default:
13743 gcc_unreachable ();
13746 /* In case of anonymous name, xref_tag is only called to
13747 make type node and push name. Name lookup is not required. */
13748 tree t = NULL_TREE;
13749 if (scope != ts_lambda && !anon_aggrname_p (name))
13750 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
13752 if (t == error_mark_node)
13753 return error_mark_node;
13755 if (scope != ts_current && t && current_class_type
13756 && template_class_depth (current_class_type)
13757 && template_header_p)
13759 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13760 return t;
13762 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13763 definition of this tag. Since, in addition, we are currently
13764 processing a (member) template declaration of a template
13765 class, we must be very careful; consider:
13767 template <class X> struct S1
13769 template <class U> struct S2
13771 template <class V> friend struct S1;
13774 Here, the S2::S1 declaration should not be confused with the
13775 outer declaration. In particular, the inner version should
13776 have a template parameter of level 2, not level 1.
13778 On the other hand, when presented with:
13780 template <class T> struct S1
13782 template <class U> struct S2 {};
13783 template <class U> friend struct S2;
13786 the friend must find S1::S2 eventually. We accomplish this
13787 by making sure that the new type we create to represent this
13788 declaration has the right TYPE_CONTEXT. */
13789 context = TYPE_CONTEXT (t);
13790 t = NULL_TREE;
13793 if (! t)
13795 /* If no such tag is yet defined, create a forward-reference node
13796 and record it as the "definition".
13797 When a real declaration of this type is found,
13798 the forward-reference will be altered into a real type. */
13799 if (code == ENUMERAL_TYPE)
13801 error ("use of enum %q#D without previous declaration", name);
13802 return error_mark_node;
13804 else
13806 t = make_class_type (code);
13807 TYPE_CONTEXT (t) = context;
13808 if (scope == ts_lambda)
13810 /* Mark it as a lambda type. */
13811 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13812 /* And push it into current scope. */
13813 scope = ts_current;
13815 t = pushtag (name, t, scope);
13818 else
13820 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13822 /* Check that we aren't trying to overload a class with different
13823 constraints. */
13824 tree constr = NULL_TREE;
13825 if (current_template_parms)
13827 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13828 constr = build_constraints (reqs, NULL_TREE);
13830 if (!redeclare_class_template (t, current_template_parms, constr))
13831 return error_mark_node;
13833 else if (!processing_template_decl
13834 && CLASS_TYPE_P (t)
13835 && CLASSTYPE_IS_TEMPLATE (t))
13837 error ("redeclaration of %qT as a non-template", t);
13838 inform (location_of (t), "previous declaration %qD", t);
13839 return error_mark_node;
13842 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
13844 /* This is no longer an invisible friend. Make it
13845 visible. */
13846 tree decl = TYPE_NAME (t);
13848 DECL_ANTICIPATED (decl) = false;
13849 DECL_FRIEND_P (decl) = false;
13851 if (TYPE_TEMPLATE_INFO (t))
13853 tree tmpl = TYPE_TI_TEMPLATE (t);
13854 DECL_ANTICIPATED (tmpl) = false;
13855 DECL_FRIEND_P (tmpl) = false;
13860 return t;
13863 /* Wrapper for xref_tag_1. */
13865 tree
13866 xref_tag (enum tag_types tag_code, tree name,
13867 tag_scope scope, bool template_header_p)
13869 tree ret;
13870 bool subtime;
13871 subtime = timevar_cond_start (TV_NAME_LOOKUP);
13872 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13873 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13874 return ret;
13878 tree
13879 xref_tag_from_type (tree old, tree id, tag_scope scope)
13881 enum tag_types tag_kind;
13883 if (TREE_CODE (old) == RECORD_TYPE)
13884 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13885 else
13886 tag_kind = union_type;
13888 if (id == NULL_TREE)
13889 id = TYPE_IDENTIFIER (old);
13891 return xref_tag (tag_kind, id, scope, false);
13894 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13895 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
13896 access_* node, and the TREE_VALUE is the type of the base-class.
13897 Non-NULL TREE_TYPE indicates virtual inheritance. */
13899 void
13900 xref_basetypes (tree ref, tree base_list)
13902 tree *basep;
13903 tree binfo, base_binfo;
13904 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
13905 unsigned max_bases = 0; /* Maximum direct bases. */
13906 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
13907 int i;
13908 tree default_access;
13909 tree igo_prev; /* Track Inheritance Graph Order. */
13911 if (ref == error_mark_node)
13912 return;
13914 /* The base of a derived class is private by default, all others are
13915 public. */
13916 default_access = (TREE_CODE (ref) == RECORD_TYPE
13917 && CLASSTYPE_DECLARED_CLASS (ref)
13918 ? access_private_node : access_public_node);
13920 /* First, make sure that any templates in base-classes are
13921 instantiated. This ensures that if we call ourselves recursively
13922 we do not get confused about which classes are marked and which
13923 are not. */
13924 basep = &base_list;
13925 while (*basep)
13927 tree basetype = TREE_VALUE (*basep);
13929 /* The dependent_type_p call below should really be dependent_scope_p
13930 so that we give a hard error about using an incomplete type as a
13931 base, but we allow it with a pedwarn for backward
13932 compatibility. */
13933 if (processing_template_decl
13934 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13935 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13936 if (!dependent_type_p (basetype)
13937 && !complete_type_or_else (basetype, NULL))
13938 /* An incomplete type. Remove it from the list. */
13939 *basep = TREE_CHAIN (*basep);
13940 else
13942 max_bases++;
13943 if (TREE_TYPE (*basep))
13944 max_dvbases++;
13945 if (CLASS_TYPE_P (basetype))
13946 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13947 basep = &TREE_CHAIN (*basep);
13950 max_vbases += max_dvbases;
13952 TYPE_MARKED_P (ref) = 1;
13954 /* The binfo slot should be empty, unless this is an (ill-formed)
13955 redefinition. */
13956 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13958 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13960 binfo = make_tree_binfo (max_bases);
13962 TYPE_BINFO (ref) = binfo;
13963 BINFO_OFFSET (binfo) = size_zero_node;
13964 BINFO_TYPE (binfo) = ref;
13966 /* Apply base-class info set up to the variants of this type. */
13967 fixup_type_variants (ref);
13969 if (max_bases)
13971 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
13972 /* A C++98 POD cannot have base classes. */
13973 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
13975 if (TREE_CODE (ref) == UNION_TYPE)
13977 error ("derived union %qT invalid", ref);
13978 return;
13982 if (max_bases > 1)
13983 warning (OPT_Wmultiple_inheritance,
13984 "%qT defined with multiple direct bases", ref);
13986 if (max_vbases)
13988 /* An aggregate can't have virtual base classes. */
13989 CLASSTYPE_NON_AGGREGATE (ref) = true;
13991 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
13993 if (max_dvbases)
13994 warning (OPT_Wvirtual_inheritance,
13995 "%qT defined with direct virtual base", ref);
13998 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
14000 tree access = TREE_PURPOSE (base_list);
14001 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
14002 tree basetype = TREE_VALUE (base_list);
14004 if (access == access_default_node)
14005 access = default_access;
14007 /* Before C++17, an aggregate cannot have base classes. In C++17, an
14008 aggregate can't have virtual, private, or protected base classes. */
14009 if (cxx_dialect < cxx17
14010 || access != access_public_node
14011 || via_virtual)
14012 CLASSTYPE_NON_AGGREGATE (ref) = true;
14014 if (PACK_EXPANSION_P (basetype))
14015 basetype = PACK_EXPANSION_PATTERN (basetype);
14016 if (TREE_CODE (basetype) == TYPE_DECL)
14017 basetype = TREE_TYPE (basetype);
14018 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
14020 error ("base type %qT fails to be a struct or class type",
14021 basetype);
14022 goto dropped_base;
14025 base_binfo = NULL_TREE;
14026 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
14028 base_binfo = TYPE_BINFO (basetype);
14029 /* The original basetype could have been a typedef'd type. */
14030 basetype = BINFO_TYPE (base_binfo);
14032 /* Inherit flags from the base. */
14033 TYPE_HAS_NEW_OPERATOR (ref)
14034 |= TYPE_HAS_NEW_OPERATOR (basetype);
14035 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
14036 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
14037 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
14038 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
14039 CLASSTYPE_DIAMOND_SHAPED_P (ref)
14040 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
14041 CLASSTYPE_REPEATED_BASE_P (ref)
14042 |= CLASSTYPE_REPEATED_BASE_P (basetype);
14045 /* We must do this test after we've seen through a typedef
14046 type. */
14047 if (TYPE_MARKED_P (basetype))
14049 if (basetype == ref)
14050 error ("recursive type %qT undefined", basetype);
14051 else
14052 error ("duplicate base type %qT invalid", basetype);
14053 goto dropped_base;
14056 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
14057 /* Regenerate the pack expansion for the bases. */
14058 basetype = make_pack_expansion (basetype);
14060 TYPE_MARKED_P (basetype) = 1;
14062 base_binfo = copy_binfo (base_binfo, basetype, ref,
14063 &igo_prev, via_virtual);
14064 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
14065 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
14067 BINFO_BASE_APPEND (binfo, base_binfo);
14068 BINFO_BASE_ACCESS_APPEND (binfo, access);
14069 continue;
14071 dropped_base:
14072 /* Update max_vbases to reflect the reality that we are dropping
14073 this base: if it reaches zero we want to undo the vec_alloc
14074 above to avoid inconsistencies during error-recovery: eg, in
14075 build_special_member_call, CLASSTYPE_VBASECLASSES non null
14076 and vtt null (c++/27952). */
14077 if (via_virtual)
14078 max_vbases--;
14079 if (CLASS_TYPE_P (basetype))
14080 max_vbases
14081 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14084 if (CLASSTYPE_VBASECLASSES (ref)
14085 && max_vbases == 0)
14086 vec_free (CLASSTYPE_VBASECLASSES (ref));
14088 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
14089 /* If we didn't get max_vbases vbases, we must have shared at
14090 least one of them, and are therefore diamond shaped. */
14091 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
14093 /* Unmark all the types. */
14094 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
14095 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14096 TYPE_MARKED_P (ref) = 0;
14098 /* Now see if we have a repeated base type. */
14099 if (!CLASSTYPE_REPEATED_BASE_P (ref))
14101 for (base_binfo = binfo; base_binfo;
14102 base_binfo = TREE_CHAIN (base_binfo))
14104 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14106 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
14107 break;
14109 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
14111 for (base_binfo = binfo; base_binfo;
14112 base_binfo = TREE_CHAIN (base_binfo))
14113 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14114 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14115 else
14116 break;
14121 /* Copies the enum-related properties from type SRC to type DST.
14122 Used with the underlying type of an enum and the enum itself. */
14123 static void
14124 copy_type_enum (tree dst, tree src)
14126 tree t;
14127 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
14129 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
14130 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
14131 TYPE_SIZE (t) = TYPE_SIZE (src);
14132 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
14133 SET_TYPE_MODE (dst, TYPE_MODE (src));
14134 TYPE_PRECISION (t) = TYPE_PRECISION (src);
14135 unsigned valign = TYPE_ALIGN (src);
14136 if (TYPE_USER_ALIGN (t))
14137 valign = MAX (valign, TYPE_ALIGN (t));
14138 else
14139 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
14140 SET_TYPE_ALIGN (t, valign);
14141 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
14145 /* Begin compiling the definition of an enumeration type.
14146 NAME is its name,
14148 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
14150 UNDERLYING_TYPE is the type that will be used as the storage for
14151 the enumeration type. This should be NULL_TREE if no storage type
14152 was specified.
14154 ATTRIBUTES are any attributes specified after the enum-key.
14156 SCOPED_ENUM_P is true if this is a scoped enumeration type.
14158 if IS_NEW is not NULL, gets TRUE iff a new type is created.
14160 Returns the type object, as yet incomplete.
14161 Also records info about it so that build_enumerator
14162 may be used to declare the individual values as they are read. */
14164 tree
14165 start_enum (tree name, tree enumtype, tree underlying_type,
14166 tree attributes, bool scoped_enum_p, bool *is_new)
14168 tree prevtype = NULL_TREE;
14169 gcc_assert (identifier_p (name));
14171 if (is_new)
14172 *is_new = false;
14173 /* [C++0x dcl.enum]p5:
14175 If not explicitly specified, the underlying type of a scoped
14176 enumeration type is int. */
14177 if (!underlying_type && scoped_enum_p)
14178 underlying_type = integer_type_node;
14180 if (underlying_type)
14181 underlying_type = cv_unqualified (underlying_type);
14183 /* If this is the real definition for a previous forward reference,
14184 fill in the contents in the same object that used to be the
14185 forward reference. */
14186 if (!enumtype)
14187 enumtype = lookup_and_check_tag (enum_type, name,
14188 /*tag_scope=*/ts_current,
14189 /*template_header_p=*/false);
14191 /* In case of a template_decl, the only check that should be deferred
14192 to instantiation time is the comparison of underlying types. */
14193 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14195 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14197 error_at (input_location, "scoped/unscoped mismatch "
14198 "in enum %q#T", enumtype);
14199 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14200 "previous definition here");
14201 enumtype = error_mark_node;
14203 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14205 error_at (input_location, "underlying type mismatch "
14206 "in enum %q#T", enumtype);
14207 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14208 "previous definition here");
14209 enumtype = error_mark_node;
14211 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14212 && !same_type_p (underlying_type,
14213 ENUM_UNDERLYING_TYPE (enumtype)))
14215 error_at (input_location, "different underlying type "
14216 "in enum %q#T", enumtype);
14217 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14218 "previous definition here");
14219 underlying_type = NULL_TREE;
14223 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14224 || processing_template_decl)
14226 /* In case of error, make a dummy enum to allow parsing to
14227 continue. */
14228 if (enumtype == error_mark_node)
14230 name = make_anon_name ();
14231 enumtype = NULL_TREE;
14234 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14235 of an opaque enum, or an opaque enum of an already defined
14236 enumeration (C++11).
14237 In any other case, it'll be NULL_TREE. */
14238 if (!enumtype)
14240 if (is_new)
14241 *is_new = true;
14243 prevtype = enumtype;
14245 /* Do not push the decl more than once. */
14246 if (!enumtype
14247 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
14249 enumtype = cxx_make_type (ENUMERAL_TYPE);
14250 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14252 /* std::byte aliases anything. */
14253 if (enumtype != error_mark_node
14254 && TYPE_CONTEXT (enumtype) == std_node
14255 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14256 TYPE_ALIAS_SET (enumtype) = 0;
14258 else
14259 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14260 false);
14262 if (enumtype == error_mark_node)
14263 return error_mark_node;
14265 /* The enum is considered opaque until the opening '{' of the
14266 enumerator list. */
14267 SET_OPAQUE_ENUM_P (enumtype, true);
14268 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14271 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14273 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14275 if (underlying_type)
14277 if (ENUM_UNDERLYING_TYPE (enumtype))
14278 /* We already checked that it matches, don't change it to a different
14279 typedef variant. */;
14280 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14282 copy_type_enum (enumtype, underlying_type);
14283 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14285 else if (dependent_type_p (underlying_type))
14286 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14287 else
14288 error ("underlying type %qT of %qT must be an integral type",
14289 underlying_type, enumtype);
14292 /* If into a template class, the returned enum is always the first
14293 declaration (opaque or not) seen. This way all the references to
14294 this type will be to the same declaration. The following ones are used
14295 only to check for definition errors. */
14296 if (prevtype && processing_template_decl)
14297 return prevtype;
14298 else
14299 return enumtype;
14302 /* After processing and defining all the values of an enumeration type,
14303 install their decls in the enumeration type.
14304 ENUMTYPE is the type object. */
14306 void
14307 finish_enum_value_list (tree enumtype)
14309 tree values;
14310 tree underlying_type;
14311 tree decl;
14312 tree value;
14313 tree minnode, maxnode;
14314 tree t;
14316 bool fixed_underlying_type_p
14317 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14319 /* We built up the VALUES in reverse order. */
14320 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14322 /* For an enum defined in a template, just set the type of the values;
14323 all further processing is postponed until the template is
14324 instantiated. We need to set the type so that tsubst of a CONST_DECL
14325 works. */
14326 if (processing_template_decl)
14328 for (values = TYPE_VALUES (enumtype);
14329 values;
14330 values = TREE_CHAIN (values))
14331 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14332 return;
14335 /* Determine the minimum and maximum values of the enumerators. */
14336 if (TYPE_VALUES (enumtype))
14338 minnode = maxnode = NULL_TREE;
14340 for (values = TYPE_VALUES (enumtype);
14341 values;
14342 values = TREE_CHAIN (values))
14344 decl = TREE_VALUE (values);
14346 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14347 each enumerator has the type of its enumeration. Prior to the
14348 closing brace, the type of each enumerator is the type of its
14349 initializing value. */
14350 TREE_TYPE (decl) = enumtype;
14352 /* Update the minimum and maximum values, if appropriate. */
14353 value = DECL_INITIAL (decl);
14354 if (value == error_mark_node)
14355 value = integer_zero_node;
14356 /* Figure out what the minimum and maximum values of the
14357 enumerators are. */
14358 if (!minnode)
14359 minnode = maxnode = value;
14360 else if (tree_int_cst_lt (maxnode, value))
14361 maxnode = value;
14362 else if (tree_int_cst_lt (value, minnode))
14363 minnode = value;
14366 else
14367 /* [dcl.enum]
14369 If the enumerator-list is empty, the underlying type is as if
14370 the enumeration had a single enumerator with value 0. */
14371 minnode = maxnode = integer_zero_node;
14373 if (!fixed_underlying_type_p)
14375 /* Compute the number of bits require to represent all values of the
14376 enumeration. We must do this before the type of MINNODE and
14377 MAXNODE are transformed, since tree_int_cst_min_precision relies
14378 on the TREE_TYPE of the value it is passed. */
14379 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14380 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14381 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14382 int precision = MAX (lowprec, highprec);
14383 unsigned int itk;
14384 bool use_short_enum;
14386 /* Determine the underlying type of the enumeration.
14388 [dcl.enum]
14390 The underlying type of an enumeration is an integral type that
14391 can represent all the enumerator values defined in the
14392 enumeration. It is implementation-defined which integral type is
14393 used as the underlying type for an enumeration except that the
14394 underlying type shall not be larger than int unless the value of
14395 an enumerator cannot fit in an int or unsigned int.
14397 We use "int" or an "unsigned int" as the underlying type, even if
14398 a smaller integral type would work, unless the user has
14399 explicitly requested that we use the smallest possible type. The
14400 user can request that for all enumerations with a command line
14401 flag, or for just one enumeration with an attribute. */
14403 use_short_enum = flag_short_enums
14404 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14406 /* If the precision of the type was specified with an attribute and it
14407 was too small, give an error. Otherwise, use it. */
14408 if (TYPE_PRECISION (enumtype))
14410 if (precision > TYPE_PRECISION (enumtype))
14411 error ("specified mode too small for enumeral values");
14412 else
14414 use_short_enum = true;
14415 precision = TYPE_PRECISION (enumtype);
14419 for (itk = (use_short_enum ? itk_char : itk_int);
14420 itk != itk_none;
14421 itk++)
14423 underlying_type = integer_types[itk];
14424 if (underlying_type != NULL_TREE
14425 && TYPE_PRECISION (underlying_type) >= precision
14426 && TYPE_SIGN (underlying_type) == sgn)
14427 break;
14429 if (itk == itk_none)
14431 /* DR 377
14433 IF no integral type can represent all the enumerator values, the
14434 enumeration is ill-formed. */
14435 error ("no integral type can represent all of the enumerator values "
14436 "for %qT", enumtype);
14437 precision = TYPE_PRECISION (long_long_integer_type_node);
14438 underlying_type = integer_types[itk_unsigned_long_long];
14441 /* [dcl.enum]
14443 The value of sizeof() applied to an enumeration type, an object
14444 of an enumeration type, or an enumerator, is the value of sizeof()
14445 applied to the underlying type. */
14446 copy_type_enum (enumtype, underlying_type);
14448 /* Compute the minimum and maximum values for the type.
14450 [dcl.enum]
14452 For an enumeration where emin is the smallest enumerator and emax
14453 is the largest, the values of the enumeration are the values of the
14454 underlying type in the range bmin to bmax, where bmin and bmax are,
14455 respectively, the smallest and largest values of the smallest bit-
14456 field that can store emin and emax. */
14458 /* The middle-end currently assumes that types with TYPE_PRECISION
14459 narrower than their underlying type are suitably zero or sign
14460 extended to fill their mode. Similarly, it assumes that the front
14461 end assures that a value of a particular type must be within
14462 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14464 We used to set these fields based on bmin and bmax, but that led
14465 to invalid assumptions like optimizing away bounds checking. So
14466 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14467 TYPE_MAX_VALUE to the values for the mode above and only restrict
14468 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14469 ENUM_UNDERLYING_TYPE (enumtype)
14470 = build_distinct_type_copy (underlying_type);
14471 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14472 set_min_and_max_values_for_integral_type
14473 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14475 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14476 if (flag_strict_enums)
14477 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14479 else
14480 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14482 /* Convert each of the enumerators to the type of the underlying
14483 type of the enumeration. */
14484 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14486 location_t saved_location;
14488 decl = TREE_VALUE (values);
14489 saved_location = input_location;
14490 input_location = DECL_SOURCE_LOCATION (decl);
14491 if (fixed_underlying_type_p)
14492 /* If the enumeration type has a fixed underlying type, we
14493 already checked all of the enumerator values. */
14494 value = DECL_INITIAL (decl);
14495 else
14496 value = perform_implicit_conversion (underlying_type,
14497 DECL_INITIAL (decl),
14498 tf_warning_or_error);
14499 input_location = saved_location;
14501 /* Do not clobber shared ints. */
14502 if (value != error_mark_node)
14504 value = copy_node (value);
14506 TREE_TYPE (value) = enumtype;
14508 DECL_INITIAL (decl) = value;
14511 /* Fix up all variant types of this enum type. */
14512 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14513 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14515 if (at_class_scope_p ()
14516 && COMPLETE_TYPE_P (current_class_type)
14517 && UNSCOPED_ENUM_P (enumtype))
14519 insert_late_enum_def_bindings (current_class_type, enumtype);
14520 /* TYPE_FIELDS needs fixup. */
14521 fixup_type_variants (current_class_type);
14524 /* Finish debugging output for this type. */
14525 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14527 /* Each enumerator now has the type of its enumeration. Clear the cache
14528 so that this change in types doesn't confuse us later on. */
14529 clear_cv_and_fold_caches ();
14532 /* Finishes the enum type. This is called only the first time an
14533 enumeration is seen, be it opaque or odinary.
14534 ENUMTYPE is the type object. */
14536 void
14537 finish_enum (tree enumtype)
14539 if (processing_template_decl)
14541 if (at_function_scope_p ())
14542 add_stmt (build_min (TAG_DEFN, enumtype));
14543 return;
14546 /* If this is a forward declaration, there should not be any variants,
14547 though we can get a variant in the middle of an enum-specifier with
14548 wacky code like 'enum E { e = sizeof(const E*) };' */
14549 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14550 && (TYPE_VALUES (enumtype)
14551 || !TYPE_NEXT_VARIANT (enumtype)));
14554 /* Build and install a CONST_DECL for an enumeration constant of the
14555 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14556 Apply ATTRIBUTES if available. LOC is the location of NAME.
14557 Assignment of sequential values by default is handled here. */
14559 void
14560 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14561 location_t loc)
14563 tree decl;
14564 tree context;
14565 tree type;
14567 /* scalar_constant_value will pull out this expression, so make sure
14568 it's folded as appropriate. */
14569 if (processing_template_decl)
14570 value = fold_non_dependent_expr (value);
14572 /* If the VALUE was erroneous, pretend it wasn't there; that will
14573 result in the enum being assigned the next value in sequence. */
14574 if (value == error_mark_node)
14575 value = NULL_TREE;
14577 /* Remove no-op casts from the value. */
14578 if (value)
14579 STRIP_TYPE_NOPS (value);
14581 if (! processing_template_decl)
14583 /* Validate and default VALUE. */
14584 if (value != NULL_TREE)
14586 if (!ENUM_UNDERLYING_TYPE (enumtype))
14588 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14589 value, true);
14590 if (tmp_value)
14591 value = tmp_value;
14593 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14594 (TREE_TYPE (value)))
14595 value = perform_implicit_conversion_flags
14596 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14597 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14599 if (value == error_mark_node)
14600 value = NULL_TREE;
14602 if (value != NULL_TREE)
14604 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14605 (TREE_TYPE (value)))
14607 error ("enumerator value for %qD must have integral or "
14608 "unscoped enumeration type", name);
14609 value = NULL_TREE;
14611 else
14613 value = cxx_constant_value (value);
14615 if (TREE_CODE (value) != INTEGER_CST)
14617 error ("enumerator value for %qD is not an integer "
14618 "constant", name);
14619 value = NULL_TREE;
14625 /* Default based on previous value. */
14626 if (value == NULL_TREE)
14628 if (TYPE_VALUES (enumtype))
14630 tree prev_value;
14631 bool overflowed;
14633 /* C++03 7.2/4: If no initializer is specified for the first
14634 enumerator, the type is an unspecified integral
14635 type. Otherwise the type is the same as the type of the
14636 initializing value of the preceding enumerator unless the
14637 incremented value is not representable in that type, in
14638 which case the type is an unspecified integral type
14639 sufficient to contain the incremented value. */
14640 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14641 if (error_operand_p (prev_value))
14642 value = error_mark_node;
14643 else
14645 tree type = TREE_TYPE (prev_value);
14646 signop sgn = TYPE_SIGN (type);
14647 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14648 &overflowed);
14649 if (!overflowed)
14651 bool pos = !wi::neg_p (wi, sgn);
14652 if (!wi::fits_to_tree_p (wi, type))
14654 unsigned int itk;
14655 for (itk = itk_int; itk != itk_none; itk++)
14657 type = integer_types[itk];
14658 if (type != NULL_TREE
14659 && (pos || !TYPE_UNSIGNED (type))
14660 && wi::fits_to_tree_p (wi, type))
14661 break;
14663 if (type && cxx_dialect < cxx11
14664 && itk > itk_unsigned_long)
14665 pedwarn (input_location, OPT_Wlong_long,
14666 pos ? G_("\
14667 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14668 incremented enumerator value is too large for %<long%>"));
14670 if (type == NULL_TREE)
14671 overflowed = true;
14672 else
14673 value = wide_int_to_tree (type, wi);
14676 if (overflowed)
14678 error ("overflow in enumeration values at %qD", name);
14679 value = error_mark_node;
14683 else
14684 value = integer_zero_node;
14687 /* Remove no-op casts from the value. */
14688 STRIP_TYPE_NOPS (value);
14690 /* If the underlying type of the enum is fixed, check whether
14691 the enumerator values fits in the underlying type. If it
14692 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14693 if (ENUM_UNDERLYING_TYPE (enumtype)
14694 && value
14695 && TREE_CODE (value) == INTEGER_CST)
14697 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14698 error ("enumerator value %qE is outside the range of underlying "
14699 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14701 /* Convert the value to the appropriate type. */
14702 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14706 /* C++ associates enums with global, function, or class declarations. */
14707 context = current_scope ();
14709 /* Build the actual enumeration constant. Note that the enumeration
14710 constants have the underlying type of the enum (if it is fixed)
14711 or the type of their initializer (if the underlying type of the
14712 enum is not fixed):
14714 [ C++0x dcl.enum ]
14716 If the underlying type is fixed, the type of each enumerator
14717 prior to the closing brace is the underlying type; if the
14718 initializing value of an enumerator cannot be represented by
14719 the underlying type, the program is ill-formed. If the
14720 underlying type is not fixed, the type of each enumerator is
14721 the type of its initializing value.
14723 If the underlying type is not fixed, it will be computed by
14724 finish_enum and we will reset the type of this enumerator. Of
14725 course, if we're processing a template, there may be no value. */
14726 type = value ? TREE_TYPE (value) : NULL_TREE;
14728 decl = build_decl (loc, CONST_DECL, name, type);
14730 DECL_CONTEXT (decl) = enumtype;
14731 TREE_CONSTANT (decl) = 1;
14732 TREE_READONLY (decl) = 1;
14733 DECL_INITIAL (decl) = value;
14735 if (attributes)
14736 cplus_decl_attributes (&decl, attributes, 0);
14738 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14740 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14741 on the TYPE_FIELDS list for `S'. (That's so that you can say
14742 things like `S::i' later.) */
14744 /* The enumerator may be getting declared outside of its enclosing
14745 class, like so:
14747 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14749 For which case we need to make sure that the access of `S::i'
14750 matches the access of `S::E'. */
14751 tree saved_cas = current_access_specifier;
14752 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14753 current_access_specifier = access_private_node;
14754 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14755 current_access_specifier = access_protected_node;
14756 else
14757 current_access_specifier = access_public_node;
14759 finish_member_declaration (decl);
14761 current_access_specifier = saved_cas;
14763 else
14764 pushdecl (decl);
14766 /* Add this enumeration constant to the list for this type. */
14767 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14770 /* Look for an enumerator with the given NAME within the enumeration
14771 type ENUMTYPE. This routine is used primarily for qualified name
14772 lookup into an enumerator in C++0x, e.g.,
14774 enum class Color { Red, Green, Blue };
14776 Color color = Color::Red;
14778 Returns the value corresponding to the enumerator, or
14779 NULL_TREE if no such enumerator was found. */
14780 tree
14781 lookup_enumerator (tree enumtype, tree name)
14783 tree e;
14784 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14786 e = purpose_member (name, TYPE_VALUES (enumtype));
14787 return e? TREE_VALUE (e) : NULL_TREE;
14791 /* We're defining DECL. Make sure that its type is OK. */
14793 static void
14794 check_function_type (tree decl, tree current_function_parms)
14796 tree fntype = TREE_TYPE (decl);
14797 tree return_type = complete_type (TREE_TYPE (fntype));
14799 /* In a function definition, arg types must be complete. */
14800 require_complete_types_for_parms (current_function_parms);
14802 if (dependent_type_p (return_type)
14803 || type_uses_auto (return_type))
14804 return;
14805 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14807 tree args = TYPE_ARG_TYPES (fntype);
14809 error ("return type %q#T is incomplete", return_type);
14811 /* Make it return void instead. */
14812 if (TREE_CODE (fntype) == METHOD_TYPE)
14813 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14814 void_type_node,
14815 TREE_CHAIN (args));
14816 else
14817 fntype = build_function_type (void_type_node, args);
14818 fntype = (cp_build_type_attribute_variant
14819 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14820 fntype = cxx_copy_lang_qualifiers (fntype, TREE_TYPE (decl));
14821 TREE_TYPE (decl) = fntype;
14823 else
14825 abstract_virtuals_error (decl, TREE_TYPE (fntype));
14826 maybe_warn_parm_abi (TREE_TYPE (fntype),
14827 DECL_SOURCE_LOCATION (decl));
14831 /* True iff FN is an implicitly-defined default constructor. */
14833 static bool
14834 implicit_default_ctor_p (tree fn)
14836 return (DECL_CONSTRUCTOR_P (fn)
14837 && !user_provided_p (fn)
14838 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14841 /* Clobber the contents of *this to let the back end know that the object
14842 storage is dead when we enter the constructor or leave the destructor. */
14844 static tree
14845 build_clobber_this ()
14847 /* Clobbering an empty base is pointless, and harmful if its one byte
14848 TYPE_SIZE overlays real data. */
14849 if (is_empty_class (current_class_type))
14850 return void_node;
14852 /* If we have virtual bases, clobber the whole object, but only if we're in
14853 charge. If we don't have virtual bases, clobber the as-base type so we
14854 don't mess with tail padding. */
14855 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14857 tree ctype = current_class_type;
14858 if (!vbases)
14859 ctype = CLASSTYPE_AS_BASE (ctype);
14861 tree clobber = build_clobber (ctype);
14863 tree thisref = current_class_ref;
14864 if (ctype != current_class_type)
14866 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14867 thisref = convert_from_reference (thisref);
14870 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14871 if (vbases)
14872 exprstmt = build_if_in_charge (exprstmt);
14874 return exprstmt;
14877 /* Create the FUNCTION_DECL for a function definition.
14878 DECLSPECS and DECLARATOR are the parts of the declaration;
14879 they describe the function's name and the type it returns,
14880 but twisted together in a fashion that parallels the syntax of C.
14882 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14883 DECLARATOR is really the DECL for the function we are about to
14884 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14885 indicating that the function is an inline defined in-class.
14887 This function creates a binding context for the function body
14888 as well as setting up the FUNCTION_DECL in current_function_decl.
14890 For C++, we must first check whether that datum makes any sense.
14891 For example, "class A local_a(1,2);" means that variable local_a
14892 is an aggregate of type A, which should have a constructor
14893 applied to it with the argument list [1, 2].
14895 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14896 or may be a BLOCK if the function has been defined previously
14897 in this translation unit. On exit, DECL_INITIAL (decl1) will be
14898 error_mark_node if the function has never been defined, or
14899 a BLOCK if the function has been defined somewhere. */
14901 bool
14902 start_preparsed_function (tree decl1, tree attrs, int flags)
14904 tree ctype = NULL_TREE;
14905 tree fntype;
14906 tree restype;
14907 int doing_friend = 0;
14908 cp_binding_level *bl;
14909 tree current_function_parms;
14910 struct c_fileinfo *finfo
14911 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14912 bool honor_interface;
14914 /* Sanity check. */
14915 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14916 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14918 fntype = TREE_TYPE (decl1);
14919 if (TREE_CODE (fntype) == METHOD_TYPE)
14920 ctype = TYPE_METHOD_BASETYPE (fntype);
14922 /* ISO C++ 11.4/5. A friend function defined in a class is in
14923 the (lexical) scope of the class in which it is defined. */
14924 if (!ctype && DECL_FRIEND_P (decl1))
14926 ctype = DECL_FRIEND_CONTEXT (decl1);
14928 /* CTYPE could be null here if we're dealing with a template;
14929 for example, `inline friend float foo()' inside a template
14930 will have no CTYPE set. */
14931 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14932 ctype = NULL_TREE;
14933 else
14934 doing_friend = 1;
14937 if (DECL_DECLARED_INLINE_P (decl1)
14938 && lookup_attribute ("noinline", attrs))
14939 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14940 "inline function %qD given attribute noinline", decl1);
14942 /* Handle gnu_inline attribute. */
14943 if (GNU_INLINE_P (decl1))
14945 DECL_EXTERNAL (decl1) = 1;
14946 DECL_NOT_REALLY_EXTERN (decl1) = 0;
14947 DECL_INTERFACE_KNOWN (decl1) = 1;
14948 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14951 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
14952 /* This is a constructor, we must ensure that any default args
14953 introduced by this definition are propagated to the clones
14954 now. The clones are used directly in overload resolution. */
14955 adjust_clone_args (decl1);
14957 /* Sometimes we don't notice that a function is a static member, and
14958 build a METHOD_TYPE for it. Fix that up now. */
14959 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
14960 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
14962 /* Set up current_class_type, and enter the scope of the class, if
14963 appropriate. */
14964 if (ctype)
14965 push_nested_class (ctype);
14966 else if (DECL_STATIC_FUNCTION_P (decl1))
14967 push_nested_class (DECL_CONTEXT (decl1));
14969 /* Now that we have entered the scope of the class, we must restore
14970 the bindings for any template parameters surrounding DECL1, if it
14971 is an inline member template. (Order is important; consider the
14972 case where a template parameter has the same name as a field of
14973 the class.) It is not until after this point that
14974 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14975 if (flags & SF_INCLASS_INLINE)
14976 maybe_begin_member_template_processing (decl1);
14978 /* Effective C++ rule 15. */
14979 if (warn_ecpp
14980 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
14981 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
14982 && VOID_TYPE_P (TREE_TYPE (fntype)))
14983 warning (OPT_Weffc__,
14984 "%<operator=%> should return a reference to %<*this%>");
14986 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14987 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14988 if (!DECL_INITIAL (decl1))
14989 DECL_INITIAL (decl1) = error_mark_node;
14991 /* This function exists in static storage.
14992 (This does not mean `static' in the C sense!) */
14993 TREE_STATIC (decl1) = 1;
14995 /* We must call push_template_decl after current_class_type is set
14996 up. (If we are processing inline definitions after exiting a
14997 class scope, current_class_type will be NULL_TREE until set above
14998 by push_nested_class.) */
14999 if (processing_template_decl)
15001 tree newdecl1 = push_template_decl (decl1);
15002 if (newdecl1 == error_mark_node)
15004 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
15005 pop_nested_class ();
15006 return false;
15008 decl1 = newdecl1;
15011 /* Make sure the parameter and return types are reasonable. When
15012 you declare a function, these types can be incomplete, but they
15013 must be complete when you define the function. */
15014 check_function_type (decl1, DECL_ARGUMENTS (decl1));
15016 /* Build the return declaration for the function. */
15017 restype = TREE_TYPE (fntype);
15019 if (DECL_RESULT (decl1) == NULL_TREE)
15021 tree resdecl;
15023 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
15024 DECL_ARTIFICIAL (resdecl) = 1;
15025 DECL_IGNORED_P (resdecl) = 1;
15026 DECL_RESULT (decl1) = resdecl;
15028 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
15031 /* Record the decl so that the function name is defined.
15032 If we already have a decl for this name, and it is a FUNCTION_DECL,
15033 use the old decl. */
15034 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
15036 /* A specialization is not used to guide overload resolution. */
15037 if (!DECL_FUNCTION_MEMBER_P (decl1)
15038 && !(DECL_USE_TEMPLATE (decl1) &&
15039 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
15041 tree olddecl = pushdecl (decl1);
15043 if (olddecl == error_mark_node)
15044 /* If something went wrong when registering the declaration,
15045 use DECL1; we have to have a FUNCTION_DECL to use when
15046 parsing the body of the function. */
15048 else
15050 /* Otherwise, OLDDECL is either a previous declaration
15051 of the same function or DECL1 itself. */
15053 if (warn_missing_declarations
15054 && olddecl == decl1
15055 && !DECL_MAIN_P (decl1)
15056 && TREE_PUBLIC (decl1)
15057 && !DECL_DECLARED_INLINE_P (decl1))
15059 tree context;
15061 /* Check whether DECL1 is in an anonymous
15062 namespace. */
15063 for (context = DECL_CONTEXT (decl1);
15064 context;
15065 context = DECL_CONTEXT (context))
15067 if (TREE_CODE (context) == NAMESPACE_DECL
15068 && DECL_NAME (context) == NULL_TREE)
15069 break;
15072 if (context == NULL)
15073 warning_at (DECL_SOURCE_LOCATION (decl1),
15074 OPT_Wmissing_declarations,
15075 "no previous declaration for %qD", decl1);
15078 decl1 = olddecl;
15081 else
15083 /* We need to set the DECL_CONTEXT. */
15084 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
15085 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
15087 fntype = TREE_TYPE (decl1);
15088 restype = TREE_TYPE (fntype);
15090 /* If #pragma weak applies, mark the decl appropriately now.
15091 The pragma only applies to global functions. Because
15092 determining whether or not the #pragma applies involves
15093 computing the mangled name for the declaration, we cannot
15094 apply the pragma until after we have merged this declaration
15095 with any previous declarations; if the original declaration
15096 has a linkage specification, that specification applies to
15097 the definition as well, and may affect the mangled name. */
15098 if (DECL_FILE_SCOPE_P (decl1))
15099 maybe_apply_pragma_weak (decl1);
15102 /* We are now in the scope of the function being defined. */
15103 current_function_decl = decl1;
15105 /* Save the parm names or decls from this function's declarator
15106 where store_parm_decls will find them. */
15107 current_function_parms = DECL_ARGUMENTS (decl1);
15109 /* Let the user know we're compiling this function. */
15110 announce_function (decl1);
15112 gcc_assert (DECL_INITIAL (decl1));
15114 /* This function may already have been parsed, in which case just
15115 return; our caller will skip over the body without parsing. */
15116 if (DECL_INITIAL (decl1) != error_mark_node)
15117 return true;
15119 /* Initialize RTL machinery. We cannot do this until
15120 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
15121 even when processing a template; this is how we get
15122 CFUN set up, and our per-function variables initialized.
15123 FIXME factor out the non-RTL stuff. */
15124 bl = current_binding_level;
15125 allocate_struct_function (decl1, processing_template_decl);
15127 /* Initialize the language data structures. Whenever we start
15128 a new function, we destroy temporaries in the usual way. */
15129 cfun->language = ggc_cleared_alloc<language_function> ();
15130 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15131 current_binding_level = bl;
15133 if (!processing_template_decl && type_uses_auto (restype))
15135 FNDECL_USED_AUTO (decl1) = true;
15136 current_function_auto_return_pattern = restype;
15139 /* Start the statement-tree, start the tree now. */
15140 DECL_SAVED_TREE (decl1) = push_stmt_list ();
15142 /* If we are (erroneously) defining a function that we have already
15143 defined before, wipe out what we knew before. */
15144 if (!DECL_PENDING_INLINE_P (decl1))
15145 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
15147 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
15149 /* We know that this was set up by `grokclassfn'. We do not
15150 wait until `store_parm_decls', since evil parse errors may
15151 never get us to that point. Here we keep the consistency
15152 between `current_class_type' and `current_class_ptr'. */
15153 tree t = DECL_ARGUMENTS (decl1);
15155 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
15156 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
15158 cp_function_chain->x_current_class_ref
15159 = cp_build_fold_indirect_ref (t);
15160 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
15161 cp_function_chain->x_current_class_ptr = t;
15163 /* Constructors and destructors need to know whether they're "in
15164 charge" of initializing virtual base classes. */
15165 t = DECL_CHAIN (t);
15166 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15168 current_in_charge_parm = t;
15169 t = DECL_CHAIN (t);
15171 if (DECL_HAS_VTT_PARM_P (decl1))
15173 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15174 current_vtt_parm = t;
15178 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15179 /* Implicitly-defined methods (like the
15180 destructor for a class in which no destructor
15181 is explicitly declared) must not be defined
15182 until their definition is needed. So, we
15183 ignore interface specifications for
15184 compiler-generated functions. */
15185 && !DECL_ARTIFICIAL (decl1));
15187 if (processing_template_decl)
15188 /* Don't mess with interface flags. */;
15189 else if (DECL_INTERFACE_KNOWN (decl1))
15191 tree ctx = decl_function_context (decl1);
15193 if (DECL_NOT_REALLY_EXTERN (decl1))
15194 DECL_EXTERNAL (decl1) = 0;
15196 if (ctx != NULL_TREE && vague_linkage_p (ctx))
15197 /* This is a function in a local class in an extern inline
15198 or template function. */
15199 comdat_linkage (decl1);
15201 /* If this function belongs to an interface, it is public.
15202 If it belongs to someone else's interface, it is also external.
15203 This only affects inlines and template instantiations. */
15204 else if (!finfo->interface_unknown && honor_interface)
15206 if (DECL_DECLARED_INLINE_P (decl1)
15207 || DECL_TEMPLATE_INSTANTIATION (decl1))
15209 DECL_EXTERNAL (decl1)
15210 = (finfo->interface_only
15211 || (DECL_DECLARED_INLINE_P (decl1)
15212 && ! flag_implement_inlines
15213 && !DECL_VINDEX (decl1)));
15215 /* For WIN32 we also want to put these in linkonce sections. */
15216 maybe_make_one_only (decl1);
15218 else
15219 DECL_EXTERNAL (decl1) = 0;
15220 DECL_INTERFACE_KNOWN (decl1) = 1;
15221 /* If this function is in an interface implemented in this file,
15222 make sure that the back end knows to emit this function
15223 here. */
15224 if (!DECL_EXTERNAL (decl1))
15225 mark_needed (decl1);
15227 else if (finfo->interface_unknown && finfo->interface_only
15228 && honor_interface)
15230 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15231 interface, we will have both finfo->interface_unknown and
15232 finfo->interface_only set. In that case, we don't want to
15233 use the normal heuristics because someone will supply a
15234 #pragma implementation elsewhere, and deducing it here would
15235 produce a conflict. */
15236 comdat_linkage (decl1);
15237 DECL_EXTERNAL (decl1) = 0;
15238 DECL_INTERFACE_KNOWN (decl1) = 1;
15239 DECL_DEFER_OUTPUT (decl1) = 1;
15241 else
15243 /* This is a definition, not a reference.
15244 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15245 if (!GNU_INLINE_P (decl1))
15246 DECL_EXTERNAL (decl1) = 0;
15248 if ((DECL_DECLARED_INLINE_P (decl1)
15249 || DECL_TEMPLATE_INSTANTIATION (decl1))
15250 && ! DECL_INTERFACE_KNOWN (decl1))
15251 DECL_DEFER_OUTPUT (decl1) = 1;
15252 else
15253 DECL_INTERFACE_KNOWN (decl1) = 1;
15256 /* Determine the ELF visibility attribute for the function. We must not
15257 do this before calling "pushdecl", as we must allow "duplicate_decls"
15258 to merge any attributes appropriately. We also need to wait until
15259 linkage is set. */
15260 if (!DECL_CLONED_FUNCTION_P (decl1))
15261 determine_visibility (decl1);
15263 if (!processing_template_decl)
15264 maybe_instantiate_noexcept (decl1);
15266 begin_scope (sk_function_parms, decl1);
15268 ++function_depth;
15270 if (DECL_DESTRUCTOR_P (decl1)
15271 || (DECL_CONSTRUCTOR_P (decl1)
15272 && targetm.cxx.cdtor_returns_this ()))
15274 cdtor_label = create_artificial_label (input_location);
15275 LABEL_DECL_CDTOR (cdtor_label) = true;
15278 start_fname_decls ();
15280 store_parm_decls (current_function_parms);
15282 if (!processing_template_decl
15283 && (flag_lifetime_dse > 1)
15284 && DECL_CONSTRUCTOR_P (decl1)
15285 && !DECL_CLONED_FUNCTION_P (decl1)
15286 /* Clobbering an empty base is harmful if it overlays real data. */
15287 && !is_empty_class (current_class_type)
15288 /* We can't clobber safely for an implicitly-defined default constructor
15289 because part of the initialization might happen before we enter the
15290 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15291 && !implicit_default_ctor_p (decl1))
15292 finish_expr_stmt (build_clobber_this ());
15294 if (!processing_template_decl
15295 && DECL_CONSTRUCTOR_P (decl1)
15296 && sanitize_flags_p (SANITIZE_VPTR)
15297 && !DECL_CLONED_FUNCTION_P (decl1)
15298 && !implicit_default_ctor_p (decl1))
15299 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15301 start_lambda_scope (decl1);
15303 return true;
15307 /* Like start_preparsed_function, except that instead of a
15308 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15310 Returns true on success. If the DECLARATOR is not suitable
15311 for a function, we return false, which tells the parser to
15312 skip the entire function. */
15314 bool
15315 start_function (cp_decl_specifier_seq *declspecs,
15316 const cp_declarator *declarator,
15317 tree attrs)
15319 tree decl1;
15321 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15322 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15323 if (decl1 == error_mark_node)
15324 return false;
15325 /* If the declarator is not suitable for a function definition,
15326 cause a syntax error. */
15327 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15329 error ("invalid function declaration");
15330 return false;
15333 if (DECL_MAIN_P (decl1))
15334 /* main must return int. grokfndecl should have corrected it
15335 (and issued a diagnostic) if the user got it wrong. */
15336 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15337 integer_type_node));
15339 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15342 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15343 FN. */
15345 static bool
15346 use_eh_spec_block (tree fn)
15348 return (flag_exceptions && flag_enforce_eh_specs
15349 && !processing_template_decl
15350 && !type_throw_all_p (TREE_TYPE (fn))
15351 /* We insert the EH_SPEC_BLOCK only in the original
15352 function; then, it is copied automatically to the
15353 clones. */
15354 && !DECL_CLONED_FUNCTION_P (fn)
15355 /* Implicitly-generated constructors and destructors have
15356 exception specifications. However, those specifications
15357 are the union of the possible exceptions specified by the
15358 constructors/destructors for bases and members, so no
15359 unallowed exception will ever reach this function. By
15360 not creating the EH_SPEC_BLOCK we save a little memory,
15361 and we avoid spurious warnings about unreachable
15362 code. */
15363 && !DECL_DEFAULTED_FN (fn));
15366 /* Store the parameter declarations into the current function declaration.
15367 This is called after parsing the parameter declarations, before
15368 digesting the body of the function.
15370 Also install to binding contour return value identifier, if any. */
15372 static void
15373 store_parm_decls (tree current_function_parms)
15375 tree fndecl = current_function_decl;
15376 tree parm;
15378 /* This is a chain of any other decls that came in among the parm
15379 declarations. If a parm is declared with enum {foo, bar} x;
15380 then CONST_DECLs for foo and bar are put here. */
15381 tree nonparms = NULL_TREE;
15383 if (current_function_parms)
15385 /* This case is when the function was defined with an ANSI prototype.
15386 The parms already have decls, so we need not do anything here
15387 except record them as in effect
15388 and complain if any redundant old-style parm decls were written. */
15390 tree specparms = current_function_parms;
15391 tree next;
15393 /* Must clear this because it might contain TYPE_DECLs declared
15394 at class level. */
15395 current_binding_level->names = NULL;
15397 /* If we're doing semantic analysis, then we'll call pushdecl
15398 for each of these. We must do them in reverse order so that
15399 they end in the correct forward order. */
15400 specparms = nreverse (specparms);
15402 for (parm = specparms; parm; parm = next)
15404 next = DECL_CHAIN (parm);
15405 if (TREE_CODE (parm) == PARM_DECL)
15406 pushdecl (parm);
15407 else
15409 /* If we find an enum constant or a type tag,
15410 put it aside for the moment. */
15411 TREE_CHAIN (parm) = NULL_TREE;
15412 nonparms = chainon (nonparms, parm);
15416 /* Get the decls in their original chain order and record in the
15417 function. This is all and only the PARM_DECLs that were
15418 pushed into scope by the loop above. */
15419 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15421 else
15422 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15424 /* Now store the final chain of decls for the arguments
15425 as the decl-chain of the current lexical scope.
15426 Put the enumerators in as well, at the front so that
15427 DECL_ARGUMENTS is not modified. */
15428 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15430 if (use_eh_spec_block (current_function_decl))
15431 current_eh_spec_block = begin_eh_spec_block ();
15435 /* We have finished doing semantic analysis on DECL, but have not yet
15436 generated RTL for its body. Save away our current state, so that
15437 when we want to generate RTL later we know what to do. */
15439 static void
15440 save_function_data (tree decl)
15442 struct language_function *f;
15444 /* Save the language-specific per-function data so that we can
15445 get it back when we really expand this function. */
15446 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15448 /* Make a copy. */
15449 f = ggc_alloc<language_function> ();
15450 memcpy (f, cp_function_chain, sizeof (struct language_function));
15451 DECL_SAVED_FUNCTION_DATA (decl) = f;
15453 /* Clear out the bits we don't need. */
15454 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15455 f->bindings = NULL;
15456 f->x_local_names = NULL;
15457 f->base.local_typedefs = NULL;
15461 /* Set the return value of the constructor (if present). */
15463 static void
15464 finish_constructor_body (void)
15466 tree val;
15467 tree exprstmt;
15469 if (targetm.cxx.cdtor_returns_this ())
15471 /* Any return from a constructor will end up here. */
15472 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15474 val = DECL_ARGUMENTS (current_function_decl);
15475 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15476 DECL_RESULT (current_function_decl), val);
15477 /* Return the address of the object. */
15478 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15479 add_stmt (exprstmt);
15483 /* Do all the processing for the beginning of a destructor; set up the
15484 vtable pointers and cleanups for bases and members. */
15486 static void
15487 begin_destructor_body (void)
15489 tree compound_stmt;
15491 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15492 issued an error message. We still want to try to process the
15493 body of the function, but initialize_vtbl_ptrs will crash if
15494 TYPE_BINFO is NULL. */
15495 if (COMPLETE_TYPE_P (current_class_type))
15497 compound_stmt = begin_compound_stmt (0);
15498 /* Make all virtual function table pointers in non-virtual base
15499 classes point to CURRENT_CLASS_TYPE's virtual function
15500 tables. */
15501 initialize_vtbl_ptrs (current_class_ptr);
15502 finish_compound_stmt (compound_stmt);
15504 if (flag_lifetime_dse
15505 /* Clobbering an empty base is harmful if it overlays real data. */
15506 && !is_empty_class (current_class_type))
15508 if (sanitize_flags_p (SANITIZE_VPTR)
15509 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15510 && TYPE_CONTAINS_VPTR_P (current_class_type))
15512 tree binfo = TYPE_BINFO (current_class_type);
15513 tree ref
15514 = cp_build_fold_indirect_ref (current_class_ptr);
15516 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15517 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15518 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15519 NOP_EXPR, vtbl,
15520 tf_warning_or_error);
15521 finish_decl_cleanup (NULL_TREE, stmt);
15523 else
15524 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15527 /* And insert cleanups for our bases and members so that they
15528 will be properly destroyed if we throw. */
15529 push_base_cleanups ();
15533 /* At the end of every destructor we generate code to delete the object if
15534 necessary. Do that now. */
15536 static void
15537 finish_destructor_body (void)
15539 tree exprstmt;
15541 /* Any return from a destructor will end up here; that way all base
15542 and member cleanups will be run when the function returns. */
15543 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15545 if (targetm.cxx.cdtor_returns_this ())
15547 tree val;
15549 val = DECL_ARGUMENTS (current_function_decl);
15550 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15551 DECL_RESULT (current_function_decl), val);
15552 /* Return the address of the object. */
15553 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15554 add_stmt (exprstmt);
15558 /* Do the necessary processing for the beginning of a function body, which
15559 in this case includes member-initializers, but not the catch clauses of
15560 a function-try-block. Currently, this means opening a binding level
15561 for the member-initializers (in a ctor), member cleanups (in a dtor),
15562 and capture proxies (in a lambda operator()). */
15564 tree
15565 begin_function_body (void)
15567 tree stmt;
15569 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15570 return NULL_TREE;
15572 if (processing_template_decl)
15573 /* Do nothing now. */;
15574 else
15575 /* Always keep the BLOCK node associated with the outermost pair of
15576 curly braces of a function. These are needed for correct
15577 operation of dwarfout.c. */
15578 keep_next_level (true);
15580 stmt = begin_compound_stmt (BCS_FN_BODY);
15582 if (processing_template_decl)
15583 /* Do nothing now. */;
15584 else if (DECL_DESTRUCTOR_P (current_function_decl))
15585 begin_destructor_body ();
15587 return stmt;
15590 /* Do the processing for the end of a function body. Currently, this means
15591 closing out the cleanups for fully-constructed bases and members, and in
15592 the case of the destructor, deleting the object if desired. Again, this
15593 is only meaningful for [cd]tors, since they are the only functions where
15594 there is a significant distinction between the main body and any
15595 function catch clauses. Handling, say, main() return semantics here
15596 would be wrong, as flowing off the end of a function catch clause for
15597 main() would also need to return 0. */
15599 void
15600 finish_function_body (tree compstmt)
15602 if (compstmt == NULL_TREE)
15603 return;
15605 /* Close the block. */
15606 finish_compound_stmt (compstmt);
15608 if (processing_template_decl)
15609 /* Do nothing now. */;
15610 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15611 finish_constructor_body ();
15612 else if (DECL_DESTRUCTOR_P (current_function_decl))
15613 finish_destructor_body ();
15616 /* Given a function, returns the BLOCK corresponding to the outermost level
15617 of curly braces, skipping the artificial block created for constructor
15618 initializers. */
15620 tree
15621 outer_curly_brace_block (tree fndecl)
15623 tree block = DECL_INITIAL (fndecl);
15624 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15625 return block;
15626 block = BLOCK_SUBBLOCKS (block);
15627 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15628 return block;
15629 block = BLOCK_SUBBLOCKS (block);
15630 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15631 return block;
15634 /* If FNDECL is a class's key method, add the class to the list of
15635 keyed classes that should be emitted. */
15637 static void
15638 record_key_method_defined (tree fndecl)
15640 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15641 && DECL_VIRTUAL_P (fndecl)
15642 && !processing_template_decl)
15644 tree fnclass = DECL_CONTEXT (fndecl);
15645 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15646 vec_safe_push (keyed_classes, fnclass);
15650 /* Subroutine of finish_function.
15651 Save the body of constexpr functions for possible
15652 future compile time evaluation. */
15654 static void
15655 maybe_save_function_definition (tree fun)
15657 if (!processing_template_decl
15658 && DECL_DECLARED_CONSTEXPR_P (fun)
15659 && !cp_function_chain->invalid_constexpr
15660 && !DECL_CLONED_FUNCTION_P (fun))
15661 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15664 /* Finish up a function declaration and compile that function
15665 all the way to assembler language output. The free the storage
15666 for the function definition. INLINE_P is TRUE if we just
15667 finished processing the body of an in-class inline function
15668 definition. (This processing will have taken place after the
15669 class definition is complete.) */
15671 tree
15672 finish_function (bool inline_p)
15674 tree fndecl = current_function_decl;
15675 tree fntype, ctype = NULL_TREE;
15677 /* When we get some parse errors, we can end up without a
15678 current_function_decl, so cope. */
15679 if (fndecl == NULL_TREE)
15680 return error_mark_node;
15682 finish_lambda_scope ();
15684 if (c_dialect_objc ())
15685 objc_finish_function ();
15687 record_key_method_defined (fndecl);
15689 fntype = TREE_TYPE (fndecl);
15691 /* TREE_READONLY (fndecl) = 1;
15692 This caused &foo to be of type ptr-to-const-function
15693 which then got a warning when stored in a ptr-to-function variable. */
15695 gcc_assert (building_stmt_list_p ());
15696 /* The current function is being defined, so its DECL_INITIAL should
15697 be set, and unless there's a multiple definition, it should be
15698 error_mark_node. */
15699 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15701 /* For a cloned function, we've already got all the code we need;
15702 there's no need to add any extra bits. */
15703 if (!DECL_CLONED_FUNCTION_P (fndecl))
15705 /* Make it so that `main' always returns 0 by default. */
15706 if (DECL_MAIN_P (current_function_decl))
15707 finish_return_stmt (integer_zero_node);
15709 if (use_eh_spec_block (current_function_decl))
15710 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15711 (TREE_TYPE (current_function_decl)),
15712 current_eh_spec_block);
15715 /* If we're saving up tree structure, tie off the function now. */
15716 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15718 finish_fname_decls ();
15720 /* If this function can't throw any exceptions, remember that. */
15721 if (!processing_template_decl
15722 && !cp_function_chain->can_throw
15723 && !flag_non_call_exceptions
15724 && !decl_replaceable_p (fndecl))
15725 TREE_NOTHROW (fndecl) = 1;
15727 /* This must come after expand_function_end because cleanups might
15728 have declarations (from inline functions) that need to go into
15729 this function's blocks. */
15731 /* If the current binding level isn't the outermost binding level
15732 for this function, either there is a bug, or we have experienced
15733 syntax errors and the statement tree is malformed. */
15734 if (current_binding_level->kind != sk_function_parms)
15736 /* Make sure we have already experienced errors. */
15737 gcc_assert (errorcount);
15739 /* Throw away the broken statement tree and extra binding
15740 levels. */
15741 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15743 while (current_binding_level->kind != sk_function_parms)
15745 if (current_binding_level->kind == sk_class)
15746 pop_nested_class ();
15747 else
15748 poplevel (0, 0, 0);
15751 poplevel (1, 0, 1);
15753 /* Statements should always be full-expressions at the outermost set
15754 of curly braces for a function. */
15755 gcc_assert (stmts_are_full_exprs_p ());
15757 /* If there are no return statements in a function with auto return type,
15758 the return type is void. But if the declared type is something like
15759 auto*, this is an error. */
15760 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15761 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15763 if (is_auto (current_function_auto_return_pattern))
15765 apply_deduced_return_type (fndecl, void_type_node);
15766 fntype = TREE_TYPE (fndecl);
15768 else if (!current_function_returns_value
15769 && !current_function_returns_null)
15771 error ("no return statements in function returning %qT",
15772 current_function_auto_return_pattern);
15773 inform (input_location, "only plain %<auto%> return type can be "
15774 "deduced to %<void%>");
15778 // If this is a concept, check that the definition is reasonable.
15779 if (DECL_DECLARED_CONCEPT_P (fndecl))
15780 check_function_concept (fndecl);
15782 /* Lambda closure members are implicitly constexpr if possible. */
15783 if (cxx_dialect >= cxx17
15784 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15785 DECL_DECLARED_CONSTEXPR_P (fndecl)
15786 = ((processing_template_decl
15787 || is_valid_constexpr_fn (fndecl, /*complain*/false))
15788 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15790 /* Save constexpr function body before it gets munged by
15791 the NRV transformation. */
15792 maybe_save_function_definition (fndecl);
15794 /* Invoke the pre-genericize plugin before we start munging things. */
15795 if (!processing_template_decl)
15796 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15798 /* Perform delayed folding before NRV transformation. */
15799 if (!processing_template_decl)
15800 cp_fold_function (fndecl);
15802 /* Set up the named return value optimization, if we can. Candidate
15803 variables are selected in check_return_expr. */
15804 if (current_function_return_value)
15806 tree r = current_function_return_value;
15807 tree outer;
15809 if (r != error_mark_node
15810 /* This is only worth doing for fns that return in memory--and
15811 simpler, since we don't have to worry about promoted modes. */
15812 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15813 /* Only allow this for variables declared in the outer scope of
15814 the function so we know that their lifetime always ends with a
15815 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15816 we were to do this optimization in tree-ssa. */
15817 && (outer = outer_curly_brace_block (fndecl))
15818 && chain_member (r, BLOCK_VARS (outer)))
15819 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15821 current_function_return_value = NULL_TREE;
15824 /* Remember that we were in class scope. */
15825 if (current_class_name)
15826 ctype = current_class_type;
15828 /* Must mark the RESULT_DECL as being in this function. */
15829 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15831 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15832 to the FUNCTION_DECL node itself. */
15833 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15835 /* Save away current state, if appropriate. */
15836 if (!processing_template_decl)
15837 save_function_data (fndecl);
15839 /* Complain if there's just no return statement. */
15840 if (warn_return_type
15841 && !VOID_TYPE_P (TREE_TYPE (fntype))
15842 && !dependent_type_p (TREE_TYPE (fntype))
15843 && !current_function_returns_value && !current_function_returns_null
15844 /* Don't complain if we abort or throw. */
15845 && !current_function_returns_abnormally
15846 /* Don't complain if there's an infinite loop. */
15847 && !current_function_infinite_loop
15848 /* Don't complain if we are declared noreturn. */
15849 && !TREE_THIS_VOLATILE (fndecl)
15850 && !DECL_NAME (DECL_RESULT (fndecl))
15851 && !TREE_NO_WARNING (fndecl)
15852 /* Structor return values (if any) are set by the compiler. */
15853 && !DECL_CONSTRUCTOR_P (fndecl)
15854 && !DECL_DESTRUCTOR_P (fndecl)
15855 && targetm.warn_func_return (fndecl))
15857 warning (OPT_Wreturn_type,
15858 "no return statement in function returning non-void");
15859 TREE_NO_WARNING (fndecl) = 1;
15862 /* Store the end of the function, so that we get good line number
15863 info for the epilogue. */
15864 cfun->function_end_locus = input_location;
15866 /* Complain about parameters that are only set, but never otherwise used. */
15867 if (warn_unused_but_set_parameter
15868 && !processing_template_decl
15869 && errorcount == unused_but_set_errorcount
15870 && !DECL_CLONED_FUNCTION_P (fndecl))
15872 tree decl;
15874 for (decl = DECL_ARGUMENTS (fndecl);
15875 decl;
15876 decl = DECL_CHAIN (decl))
15877 if (TREE_USED (decl)
15878 && TREE_CODE (decl) == PARM_DECL
15879 && !DECL_READ_P (decl)
15880 && DECL_NAME (decl)
15881 && !DECL_ARTIFICIAL (decl)
15882 && !TREE_NO_WARNING (decl)
15883 && !DECL_IN_SYSTEM_HEADER (decl)
15884 && TREE_TYPE (decl) != error_mark_node
15885 && !TYPE_REF_P (TREE_TYPE (decl))
15886 && (!CLASS_TYPE_P (TREE_TYPE (decl))
15887 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15888 warning_at (DECL_SOURCE_LOCATION (decl),
15889 OPT_Wunused_but_set_parameter,
15890 "parameter %qD set but not used", decl);
15891 unused_but_set_errorcount = errorcount;
15894 /* Complain about locally defined typedefs that are not used in this
15895 function. */
15896 maybe_warn_unused_local_typedefs ();
15898 /* Possibly warn about unused parameters. */
15899 if (warn_unused_parameter
15900 && !processing_template_decl
15901 && !DECL_CLONED_FUNCTION_P (fndecl))
15902 do_warn_unused_parameter (fndecl);
15904 /* Genericize before inlining. */
15905 if (!processing_template_decl)
15907 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15908 cp_genericize (fndecl);
15909 /* Clear out the bits we don't need. */
15910 f->x_current_class_ptr = NULL;
15911 f->x_current_class_ref = NULL;
15912 f->x_eh_spec_block = NULL;
15913 f->x_in_charge_parm = NULL;
15914 f->x_vtt_parm = NULL;
15915 f->x_return_value = NULL;
15916 f->bindings = NULL;
15917 f->extern_decl_map = NULL;
15918 f->infinite_loops = NULL;
15920 /* Clear out the bits we don't need. */
15921 local_names = NULL;
15923 /* We're leaving the context of this function, so zap cfun. It's still in
15924 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
15925 set_cfun (NULL);
15926 current_function_decl = NULL;
15928 /* If this is an in-class inline definition, we may have to pop the
15929 bindings for the template parameters that we added in
15930 maybe_begin_member_template_processing when start_function was
15931 called. */
15932 if (inline_p)
15933 maybe_end_member_template_processing ();
15935 /* Leave the scope of the class. */
15936 if (ctype)
15937 pop_nested_class ();
15939 --function_depth;
15941 /* Clean up. */
15942 current_function_decl = NULL_TREE;
15944 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
15945 return fndecl;
15948 /* Create the FUNCTION_DECL for a function definition.
15949 DECLSPECS and DECLARATOR are the parts of the declaration;
15950 they describe the return type and the name of the function,
15951 but twisted together in a fashion that parallels the syntax of C.
15953 This function creates a binding context for the function body
15954 as well as setting up the FUNCTION_DECL in current_function_decl.
15956 Returns a FUNCTION_DECL on success.
15958 If the DECLARATOR is not suitable for a function (it defines a datum
15959 instead), we return 0, which tells yyparse to report a parse error.
15961 May return void_type_node indicating that this method is actually
15962 a friend. See grokfield for more details.
15964 Came here with a `.pushlevel' .
15966 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15967 CHANGES TO CODE IN `grokfield'. */
15969 tree
15970 grokmethod (cp_decl_specifier_seq *declspecs,
15971 const cp_declarator *declarator, tree attrlist)
15973 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
15974 &attrlist);
15976 if (fndecl == error_mark_node)
15977 return error_mark_node;
15979 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
15981 error ("invalid member function declaration");
15982 return error_mark_node;
15985 if (attrlist)
15986 cplus_decl_attributes (&fndecl, attrlist, 0);
15988 /* Pass friends other than inline friend functions back. */
15989 if (fndecl == void_type_node)
15990 return fndecl;
15992 if (DECL_IN_AGGR_P (fndecl))
15994 if (DECL_CLASS_SCOPE_P (fndecl))
15995 error ("%qD is already defined in class %qT", fndecl,
15996 DECL_CONTEXT (fndecl));
15997 return error_mark_node;
16000 check_template_shadow (fndecl);
16002 if (TREE_PUBLIC (fndecl))
16003 DECL_COMDAT (fndecl) = 1;
16004 DECL_DECLARED_INLINE_P (fndecl) = 1;
16005 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
16007 /* We process method specializations in finish_struct_1. */
16008 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
16010 fndecl = push_template_decl (fndecl);
16011 if (fndecl == error_mark_node)
16012 return fndecl;
16015 if (! DECL_FRIEND_P (fndecl))
16017 if (DECL_CHAIN (fndecl))
16019 fndecl = copy_node (fndecl);
16020 TREE_CHAIN (fndecl) = NULL_TREE;
16024 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
16026 DECL_IN_AGGR_P (fndecl) = 1;
16027 return fndecl;
16031 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
16032 we can lay it out later, when and if its type becomes complete.
16034 Also handle constexpr variables where the initializer involves
16035 an unlowered PTRMEM_CST because the class isn't complete yet. */
16037 void
16038 maybe_register_incomplete_var (tree var)
16040 gcc_assert (VAR_P (var));
16042 /* Keep track of variables with incomplete types. */
16043 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
16044 && DECL_EXTERNAL (var))
16046 tree inner_type = TREE_TYPE (var);
16048 while (TREE_CODE (inner_type) == ARRAY_TYPE)
16049 inner_type = TREE_TYPE (inner_type);
16050 inner_type = TYPE_MAIN_VARIANT (inner_type);
16052 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
16053 /* RTTI TD entries are created while defining the type_info. */
16054 || (TYPE_LANG_SPECIFIC (inner_type)
16055 && TYPE_BEING_DEFINED (inner_type)))
16057 incomplete_var iv = {var, inner_type};
16058 vec_safe_push (incomplete_vars, iv);
16060 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
16061 && decl_constant_var_p (var)
16062 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
16064 /* When the outermost open class is complete we can resolve any
16065 pointers-to-members. */
16066 tree context = outermost_open_class ();
16067 incomplete_var iv = {var, context};
16068 vec_safe_push (incomplete_vars, iv);
16073 /* Called when a class type (given by TYPE) is defined. If there are
16074 any existing VAR_DECLs whose type has been completed by this
16075 declaration, update them now. */
16077 void
16078 complete_vars (tree type)
16080 unsigned ix;
16081 incomplete_var *iv;
16083 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
16085 if (same_type_p (type, iv->incomplete_type))
16087 tree var = iv->decl;
16088 tree type = TREE_TYPE (var);
16090 if (type != error_mark_node
16091 && (TYPE_MAIN_VARIANT (strip_array_types (type))
16092 == iv->incomplete_type))
16094 /* Complete the type of the variable. The VAR_DECL itself
16095 will be laid out in expand_expr. */
16096 complete_type (type);
16097 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
16100 /* Remove this entry from the list. */
16101 incomplete_vars->unordered_remove (ix);
16103 else
16104 ix++;
16107 /* Check for pending declarations which may have abstract type. */
16108 complete_type_check_abstract (type);
16111 /* If DECL is of a type which needs a cleanup, build and return an
16112 expression to perform that cleanup here. Return NULL_TREE if no
16113 cleanup need be done. DECL can also be a _REF when called from
16114 split_nonconstant_init_1. */
16116 tree
16117 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
16119 tree type;
16120 tree attr;
16121 tree cleanup;
16123 /* Assume no cleanup is required. */
16124 cleanup = NULL_TREE;
16126 if (error_operand_p (decl))
16127 return cleanup;
16129 /* Handle "__attribute__((cleanup))". We run the cleanup function
16130 before the destructor since the destructor is what actually
16131 terminates the lifetime of the object. */
16132 if (DECL_P (decl))
16133 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
16134 else
16135 attr = NULL_TREE;
16136 if (attr)
16138 tree id;
16139 tree fn;
16140 tree arg;
16142 /* Get the name specified by the user for the cleanup function. */
16143 id = TREE_VALUE (TREE_VALUE (attr));
16144 /* Look up the name to find the cleanup function to call. It is
16145 important to use lookup_name here because that is what is
16146 used in c-common.c:handle_cleanup_attribute when performing
16147 initial checks on the attribute. Note that those checks
16148 include ensuring that the function found is not an overloaded
16149 function, or an object with an overloaded call operator,
16150 etc.; we can rely on the fact that the function found is an
16151 ordinary FUNCTION_DECL. */
16152 fn = lookup_name (id);
16153 arg = build_address (decl);
16154 if (!mark_used (decl, complain) && !(complain & tf_error))
16155 return error_mark_node;
16156 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
16157 if (cleanup == error_mark_node)
16158 return error_mark_node;
16160 /* Handle ordinary C++ destructors. */
16161 type = TREE_TYPE (decl);
16162 if (type_build_dtor_call (type))
16164 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16165 tree addr;
16166 tree call;
16168 if (TREE_CODE (type) == ARRAY_TYPE)
16169 addr = decl;
16170 else
16171 addr = build_address (decl);
16173 call = build_delete (TREE_TYPE (addr), addr,
16174 sfk_complete_destructor, flags, 0, complain);
16175 if (call == error_mark_node)
16176 cleanup = error_mark_node;
16177 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16178 /* Discard the call. */;
16179 else if (cleanup)
16180 cleanup = cp_build_compound_expr (cleanup, call, complain);
16181 else
16182 cleanup = call;
16185 /* build_delete sets the location of the destructor call to the
16186 current location, even though the destructor is going to be
16187 called later, at the end of the current scope. This can lead to
16188 a "jumpy" behavior for users of debuggers when they step around
16189 the end of the block. So let's unset the location of the
16190 destructor call instead. */
16191 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16193 if (cleanup
16194 && DECL_P (decl)
16195 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16196 /* Treat objects with destructors as used; the destructor may do
16197 something substantive. */
16198 && !mark_used (decl, complain) && !(complain & tf_error))
16199 return error_mark_node;
16201 return cleanup;
16205 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16206 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16207 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16209 tree
16210 static_fn_type (tree memfntype)
16212 tree fntype;
16213 tree args;
16215 if (TYPE_PTRMEMFUNC_P (memfntype))
16216 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16217 if (INDIRECT_TYPE_P (memfntype)
16218 || TREE_CODE (memfntype) == FUNCTION_DECL)
16219 memfntype = TREE_TYPE (memfntype);
16220 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16221 return memfntype;
16222 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16223 args = TYPE_ARG_TYPES (memfntype);
16224 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16225 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
16226 fntype = (cp_build_type_attribute_variant
16227 (fntype, TYPE_ATTRIBUTES (memfntype)));
16228 fntype = cxx_copy_lang_qualifiers (fntype, memfntype);
16229 return fntype;
16232 /* DECL was originally constructed as a non-static member function,
16233 but turned out to be static. Update it accordingly. */
16235 void
16236 revert_static_member_fn (tree decl)
16238 tree stype = static_fn_type (decl);
16239 cp_cv_quals quals = type_memfn_quals (stype);
16240 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16242 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16243 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16245 TREE_TYPE (decl) = stype;
16247 if (DECL_ARGUMENTS (decl))
16248 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16249 DECL_STATIC_FUNCTION_P (decl) = 1;
16252 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16253 one of the language-independent trees. */
16255 enum cp_tree_node_structure_enum
16256 cp_tree_node_structure (union lang_tree_node * t)
16258 switch (TREE_CODE (&t->generic))
16260 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16261 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16262 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16263 case OVERLOAD: return TS_CP_OVERLOAD;
16264 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16265 case PTRMEM_CST: return TS_CP_PTRMEM;
16266 case BASELINK: return TS_CP_BASELINK;
16267 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16268 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16269 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16270 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16271 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16272 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16273 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16274 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16275 default: return TS_CP_GENERIC;
16279 /* Build the void_list_node (void_type_node having been created). */
16280 tree
16281 build_void_list_node (void)
16283 tree t = build_tree_list (NULL_TREE, void_type_node);
16284 return t;
16287 bool
16288 cp_missing_noreturn_ok_p (tree decl)
16290 /* A missing noreturn is ok for the `main' function. */
16291 return DECL_MAIN_P (decl);
16294 /* Return the decl used to identify the COMDAT group into which DECL should
16295 be placed. */
16297 tree
16298 cxx_comdat_group (tree decl)
16300 /* Virtual tables, construction virtual tables, and virtual table
16301 tables all go in a single COMDAT group, named after the primary
16302 virtual table. */
16303 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16304 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16305 /* For all other DECLs, the COMDAT group is the mangled name of the
16306 declaration itself. */
16307 else
16309 while (DECL_THUNK_P (decl))
16311 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16312 into the same section as the target function. In that case
16313 we must return target's name. */
16314 tree target = THUNK_TARGET (decl);
16315 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16316 && DECL_SECTION_NAME (target) != NULL
16317 && DECL_ONE_ONLY (target))
16318 decl = target;
16319 else
16320 break;
16324 return decl;
16327 /* Returns the return type for FN as written by the user, which may include
16328 a placeholder for a deduced return type. */
16330 tree
16331 fndecl_declared_return_type (tree fn)
16333 fn = STRIP_TEMPLATE (fn);
16334 if (FNDECL_USED_AUTO (fn))
16336 struct language_function *f = NULL;
16337 if (DECL_STRUCT_FUNCTION (fn))
16338 f = DECL_STRUCT_FUNCTION (fn)->language;
16339 if (f == NULL)
16340 f = DECL_SAVED_FUNCTION_DATA (fn);
16341 return f->x_auto_return_pattern;
16343 return TREE_TYPE (TREE_TYPE (fn));
16346 /* Returns true iff DECL is a variable or function declared with an auto type
16347 that has not yet been deduced to a real type. */
16349 bool
16350 undeduced_auto_decl (tree decl)
16352 if (cxx_dialect < cxx11)
16353 return false;
16354 return ((VAR_OR_FUNCTION_DECL_P (decl)
16355 || TREE_CODE (decl) == TEMPLATE_DECL)
16356 && type_uses_auto (TREE_TYPE (decl)));
16359 /* Complain if DECL has an undeduced return type. */
16361 bool
16362 require_deduced_type (tree decl, tsubst_flags_t complain)
16364 if (undeduced_auto_decl (decl))
16366 if (complain & tf_error)
16367 error ("use of %qD before deduction of %<auto%>", decl);
16368 return false;
16370 return true;
16373 #include "gt-cp-decl.h"