* tree.c (cp_expr_location): New.
[official-gcc.git] / gcc / cp / decl.c
blob90714cce0626d2f924777a292d7712ee2b5b213b
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)
6977 if (TREE_CODE (init) == TREE_LIST)
6978 lookup_list_keep (init, true);
6979 DECL_INITIAL (decl) = init;
6981 if (dep_init)
6983 retrofit_lang_decl (decl);
6984 SET_DECL_DEPENDENT_INIT_P (decl, true);
6986 return;
6989 /* Just store non-static data member initializers for later. */
6990 if (init && TREE_CODE (decl) == FIELD_DECL)
6991 DECL_INITIAL (decl) = init;
6993 /* Take care of TYPE_DECLs up front. */
6994 if (TREE_CODE (decl) == TYPE_DECL)
6996 if (type != error_mark_node
6997 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6999 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7000 warning (0, "shadowing previous type declaration of %q#D", decl);
7001 set_identifier_type_value (DECL_NAME (decl), decl);
7004 /* If we have installed this as the canonical typedef for this
7005 type, and that type has not been defined yet, delay emitting
7006 the debug information for it, as we will emit it later. */
7007 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7008 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7009 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7011 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
7012 at_eof);
7013 return;
7016 /* A reference will be modified here, as it is initialized. */
7017 if (! DECL_EXTERNAL (decl)
7018 && TREE_READONLY (decl)
7019 && TYPE_REF_P (type))
7021 was_readonly = 1;
7022 TREE_READONLY (decl) = 0;
7025 if (VAR_P (decl))
7027 /* If this is a local variable that will need a mangled name,
7028 register it now. We must do this before processing the
7029 initializer for the variable, since the initialization might
7030 require a guard variable, and since the mangled name of the
7031 guard variable will depend on the mangled name of this
7032 variable. */
7033 if (DECL_FUNCTION_SCOPE_P (decl)
7034 && TREE_STATIC (decl)
7035 && !DECL_ARTIFICIAL (decl))
7037 push_local_name (decl);
7038 /* Normally has_forced_label_in_static is set during GIMPLE
7039 lowering, but [cd]tors are never actually compiled directly.
7040 We need to set this early so we can deal with the label
7041 address extension. */
7042 if ((DECL_CONSTRUCTOR_P (current_function_decl)
7043 || DECL_DESTRUCTOR_P (current_function_decl))
7044 && init)
7046 walk_tree (&init, notice_forced_label_r, NULL, NULL);
7047 add_local_decl (cfun, decl);
7049 /* And make sure it's in the symbol table for
7050 c_parse_final_cleanups to find. */
7051 varpool_node::get_create (decl);
7054 /* Convert the initializer to the type of DECL, if we have not
7055 already initialized DECL. */
7056 if (!DECL_INITIALIZED_P (decl)
7057 /* If !DECL_EXTERNAL then DECL is being defined. In the
7058 case of a static data member initialized inside the
7059 class-specifier, there can be an initializer even if DECL
7060 is *not* defined. */
7061 && (!DECL_EXTERNAL (decl) || init))
7063 cleanups = make_tree_vector ();
7064 init = check_initializer (decl, init, flags, &cleanups);
7066 /* Handle:
7068 [dcl.init]
7070 The memory occupied by any object of static storage
7071 duration is zero-initialized at program startup before
7072 any other initialization takes place.
7074 We cannot create an appropriate initializer until after
7075 the type of DECL is finalized. If DECL_INITIAL is set,
7076 then the DECL is statically initialized, and any
7077 necessary zero-initialization has already been performed. */
7078 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7079 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7080 /*nelts=*/NULL_TREE,
7081 /*static_storage_p=*/true);
7082 /* Remember that the initialization for this variable has
7083 taken place. */
7084 DECL_INITIALIZED_P (decl) = 1;
7085 /* This declaration is the definition of this variable,
7086 unless we are initializing a static data member within
7087 the class specifier. */
7088 if (!DECL_EXTERNAL (decl))
7089 var_definition_p = true;
7091 /* If the variable has an array type, lay out the type, even if
7092 there is no initializer. It is valid to index through the
7093 array, and we must get TYPE_ALIGN set correctly on the array
7094 type. */
7095 else if (TREE_CODE (type) == ARRAY_TYPE)
7096 layout_type (type);
7098 if (TREE_STATIC (decl)
7099 && !at_function_scope_p ()
7100 && current_function_decl == NULL)
7101 /* So decl is a global variable or a static member of a
7102 non local class. Record the types it uses
7103 so that we can decide later to emit debug info for them. */
7104 record_types_used_by_current_var_decl (decl);
7107 /* Add this declaration to the statement-tree. This needs to happen
7108 after the call to check_initializer so that the DECL_EXPR for a
7109 reference temp is added before the DECL_EXPR for the reference itself. */
7110 if (DECL_FUNCTION_SCOPE_P (decl))
7112 /* If we're building a variable sized type, and we might be
7113 reachable other than via the top of the current binding
7114 level, then create a new BIND_EXPR so that we deallocate
7115 the object at the right time. */
7116 if (VAR_P (decl)
7117 && DECL_SIZE (decl)
7118 && !TREE_CONSTANT (DECL_SIZE (decl))
7119 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7121 tree bind;
7122 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7123 TREE_SIDE_EFFECTS (bind) = 1;
7124 add_stmt (bind);
7125 BIND_EXPR_BODY (bind) = push_stmt_list ();
7127 add_decl_expr (decl);
7130 /* Let the middle end know about variables and functions -- but not
7131 static data members in uninstantiated class templates. */
7132 if (VAR_OR_FUNCTION_DECL_P (decl))
7134 if (VAR_P (decl))
7136 layout_var_decl (decl);
7137 maybe_commonize_var (decl);
7140 /* This needs to happen after the linkage is set. */
7141 determine_visibility (decl);
7143 if (var_definition_p && TREE_STATIC (decl))
7145 /* If a TREE_READONLY variable needs initialization
7146 at runtime, it is no longer readonly and we need to
7147 avoid MEM_READONLY_P being set on RTL created for it. */
7148 if (init)
7150 if (TREE_READONLY (decl))
7151 TREE_READONLY (decl) = 0;
7152 was_readonly = 0;
7154 else if (was_readonly)
7155 TREE_READONLY (decl) = 1;
7157 /* Likewise if it needs destruction. */
7158 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7159 TREE_READONLY (decl) = 0;
7162 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7164 /* Check for abstractness of the type. Notice that there is no
7165 need to strip array types here since the check for those types
7166 is already done within create_array_type_for_decl. */
7167 abstract_virtuals_error (decl, type);
7169 if (TREE_TYPE (decl) == error_mark_node)
7170 /* No initialization required. */
7172 else if (TREE_CODE (decl) == FUNCTION_DECL)
7174 if (init)
7176 if (init == ridpointers[(int)RID_DEFAULT])
7178 /* An out-of-class default definition is defined at
7179 the point where it is explicitly defaulted. */
7180 if (DECL_DELETED_FN (decl))
7181 maybe_explain_implicit_delete (decl);
7182 else if (DECL_INITIAL (decl) == error_mark_node)
7183 synthesize_method (decl);
7185 else
7186 error ("function %q#D is initialized like a variable", decl);
7188 /* else no initialization required. */
7190 else if (DECL_EXTERNAL (decl)
7191 && ! (DECL_LANG_SPECIFIC (decl)
7192 && DECL_NOT_REALLY_EXTERN (decl)))
7194 if (init)
7195 DECL_INITIAL (decl) = init;
7197 /* A variable definition. */
7198 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7199 /* Initialize the local variable. */
7200 initialize_local_var (decl, init);
7202 /* If a variable is defined, and then a subsequent
7203 definition with external linkage is encountered, we will
7204 get here twice for the same variable. We want to avoid
7205 calling expand_static_init more than once. For variables
7206 that are not static data members, we can call
7207 expand_static_init only when we actually process the
7208 initializer. It is not legal to redeclare a static data
7209 member, so this issue does not arise in that case. */
7210 else if (var_definition_p && TREE_STATIC (decl))
7211 expand_static_init (decl, init);
7214 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7215 reference, insert it in the statement-tree now. */
7216 if (cleanups)
7218 unsigned i; tree t;
7219 FOR_EACH_VEC_ELT (*cleanups, i, t)
7220 push_cleanup (decl, t, false);
7221 release_tree_vector (cleanups);
7224 if (was_readonly)
7225 TREE_READONLY (decl) = 1;
7227 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7230 /* For class TYPE return itself or some its bases that contain
7231 any direct non-static data members. Return error_mark_node if an
7232 error has been diagnosed. */
7234 static tree
7235 find_decomp_class_base (location_t loc, tree type, tree ret)
7237 bool member_seen = false;
7238 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7239 if (TREE_CODE (field) != FIELD_DECL
7240 || DECL_ARTIFICIAL (field)
7241 || DECL_UNNAMED_BIT_FIELD (field))
7242 continue;
7243 else if (ret)
7244 return type;
7245 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7247 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7248 error_at (loc, "cannot decompose class type %qT because it has an "
7249 "anonymous struct member", type);
7250 else
7251 error_at (loc, "cannot decompose class type %qT because it has an "
7252 "anonymous union member", type);
7253 inform (DECL_SOURCE_LOCATION (field), "declared here");
7254 return error_mark_node;
7256 else if (!accessible_p (type, field, true))
7258 error_at (loc, "cannot decompose inaccessible member %qD of %qT",
7259 field, type);
7260 inform (DECL_SOURCE_LOCATION (field),
7261 TREE_PRIVATE (field)
7262 ? G_("declared private here")
7263 : G_("declared protected here"));
7264 return error_mark_node;
7266 else
7267 member_seen = true;
7269 tree base_binfo, binfo;
7270 tree orig_ret = ret;
7271 int i;
7272 if (member_seen)
7273 ret = type;
7274 for (binfo = TYPE_BINFO (type), i = 0;
7275 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7277 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7278 if (t == error_mark_node)
7279 return error_mark_node;
7280 if (t != NULL_TREE && t != ret)
7282 if (ret == type)
7284 error_at (loc, "cannot decompose class type %qT: both it and "
7285 "its base class %qT have non-static data members",
7286 type, t);
7287 return error_mark_node;
7289 else if (orig_ret != NULL_TREE)
7290 return t;
7291 else if (ret != NULL_TREE)
7293 error_at (loc, "cannot decompose class type %qT: its base "
7294 "classes %qT and %qT have non-static data "
7295 "members", type, ret, t);
7296 return error_mark_node;
7298 else
7299 ret = t;
7302 return ret;
7305 /* Return std::tuple_size<TYPE>::value. */
7307 static tree
7308 get_tuple_size (tree type)
7310 tree args = make_tree_vec (1);
7311 TREE_VEC_ELT (args, 0) = type;
7312 tree inst = lookup_template_class (get_identifier ("tuple_size"), args,
7313 /*in_decl*/NULL_TREE,
7314 /*context*/std_node,
7315 /*entering_scope*/false, tf_none);
7316 inst = complete_type (inst);
7317 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7318 return NULL_TREE;
7319 tree val = lookup_qualified_name (inst, get_identifier ("value"),
7320 /*type*/false, /*complain*/false);
7321 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7322 val = maybe_constant_value (val);
7323 if (TREE_CODE (val) == INTEGER_CST)
7324 return val;
7325 else
7326 return error_mark_node;
7329 /* Return std::tuple_element<I,TYPE>::type. */
7331 static tree
7332 get_tuple_element_type (tree type, unsigned i)
7334 tree args = make_tree_vec (2);
7335 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7336 TREE_VEC_ELT (args, 1) = type;
7337 tree inst = lookup_template_class (get_identifier ("tuple_element"), args,
7338 /*in_decl*/NULL_TREE,
7339 /*context*/std_node,
7340 /*entering_scope*/false,
7341 tf_warning_or_error);
7342 return make_typename_type (inst, get_identifier ("type"),
7343 none_type, tf_warning_or_error);
7346 /* Return e.get<i>() or get<i>(e). */
7348 static tree
7349 get_tuple_decomp_init (tree decl, unsigned i)
7351 tree get_id = get_identifier ("get");
7352 tree targs = make_tree_vec (1);
7353 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7355 tree etype = TREE_TYPE (decl);
7356 tree e = convert_from_reference (decl);
7358 /* [The id-expression] e is an lvalue if the type of the entity e is an
7359 lvalue reference and an xvalue otherwise. */
7360 if (!TYPE_REF_P (etype)
7361 || TYPE_REF_IS_RVALUE (etype))
7362 e = move (e);
7364 tree fns = lookup_qualified_name (TREE_TYPE (e), get_id,
7365 /*type*/false, /*complain*/false);
7366 bool use_member_get = false;
7368 /* To use a member get, member lookup must find at least one
7369 declaration that is a function template
7370 whose first template parameter is a non-type parameter. */
7371 for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
7373 tree fn = *iter;
7374 if (TREE_CODE (fn) == TEMPLATE_DECL)
7376 tree tparms = DECL_TEMPLATE_PARMS (fn);
7377 tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
7378 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
7380 use_member_get = true;
7381 break;
7386 if (use_member_get)
7388 fns = lookup_template_function (fns, targs);
7389 return build_new_method_call (e, fns, /*args*/NULL,
7390 /*path*/NULL_TREE, LOOKUP_NORMAL,
7391 /*fn_p*/NULL, tf_warning_or_error);
7393 else
7395 vec<tree,va_gc> *args = make_tree_vector_single (e);
7396 fns = lookup_template_function (get_id, targs);
7397 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7398 return finish_call_expr (fns, &args, /*novirt*/false,
7399 /*koenig*/true, tf_warning_or_error);
7403 /* It's impossible to recover the decltype of a tuple decomposition variable
7404 based on the actual type of the variable, so store it in a hash table. */
7406 static GTY((cache)) tree_cache_map *decomp_type_table;
7407 static void
7408 store_decomp_type (tree v, tree t)
7410 if (!decomp_type_table)
7411 decomp_type_table = tree_cache_map::create_ggc (13);
7412 decomp_type_table->put (v, t);
7415 tree
7416 lookup_decomp_type (tree v)
7418 return *decomp_type_table->get (v);
7421 /* Mangle a decomposition declaration if needed. Arguments like
7422 in cp_finish_decomp. */
7424 void
7425 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7427 if (!processing_template_decl
7428 && !error_operand_p (decl)
7429 && DECL_NAMESPACE_SCOPE_P (decl))
7431 auto_vec<tree, 16> v;
7432 v.safe_grow (count);
7433 tree d = first;
7434 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7435 v[count - i - 1] = d;
7436 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7437 maybe_apply_pragma_weak (decl);
7441 /* Finish a decomposition declaration. DECL is the underlying declaration
7442 "e", FIRST is the head of a chain of decls for the individual identifiers
7443 chained through DECL_CHAIN in reverse order and COUNT is the number of
7444 those decls. */
7446 void
7447 cp_finish_decomp (tree decl, tree first, unsigned int count)
7449 if (error_operand_p (decl))
7451 error_out:
7452 while (count--)
7454 TREE_TYPE (first) = error_mark_node;
7455 if (DECL_HAS_VALUE_EXPR_P (first))
7457 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7458 DECL_HAS_VALUE_EXPR_P (first) = 0;
7460 first = DECL_CHAIN (first);
7462 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7463 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7464 return;
7467 location_t loc = DECL_SOURCE_LOCATION (decl);
7468 if (type_dependent_expression_p (decl)
7469 /* This happens for range for when not in templates.
7470 Still add the DECL_VALUE_EXPRs for later processing. */
7471 || (!processing_template_decl
7472 && type_uses_auto (TREE_TYPE (decl))))
7474 for (unsigned int i = 0; i < count; i++)
7476 if (!DECL_HAS_VALUE_EXPR_P (first))
7478 tree v = build_nt (ARRAY_REF, decl,
7479 size_int (count - i - 1),
7480 NULL_TREE, NULL_TREE);
7481 SET_DECL_VALUE_EXPR (first, v);
7482 DECL_HAS_VALUE_EXPR_P (first) = 1;
7484 if (processing_template_decl)
7485 fit_decomposition_lang_decl (first, decl);
7486 first = DECL_CHAIN (first);
7488 return;
7491 auto_vec<tree, 16> v;
7492 v.safe_grow (count);
7493 tree d = first;
7494 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7496 v[count - i - 1] = d;
7497 fit_decomposition_lang_decl (d, decl);
7500 tree type = TREE_TYPE (decl);
7501 tree dexp = decl;
7503 if (TYPE_REF_P (type))
7505 dexp = convert_from_reference (dexp);
7506 type = complete_type (TREE_TYPE (type));
7507 if (type == error_mark_node)
7508 goto error_out;
7509 if (!COMPLETE_TYPE_P (type))
7511 error_at (loc, "structured binding refers to incomplete type %qT",
7512 type);
7513 goto error_out;
7517 tree eltype = NULL_TREE;
7518 unsigned HOST_WIDE_INT eltscnt = 0;
7519 if (TREE_CODE (type) == ARRAY_TYPE)
7521 tree nelts;
7522 nelts = array_type_nelts_top (type);
7523 if (nelts == error_mark_node)
7524 goto error_out;
7525 if (!tree_fits_uhwi_p (nelts))
7527 error_at (loc, "cannot decompose variable length array %qT", type);
7528 goto error_out;
7530 eltscnt = tree_to_uhwi (nelts);
7531 if (count != eltscnt)
7533 cnt_mismatch:
7534 if (count > eltscnt)
7535 error_n (loc, count,
7536 "%u name provided for structured binding",
7537 "%u names provided for structured binding", count);
7538 else
7539 error_n (loc, count,
7540 "only %u name provided for structured binding",
7541 "only %u names provided for structured binding", count);
7542 inform_n (loc, eltscnt,
7543 "while %qT decomposes into %wu element",
7544 "while %qT decomposes into %wu elements",
7545 type, eltscnt);
7546 goto error_out;
7548 eltype = TREE_TYPE (type);
7549 for (unsigned int i = 0; i < count; i++)
7551 TREE_TYPE (v[i]) = eltype;
7552 layout_decl (v[i], 0);
7553 if (processing_template_decl)
7554 continue;
7555 tree t = unshare_expr (dexp);
7556 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7557 eltype, t, size_int (i), NULL_TREE,
7558 NULL_TREE);
7559 SET_DECL_VALUE_EXPR (v[i], t);
7560 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7563 /* 2 GNU extensions. */
7564 else if (TREE_CODE (type) == COMPLEX_TYPE)
7566 eltscnt = 2;
7567 if (count != eltscnt)
7568 goto cnt_mismatch;
7569 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7570 for (unsigned int i = 0; i < count; i++)
7572 TREE_TYPE (v[i]) = eltype;
7573 layout_decl (v[i], 0);
7574 if (processing_template_decl)
7575 continue;
7576 tree t = unshare_expr (dexp);
7577 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7578 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7580 SET_DECL_VALUE_EXPR (v[i], t);
7581 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7584 else if (TREE_CODE (type) == VECTOR_TYPE)
7586 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7588 error_at (loc, "cannot decompose variable length vector %qT", type);
7589 goto error_out;
7591 if (count != eltscnt)
7592 goto cnt_mismatch;
7593 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7594 for (unsigned int i = 0; i < count; i++)
7596 TREE_TYPE (v[i]) = eltype;
7597 layout_decl (v[i], 0);
7598 if (processing_template_decl)
7599 continue;
7600 tree t = unshare_expr (dexp);
7601 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7602 &t, size_int (i));
7603 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7604 eltype, t, size_int (i), NULL_TREE,
7605 NULL_TREE);
7606 SET_DECL_VALUE_EXPR (v[i], t);
7607 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7610 else if (tree tsize = get_tuple_size (type))
7612 if (tsize == error_mark_node)
7614 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7615 "constant expression", type);
7616 goto error_out;
7618 if (!tree_fits_uhwi_p (tsize))
7620 error_n (loc, count,
7621 "%u name provided for structured binding",
7622 "%u names provided for structured binding", count);
7623 inform (loc, "while %qT decomposes into %E elements",
7624 type, tsize);
7625 goto error_out;
7627 eltscnt = tree_to_uhwi (tsize);
7628 if (count != eltscnt)
7629 goto cnt_mismatch;
7630 int save_read = DECL_READ_P (decl);
7631 for (unsigned i = 0; i < count; ++i)
7633 location_t sloc = input_location;
7634 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7636 input_location = dloc;
7637 tree init = get_tuple_decomp_init (decl, i);
7638 tree eltype = (init == error_mark_node ? error_mark_node
7639 : get_tuple_element_type (type, i));
7640 input_location = sloc;
7642 if (init == error_mark_node || eltype == error_mark_node)
7644 inform (dloc, "in initialization of structured binding "
7645 "variable %qD", v[i]);
7646 goto error_out;
7648 /* Save the decltype away before reference collapse. */
7649 store_decomp_type (v[i], eltype);
7650 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7651 TREE_TYPE (v[i]) = eltype;
7652 layout_decl (v[i], 0);
7653 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7655 /* In this case the names are variables, not just proxies. */
7656 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7657 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7659 if (!processing_template_decl)
7660 cp_finish_decl (v[i], init, /*constexpr*/false,
7661 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7663 /* Ignore reads from the underlying decl performed during initialization
7664 of the individual variables. If those will be read, we'll mark
7665 the underlying decl as read at that point. */
7666 DECL_READ_P (decl) = save_read;
7668 else if (TREE_CODE (type) == UNION_TYPE)
7670 error_at (loc, "cannot decompose union type %qT", type);
7671 goto error_out;
7673 else if (!CLASS_TYPE_P (type))
7675 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7676 goto error_out;
7678 else if (LAMBDA_TYPE_P (type))
7680 error_at (loc, "cannot decompose lambda closure type %qT", type);
7681 goto error_out;
7683 else if (processing_template_decl && !COMPLETE_TYPE_P (type))
7684 pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
7685 type);
7686 else
7688 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7689 if (btype == error_mark_node)
7690 goto error_out;
7691 else if (btype == NULL_TREE)
7693 error_at (loc, "cannot decompose class type %qT without non-static "
7694 "data members", type);
7695 goto error_out;
7697 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7698 if (TREE_CODE (field) != FIELD_DECL
7699 || DECL_ARTIFICIAL (field)
7700 || DECL_UNNAMED_BIT_FIELD (field))
7701 continue;
7702 else
7703 eltscnt++;
7704 if (count != eltscnt)
7705 goto cnt_mismatch;
7706 tree t = dexp;
7707 if (type != btype)
7709 t = convert_to_base (t, btype, /*check_access*/true,
7710 /*nonnull*/false, tf_warning_or_error);
7711 type = btype;
7713 unsigned int i = 0;
7714 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7715 if (TREE_CODE (field) != FIELD_DECL
7716 || DECL_ARTIFICIAL (field)
7717 || DECL_UNNAMED_BIT_FIELD (field))
7718 continue;
7719 else
7721 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7722 NULL_TREE);
7723 if (REFERENCE_REF_P (tt))
7724 tt = TREE_OPERAND (tt, 0);
7725 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7726 layout_decl (v[i], 0);
7727 if (!processing_template_decl)
7729 SET_DECL_VALUE_EXPR (v[i], tt);
7730 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7732 i++;
7735 if (processing_template_decl)
7737 for (unsigned int i = 0; i < count; i++)
7738 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7740 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7741 NULL_TREE, NULL_TREE);
7742 SET_DECL_VALUE_EXPR (v[i], a);
7743 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7748 /* Returns a declaration for a VAR_DECL as if:
7750 extern "C" TYPE NAME;
7752 had been seen. Used to create compiler-generated global
7753 variables. */
7755 static tree
7756 declare_global_var (tree name, tree type)
7758 tree decl;
7760 push_to_top_level ();
7761 decl = build_decl (input_location, VAR_DECL, name, type);
7762 TREE_PUBLIC (decl) = 1;
7763 DECL_EXTERNAL (decl) = 1;
7764 DECL_ARTIFICIAL (decl) = 1;
7765 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7766 /* If the user has explicitly declared this variable (perhaps
7767 because the code we are compiling is part of a low-level runtime
7768 library), then it is possible that our declaration will be merged
7769 with theirs by pushdecl. */
7770 decl = pushdecl (decl);
7771 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7772 pop_from_top_level ();
7774 return decl;
7777 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7778 if "__cxa_atexit" is not being used) corresponding to the function
7779 to be called when the program exits. */
7781 static tree
7782 get_atexit_fn_ptr_type (void)
7784 tree fn_type;
7786 if (!atexit_fn_ptr_type_node)
7788 tree arg_type;
7789 if (flag_use_cxa_atexit
7790 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7791 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7792 arg_type = ptr_type_node;
7793 else
7794 /* The parameter to "atexit" is "void (*)(void)". */
7795 arg_type = NULL_TREE;
7797 fn_type = build_function_type_list (void_type_node,
7798 arg_type, NULL_TREE);
7799 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7802 return atexit_fn_ptr_type_node;
7805 /* Returns a pointer to the `atexit' function. Note that if
7806 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7807 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7809 static tree
7810 get_atexit_node (void)
7812 tree atexit_fndecl;
7813 tree fn_type;
7814 tree fn_ptr_type;
7815 const char *name;
7816 bool use_aeabi_atexit;
7818 if (atexit_node)
7819 return atexit_node;
7821 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7823 /* The declaration for `__cxa_atexit' is:
7825 int __cxa_atexit (void (*)(void *), void *, void *)
7827 We build up the argument types and then the function type
7828 itself. */
7829 tree argtype0, argtype1, argtype2;
7831 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7832 /* First, build the pointer-to-function type for the first
7833 argument. */
7834 fn_ptr_type = get_atexit_fn_ptr_type ();
7835 /* Then, build the rest of the argument types. */
7836 argtype2 = ptr_type_node;
7837 if (use_aeabi_atexit)
7839 argtype1 = fn_ptr_type;
7840 argtype0 = ptr_type_node;
7842 else
7844 argtype1 = ptr_type_node;
7845 argtype0 = fn_ptr_type;
7847 /* And the final __cxa_atexit type. */
7848 fn_type = build_function_type_list (integer_type_node,
7849 argtype0, argtype1, argtype2,
7850 NULL_TREE);
7851 if (use_aeabi_atexit)
7852 name = "__aeabi_atexit";
7853 else
7854 name = "__cxa_atexit";
7856 else
7858 /* The declaration for `atexit' is:
7860 int atexit (void (*)());
7862 We build up the argument types and then the function type
7863 itself. */
7864 fn_ptr_type = get_atexit_fn_ptr_type ();
7865 /* Build the final atexit type. */
7866 fn_type = build_function_type_list (integer_type_node,
7867 fn_ptr_type, NULL_TREE);
7868 name = "atexit";
7871 /* Now, build the function declaration. */
7872 push_lang_context (lang_name_c);
7873 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7874 mark_used (atexit_fndecl);
7875 pop_lang_context ();
7876 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7878 return atexit_node;
7881 /* Like get_atexit_node, but for thread-local cleanups. */
7883 static tree
7884 get_thread_atexit_node (void)
7886 /* The declaration for `__cxa_thread_atexit' is:
7888 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
7889 tree fn_type = build_function_type_list (integer_type_node,
7890 get_atexit_fn_ptr_type (),
7891 ptr_type_node, ptr_type_node,
7892 NULL_TREE);
7894 /* Now, build the function declaration. */
7895 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
7896 ECF_LEAF | ECF_NOTHROW);
7897 return decay_conversion (atexit_fndecl, tf_warning_or_error);
7900 /* Returns the __dso_handle VAR_DECL. */
7902 static tree
7903 get_dso_handle_node (void)
7905 if (dso_handle_node)
7906 return dso_handle_node;
7908 /* Declare the variable. */
7909 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
7910 ptr_type_node);
7912 #ifdef HAVE_GAS_HIDDEN
7913 if (dso_handle_node != error_mark_node)
7915 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
7916 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
7918 #endif
7920 return dso_handle_node;
7923 /* Begin a new function with internal linkage whose job will be simply
7924 to destroy some particular variable. */
7926 static GTY(()) int start_cleanup_cnt;
7928 static tree
7929 start_cleanup_fn (void)
7931 char name[32];
7932 tree fntype;
7933 tree fndecl;
7934 bool use_cxa_atexit = flag_use_cxa_atexit
7935 && !targetm.cxx.use_atexit_for_cxa_atexit ();
7937 push_to_top_level ();
7939 /* No need to mangle this. */
7940 push_lang_context (lang_name_c);
7942 /* Build the name of the function. */
7943 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
7944 /* Build the function declaration. */
7945 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
7946 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
7947 /* It's a function with internal linkage, generated by the
7948 compiler. */
7949 TREE_PUBLIC (fndecl) = 0;
7950 DECL_ARTIFICIAL (fndecl) = 1;
7951 /* Make the function `inline' so that it is only emitted if it is
7952 actually needed. It is unlikely that it will be inlined, since
7953 it is only called via a function pointer, but we avoid unnecessary
7954 emissions this way. */
7955 DECL_DECLARED_INLINE_P (fndecl) = 1;
7956 DECL_INTERFACE_KNOWN (fndecl) = 1;
7957 /* Build the parameter. */
7958 if (use_cxa_atexit)
7960 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
7961 TREE_USED (parmdecl) = 1;
7962 DECL_READ_P (parmdecl) = 1;
7963 DECL_ARGUMENTS (fndecl) = parmdecl;
7966 pushdecl (fndecl);
7967 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7969 pop_lang_context ();
7971 return current_function_decl;
7974 /* Finish the cleanup function begun by start_cleanup_fn. */
7976 static void
7977 end_cleanup_fn (void)
7979 expand_or_defer_fn (finish_function (/*inline_p=*/false));
7981 pop_from_top_level ();
7984 /* Generate code to handle the destruction of DECL, an object with
7985 static storage duration. */
7987 tree
7988 register_dtor_fn (tree decl)
7990 tree cleanup;
7991 tree addr;
7992 tree compound_stmt;
7993 tree fcall;
7994 tree type;
7995 bool ob_parm, dso_parm, use_dtor;
7996 tree arg0, arg1, arg2;
7997 tree atex_node;
7999 type = TREE_TYPE (decl);
8000 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8001 return void_node;
8003 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
8004 "__aeabi_atexit"), and DECL is a class object, we can just pass the
8005 destructor to "__cxa_atexit"; we don't have to build a temporary
8006 function to do the cleanup. */
8007 dso_parm = (flag_use_cxa_atexit
8008 && !targetm.cxx.use_atexit_for_cxa_atexit ());
8009 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
8010 use_dtor = ob_parm && CLASS_TYPE_P (type);
8011 if (use_dtor)
8013 cleanup = get_class_binding (type, complete_dtor_identifier);
8015 /* Make sure it is accessible. */
8016 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
8017 tf_warning_or_error);
8019 else
8021 /* Call build_cleanup before we enter the anonymous function so
8022 that any access checks will be done relative to the current
8023 scope, rather than the scope of the anonymous function. */
8024 build_cleanup (decl);
8026 /* Now start the function. */
8027 cleanup = start_cleanup_fn ();
8029 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8030 to the original function, rather than the anonymous one. That
8031 will make the back end think that nested functions are in use,
8032 which causes confusion. */
8033 push_deferring_access_checks (dk_no_check);
8034 fcall = build_cleanup (decl);
8035 pop_deferring_access_checks ();
8037 /* Create the body of the anonymous function. */
8038 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
8039 finish_expr_stmt (fcall);
8040 finish_compound_stmt (compound_stmt);
8041 end_cleanup_fn ();
8044 /* Call atexit with the cleanup function. */
8045 mark_used (cleanup);
8046 cleanup = build_address (cleanup);
8048 if (CP_DECL_THREAD_LOCAL_P (decl))
8049 atex_node = get_thread_atexit_node ();
8050 else
8051 atex_node = get_atexit_node ();
8053 if (use_dtor)
8055 /* We must convert CLEANUP to the type that "__cxa_atexit"
8056 expects. */
8057 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
8058 /* "__cxa_atexit" will pass the address of DECL to the
8059 cleanup function. */
8060 mark_used (decl);
8061 addr = build_address (decl);
8062 /* The declared type of the parameter to "__cxa_atexit" is
8063 "void *". For plain "T*", we could just let the
8064 machinery in cp_build_function_call convert it -- but if the
8065 type is "cv-qualified T *", then we need to convert it
8066 before passing it in, to avoid spurious errors. */
8067 addr = build_nop (ptr_type_node, addr);
8069 else
8070 /* Since the cleanup functions we build ignore the address
8071 they're given, there's no reason to pass the actual address
8072 in, and, in general, it's cheaper to pass NULL than any
8073 other value. */
8074 addr = null_pointer_node;
8076 if (dso_parm)
8077 arg2 = cp_build_addr_expr (get_dso_handle_node (),
8078 tf_warning_or_error);
8079 else if (ob_parm)
8080 /* Just pass NULL to the dso handle parm if we don't actually
8081 have a DSO handle on this target. */
8082 arg2 = null_pointer_node;
8083 else
8084 arg2 = NULL_TREE;
8086 if (ob_parm)
8088 if (!CP_DECL_THREAD_LOCAL_P (decl)
8089 && targetm.cxx.use_aeabi_atexit ())
8091 arg1 = cleanup;
8092 arg0 = addr;
8094 else
8096 arg1 = addr;
8097 arg0 = cleanup;
8100 else
8102 arg0 = cleanup;
8103 arg1 = NULL_TREE;
8105 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8106 arg0, arg1, arg2, NULL_TREE);
8109 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8110 is its initializer. Generate code to handle the construction
8111 and destruction of DECL. */
8113 static void
8114 expand_static_init (tree decl, tree init)
8116 gcc_assert (VAR_P (decl));
8117 gcc_assert (TREE_STATIC (decl));
8119 /* Some variables require no dynamic initialization. */
8120 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8122 /* Make sure the destructor is callable. */
8123 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8124 if (!init)
8125 return;
8128 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8129 && !DECL_FUNCTION_SCOPE_P (decl))
8131 if (init)
8132 error ("non-local variable %qD declared %<__thread%> "
8133 "needs dynamic initialization", decl);
8134 else
8135 error ("non-local variable %qD declared %<__thread%> "
8136 "has a non-trivial destructor", decl);
8137 static bool informed;
8138 if (!informed)
8140 inform (DECL_SOURCE_LOCATION (decl),
8141 "C++11 %<thread_local%> allows dynamic initialization "
8142 "and destruction");
8143 informed = true;
8145 return;
8148 if (DECL_FUNCTION_SCOPE_P (decl))
8150 /* Emit code to perform this initialization but once. */
8151 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8152 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8153 tree guard, guard_addr;
8154 tree flag, begin;
8155 /* We don't need thread-safety code for thread-local vars. */
8156 bool thread_guard = (flag_threadsafe_statics
8157 && !CP_DECL_THREAD_LOCAL_P (decl));
8159 /* Emit code to perform this initialization but once. This code
8160 looks like:
8162 static <type> guard;
8163 if (!__atomic_load (guard.first_byte)) {
8164 if (__cxa_guard_acquire (&guard)) {
8165 bool flag = false;
8166 try {
8167 // Do initialization.
8168 flag = true; __cxa_guard_release (&guard);
8169 // Register variable for destruction at end of program.
8170 } catch {
8171 if (!flag) __cxa_guard_abort (&guard);
8176 Note that the `flag' variable is only set to 1 *after* the
8177 initialization is complete. This ensures that an exception,
8178 thrown during the construction, will cause the variable to
8179 reinitialized when we pass through this code again, as per:
8181 [stmt.dcl]
8183 If the initialization exits by throwing an exception, the
8184 initialization is not complete, so it will be tried again
8185 the next time control enters the declaration.
8187 This process should be thread-safe, too; multiple threads
8188 should not be able to initialize the variable more than
8189 once. */
8191 /* Create the guard variable. */
8192 guard = get_guard (decl);
8194 /* Begin the conditional initialization. */
8195 if_stmt = begin_if_stmt ();
8197 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8198 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8200 if (thread_guard)
8202 tree vfntype = NULL_TREE;
8203 tree acquire_name, release_name, abort_name;
8204 tree acquire_fn, release_fn, abort_fn;
8205 guard_addr = build_address (guard);
8207 acquire_name = get_identifier ("__cxa_guard_acquire");
8208 release_name = get_identifier ("__cxa_guard_release");
8209 abort_name = get_identifier ("__cxa_guard_abort");
8210 acquire_fn = get_global_binding (acquire_name);
8211 release_fn = get_global_binding (release_name);
8212 abort_fn = get_global_binding (abort_name);
8213 if (!acquire_fn)
8214 acquire_fn = push_library_fn
8215 (acquire_name, build_function_type_list (integer_type_node,
8216 TREE_TYPE (guard_addr),
8217 NULL_TREE),
8218 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8219 if (!release_fn || !abort_fn)
8220 vfntype = build_function_type_list (void_type_node,
8221 TREE_TYPE (guard_addr),
8222 NULL_TREE);
8223 if (!release_fn)
8224 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8225 ECF_NOTHROW | ECF_LEAF);
8226 if (!abort_fn)
8227 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8228 ECF_NOTHROW | ECF_LEAF);
8230 inner_if_stmt = begin_if_stmt ();
8231 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8232 inner_if_stmt);
8234 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8235 begin = get_target_expr (boolean_false_node);
8236 flag = TARGET_EXPR_SLOT (begin);
8238 TARGET_EXPR_CLEANUP (begin)
8239 = build3 (COND_EXPR, void_type_node, flag,
8240 void_node,
8241 build_call_n (abort_fn, 1, guard_addr));
8242 CLEANUP_EH_ONLY (begin) = 1;
8244 /* Do the initialization itself. */
8245 init = add_stmt_to_compound (begin, init);
8246 init = add_stmt_to_compound
8247 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8248 init = add_stmt_to_compound
8249 (init, build_call_n (release_fn, 1, guard_addr));
8251 else
8252 init = add_stmt_to_compound (init, set_guard (guard));
8254 /* Use atexit to register a function for destroying this static
8255 variable. */
8256 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8258 finish_expr_stmt (init);
8260 if (thread_guard)
8262 finish_compound_stmt (inner_then_clause);
8263 finish_then_clause (inner_if_stmt);
8264 finish_if_stmt (inner_if_stmt);
8267 finish_compound_stmt (then_clause);
8268 finish_then_clause (if_stmt);
8269 finish_if_stmt (if_stmt);
8271 else if (CP_DECL_THREAD_LOCAL_P (decl))
8272 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8273 else
8274 static_aggregates = tree_cons (init, decl, static_aggregates);
8278 /* Make TYPE a complete type based on INITIAL_VALUE.
8279 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8280 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8281 3 if the initializer list is empty (in pedantic mode). */
8284 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8286 int failure;
8287 tree type, elt_type;
8289 /* Don't get confused by a CONSTRUCTOR for some other type. */
8290 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8291 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8292 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8293 return 1;
8295 if (initial_value)
8297 unsigned HOST_WIDE_INT i;
8298 tree value;
8300 /* An array of character type can be initialized from a
8301 brace-enclosed string constant.
8303 FIXME: this code is duplicated from reshape_init. Probably
8304 we should just call reshape_init here? */
8305 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8306 && TREE_CODE (initial_value) == CONSTRUCTOR
8307 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8309 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8310 tree value = (*v)[0].value;
8312 if (TREE_CODE (value) == STRING_CST
8313 && v->length () == 1)
8314 initial_value = value;
8317 /* If any of the elements are parameter packs, we can't actually
8318 complete this type now because the array size is dependent. */
8319 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8321 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8322 i, value)
8324 if (PACK_EXPANSION_P (value))
8325 return 0;
8330 failure = complete_array_type (ptype, initial_value, do_default);
8332 /* We can create the array before the element type is complete, which
8333 means that we didn't have these two bits set in the original type
8334 either. In completing the type, we are expected to propagate these
8335 bits. See also complete_type which does the same thing for arrays
8336 of fixed size. */
8337 type = *ptype;
8338 if (type != error_mark_node && TYPE_DOMAIN (type))
8340 elt_type = TREE_TYPE (type);
8341 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8342 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8343 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8346 return failure;
8349 /* As above, but either give an error or reject zero-size arrays, depending
8350 on COMPLAIN. */
8353 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8354 bool do_default, tsubst_flags_t complain)
8356 int failure;
8357 bool sfinae = !(complain & tf_error);
8358 /* In SFINAE context we can't be lenient about zero-size arrays. */
8359 if (sfinae)
8360 ++pedantic;
8361 failure = cp_complete_array_type (ptype, initial_value, do_default);
8362 if (sfinae)
8363 --pedantic;
8364 if (failure)
8366 if (sfinae)
8367 /* Not an error. */;
8368 else if (failure == 1)
8369 error ("initializer fails to determine size of %qT", *ptype);
8370 else if (failure == 2)
8372 if (do_default)
8373 error ("array size missing in %qT", *ptype);
8375 else if (failure == 3)
8376 error ("zero-size array %qT", *ptype);
8377 *ptype = error_mark_node;
8379 return failure;
8382 /* Return zero if something is declared to be a member of type
8383 CTYPE when in the context of CUR_TYPE. STRING is the error
8384 message to print in that case. Otherwise, quietly return 1. */
8386 static int
8387 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8389 if (ctype && ctype != cur_type)
8391 if (flags == DTOR_FLAG)
8392 error ("destructor for alien class %qT cannot be a member", ctype);
8393 else
8394 error ("constructor for alien class %qT cannot be a member", ctype);
8395 return 0;
8397 return 1;
8400 /* Subroutine of `grokdeclarator'. */
8402 /* Generate errors possibly applicable for a given set of specifiers.
8403 This is for ARM $7.1.2. */
8405 static void
8406 bad_specifiers (tree object,
8407 enum bad_spec_place type,
8408 int virtualp,
8409 int quals,
8410 int inlinep,
8411 int friendp,
8412 int raises)
8414 switch (type)
8416 case BSP_VAR:
8417 if (virtualp)
8418 error ("%qD declared as a %<virtual%> variable", object);
8419 if (quals)
8420 error ("%<const%> and %<volatile%> function specifiers on "
8421 "%qD invalid in variable declaration", object);
8422 break;
8423 case BSP_PARM:
8424 if (virtualp)
8425 error ("%qD declared as a %<virtual%> parameter", object);
8426 if (inlinep)
8427 error ("%qD declared as an %<inline%> parameter", object);
8428 if (quals)
8429 error ("%<const%> and %<volatile%> function specifiers on "
8430 "%qD invalid in parameter declaration", object);
8431 break;
8432 case BSP_TYPE:
8433 if (virtualp)
8434 error ("%qD declared as a %<virtual%> type", object);
8435 if (inlinep)
8436 error ("%qD declared as an %<inline%> type", object);
8437 if (quals)
8438 error ("%<const%> and %<volatile%> function specifiers on "
8439 "%qD invalid in type declaration", object);
8440 break;
8441 case BSP_FIELD:
8442 if (virtualp)
8443 error ("%qD declared as a %<virtual%> field", object);
8444 if (inlinep)
8445 error ("%qD declared as an %<inline%> field", object);
8446 if (quals)
8447 error ("%<const%> and %<volatile%> function specifiers on "
8448 "%qD invalid in field declaration", object);
8449 break;
8450 default:
8451 gcc_unreachable();
8453 if (friendp)
8454 error ("%q+D declared as a friend", object);
8455 if (raises
8456 && !flag_noexcept_type
8457 && (TREE_CODE (object) == TYPE_DECL
8458 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8459 && !TYPE_REFFN_P (TREE_TYPE (object))
8460 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8461 error ("%q+D declared with an exception specification", object);
8464 /* DECL is a member function or static data member and is presently
8465 being defined. Check that the definition is taking place in a
8466 valid namespace. */
8468 static void
8469 check_class_member_definition_namespace (tree decl)
8471 /* These checks only apply to member functions and static data
8472 members. */
8473 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8474 /* We check for problems with specializations in pt.c in
8475 check_specialization_namespace, where we can issue better
8476 diagnostics. */
8477 if (processing_specialization)
8478 return;
8479 /* We check this in check_explicit_instantiation_namespace. */
8480 if (processing_explicit_instantiation)
8481 return;
8482 /* [class.mfct]
8484 A member function definition that appears outside of the
8485 class definition shall appear in a namespace scope enclosing
8486 the class definition.
8488 [class.static.data]
8490 The definition for a static data member shall appear in a
8491 namespace scope enclosing the member's class definition. */
8492 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8493 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8494 decl, DECL_CONTEXT (decl));
8497 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8498 METHOD_TYPE for a non-static member function; QUALS are the
8499 cv-qualifiers that apply to the function. */
8501 tree
8502 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8504 tree this_type;
8505 tree qual_type;
8506 tree parm;
8507 cp_cv_quals this_quals;
8509 if (CLASS_TYPE_P (type))
8511 this_type
8512 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8513 this_type = build_pointer_type (this_type);
8515 else
8516 this_type = type_of_this_parm (type);
8517 /* The `this' parameter is implicitly `const'; it cannot be
8518 assigned to. */
8519 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8520 qual_type = cp_build_qualified_type (this_type, this_quals);
8521 parm = build_artificial_parm (fn, this_identifier, qual_type);
8522 cp_apply_type_quals_to_decl (this_quals, parm);
8523 return parm;
8526 /* DECL is a static member function. Complain if it was declared
8527 with function-cv-quals. */
8529 static void
8530 check_static_quals (tree decl, cp_cv_quals quals)
8532 if (quals != TYPE_UNQUALIFIED)
8533 error ("static member function %q#D declared with type qualifiers",
8534 decl);
8537 // Check that FN takes no arguments and returns bool.
8538 static void
8539 check_concept_fn (tree fn)
8541 // A constraint is nullary.
8542 if (DECL_ARGUMENTS (fn))
8543 error ("concept %q#D declared with function parameters", fn);
8545 // The declared return type of the concept shall be bool, and
8546 // it shall not be deduced from it definition.
8547 tree type = TREE_TYPE (TREE_TYPE (fn));
8548 if (is_auto (type))
8549 error ("concept %q#D declared with a deduced return type", fn);
8550 else if (type != boolean_type_node)
8551 error ("concept %q#D with non-%<bool%> return type %qT", fn, type);
8554 /* Helper function. Replace the temporary this parameter injected
8555 during cp_finish_omp_declare_simd with the real this parameter. */
8557 static tree
8558 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8560 tree this_parm = (tree) data;
8561 if (TREE_CODE (*tp) == PARM_DECL
8562 && DECL_NAME (*tp) == this_identifier
8563 && *tp != this_parm)
8564 *tp = this_parm;
8565 else if (TYPE_P (*tp))
8566 *walk_subtrees = 0;
8567 return NULL_TREE;
8570 /* CTYPE is class type, or null if non-class.
8571 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8572 or METHOD_TYPE.
8573 DECLARATOR is the function's name.
8574 PARMS is a chain of PARM_DECLs for the function.
8575 VIRTUALP is truthvalue of whether the function is virtual or not.
8576 FLAGS are to be passed through to `grokclassfn'.
8577 QUALS are qualifiers indicating whether the function is `const'
8578 or `volatile'.
8579 RAISES is a list of exceptions that this function can raise.
8580 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8581 not look, and -1 if we should not call `grokclassfn' at all.
8583 SFK is the kind of special function (if any) for the new function.
8585 Returns `NULL_TREE' if something goes wrong, after issuing
8586 applicable error messages. */
8588 static tree
8589 grokfndecl (tree ctype,
8590 tree type,
8591 tree declarator,
8592 tree parms,
8593 tree orig_declarator,
8594 tree decl_reqs,
8595 int virtualp,
8596 enum overload_flags flags,
8597 cp_cv_quals quals,
8598 cp_ref_qualifier rqual,
8599 tree raises,
8600 int check,
8601 int friendp,
8602 int publicp,
8603 int inlinep,
8604 bool deletedp,
8605 special_function_kind sfk,
8606 bool funcdef_flag,
8607 bool late_return_type_p,
8608 int template_count,
8609 tree in_namespace,
8610 tree* attrlist,
8611 location_t location)
8613 tree decl;
8614 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8615 tree t;
8617 // Was the concept specifier present?
8618 bool concept_p = inlinep & 4;
8620 // Concept declarations must have a corresponding definition.
8621 if (concept_p && !funcdef_flag)
8623 error ("concept %qD has no definition", declarator);
8624 return NULL_TREE;
8627 type = build_cp_fntype_variant (type, rqual, raises, late_return_type_p);
8629 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8631 /* Set the constraints on the declaration. */
8632 if (flag_concepts)
8634 tree tmpl_reqs = NULL_TREE;
8635 if (processing_template_decl > template_class_depth (ctype))
8636 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8638 /* Adjust the required expression into a constraint. */
8639 if (decl_reqs)
8640 decl_reqs = normalize_expression (decl_reqs);
8642 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8643 set_constraints (decl, ci);
8646 /* If we have an explicit location, use it, otherwise use whatever
8647 build_lang_decl used (probably input_location). */
8648 if (location != UNKNOWN_LOCATION)
8649 DECL_SOURCE_LOCATION (decl) = location;
8651 if (TREE_CODE (type) == METHOD_TYPE)
8653 tree parm = build_this_parm (decl, type, quals);
8654 DECL_CHAIN (parm) = parms;
8655 parms = parm;
8657 /* Allocate space to hold the vptr bit if needed. */
8658 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8661 DECL_ARGUMENTS (decl) = parms;
8662 for (t = parms; t; t = DECL_CHAIN (t))
8663 DECL_CONTEXT (t) = decl;
8665 /* Propagate volatile out from type to decl. */
8666 if (TYPE_VOLATILE (type))
8667 TREE_THIS_VOLATILE (decl) = 1;
8669 /* Setup decl according to sfk. */
8670 switch (sfk)
8672 case sfk_constructor:
8673 case sfk_copy_constructor:
8674 case sfk_move_constructor:
8675 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8676 DECL_NAME (decl) = ctor_identifier;
8677 break;
8678 case sfk_destructor:
8679 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8680 DECL_NAME (decl) = dtor_identifier;
8681 break;
8682 default:
8683 break;
8686 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8688 if (funcdef_flag)
8689 error_at (location,
8690 "defining explicit specialization %qD in friend declaration",
8691 orig_declarator);
8692 else
8694 tree fns = TREE_OPERAND (orig_declarator, 0);
8695 tree args = TREE_OPERAND (orig_declarator, 1);
8697 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8699 /* Something like `template <class T> friend void f<T>()'. */
8700 error_at (location,
8701 "invalid use of template-id %qD in declaration "
8702 "of primary template",
8703 orig_declarator);
8704 return NULL_TREE;
8708 /* A friend declaration of the form friend void f<>(). Record
8709 the information in the TEMPLATE_ID_EXPR. */
8710 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8712 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8713 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8715 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8716 if (TREE_PURPOSE (t)
8717 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8719 error ("default arguments are not allowed in declaration "
8720 "of friend template specialization %qD",
8721 decl);
8722 return NULL_TREE;
8725 if (inlinep & 1)
8727 error ("%<inline%> is not allowed in declaration of friend "
8728 "template specialization %qD",
8729 decl);
8730 return NULL_TREE;
8735 /* If this decl has namespace scope, set that up. */
8736 if (in_namespace)
8737 set_decl_namespace (decl, in_namespace, friendp);
8738 else if (!ctype)
8739 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8741 /* `main' and builtins have implicit 'C' linkage. */
8742 if (ctype == NULL_TREE
8743 && DECL_FILE_SCOPE_P (decl)
8744 && current_lang_name == lang_name_cplusplus
8745 && (MAIN_NAME_P (declarator)
8746 || (IDENTIFIER_LENGTH (declarator) > 10
8747 && IDENTIFIER_POINTER (declarator)[0] == '_'
8748 && IDENTIFIER_POINTER (declarator)[1] == '_'
8749 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8750 "builtin_", 8) == 0)
8751 || (targetcm.cxx_implicit_extern_c
8752 && (targetcm.cxx_implicit_extern_c
8753 (IDENTIFIER_POINTER (declarator))))))
8754 SET_DECL_LANGUAGE (decl, lang_c);
8756 /* Should probably propagate const out from type to decl I bet (mrs). */
8757 if (staticp)
8759 DECL_STATIC_FUNCTION_P (decl) = 1;
8760 DECL_CONTEXT (decl) = ctype;
8763 if (deletedp)
8764 DECL_DELETED_FN (decl) = 1;
8766 if (ctype)
8768 DECL_CONTEXT (decl) = ctype;
8769 if (funcdef_flag)
8770 check_class_member_definition_namespace (decl);
8773 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8775 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8776 error ("cannot declare %<::main%> to be a template");
8777 if (inlinep & 1)
8778 error ("cannot declare %<::main%> to be inline");
8779 if (inlinep & 2)
8780 error ("cannot declare %<::main%> to be %<constexpr%>");
8781 if (!publicp)
8782 error ("cannot declare %<::main%> to be static");
8783 inlinep = 0;
8784 publicp = 1;
8787 /* Members of anonymous types and local classes have no linkage; make
8788 them internal. If a typedef is made later, this will be changed. */
8789 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8790 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8791 publicp = 0;
8793 if (publicp && cxx_dialect == cxx98)
8795 /* [basic.link]: A name with no linkage (notably, the name of a class
8796 or enumeration declared in a local scope) shall not be used to
8797 declare an entity with linkage.
8799 DR 757 relaxes this restriction for C++0x. */
8800 no_linkage_error (decl);
8803 TREE_PUBLIC (decl) = publicp;
8804 if (! publicp)
8806 DECL_INTERFACE_KNOWN (decl) = 1;
8807 DECL_NOT_REALLY_EXTERN (decl) = 1;
8810 /* If the declaration was declared inline, mark it as such. */
8811 if (inlinep)
8813 DECL_DECLARED_INLINE_P (decl) = 1;
8814 if (publicp)
8815 DECL_COMDAT (decl) = 1;
8817 if (inlinep & 2)
8818 DECL_DECLARED_CONSTEXPR_P (decl) = true;
8820 // If the concept declaration specifier was found, check
8821 // that the declaration satisfies the necessary requirements.
8822 if (concept_p)
8824 DECL_DECLARED_CONCEPT_P (decl) = true;
8825 check_concept_fn (decl);
8828 DECL_EXTERNAL (decl) = 1;
8829 if (TREE_CODE (type) == FUNCTION_TYPE)
8831 if (quals || rqual)
8832 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8833 TYPE_UNQUALIFIED,
8834 REF_QUAL_NONE);
8836 if (quals)
8838 error (ctype
8839 ? G_("static member function %qD cannot have cv-qualifier")
8840 : G_("non-member function %qD cannot have cv-qualifier"),
8841 decl);
8842 quals = TYPE_UNQUALIFIED;
8845 if (rqual)
8847 error (ctype
8848 ? G_("static member function %qD cannot have ref-qualifier")
8849 : G_("non-member function %qD cannot have ref-qualifier"),
8850 decl);
8851 rqual = REF_QUAL_NONE;
8855 if (deduction_guide_p (decl))
8857 if (!DECL_NAMESPACE_SCOPE_P (decl))
8859 error_at (location, "deduction guide %qD must be declared at "
8860 "namespace scope", decl);
8861 return NULL_TREE;
8863 if (funcdef_flag)
8864 error_at (location,
8865 "deduction guide %qD must not have a function body", decl);
8867 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
8868 && !grok_op_properties (decl, /*complain=*/true))
8869 return NULL_TREE;
8870 else if (UDLIT_OPER_P (DECL_NAME (decl)))
8872 bool long_long_unsigned_p;
8873 bool long_double_p;
8874 const char *suffix = NULL;
8875 /* [over.literal]/6: Literal operators shall not have C linkage. */
8876 if (DECL_LANGUAGE (decl) == lang_c)
8878 error_at (location, "literal operator with C linkage");
8879 maybe_show_extern_c_location ();
8880 return NULL_TREE;
8883 if (DECL_NAMESPACE_SCOPE_P (decl))
8885 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8886 &long_double_p))
8888 error_at (location, "%qD has invalid argument list", decl);
8889 return NULL_TREE;
8892 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
8893 if (long_long_unsigned_p)
8895 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
8896 warning_at (location, 0, "integer suffix %qs"
8897 " shadowed by implementation", suffix);
8899 else if (long_double_p)
8901 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
8902 warning_at (location, 0, "floating point suffix %qs"
8903 " shadowed by implementation", suffix);
8905 /* 17.6.3.3.5 */
8906 if (suffix[0] != '_'
8907 && !in_system_header_at (location)
8908 && !current_function_decl && !(friendp && !funcdef_flag))
8909 warning_at (location, OPT_Wliteral_suffix,
8910 "literal operator suffixes not preceded by %<_%>"
8911 " are reserved for future standardization");
8913 else
8915 error_at (location, "%qD must be a non-member function", decl);
8916 return NULL_TREE;
8920 if (funcdef_flag)
8921 /* Make the init_value nonzero so pushdecl knows this is not
8922 tentative. error_mark_node is replaced later with the BLOCK. */
8923 DECL_INITIAL (decl) = error_mark_node;
8925 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8926 TREE_NOTHROW (decl) = 1;
8928 if (flag_openmp || flag_openmp_simd)
8930 /* Adjust "omp declare simd" attributes. */
8931 tree ods = lookup_attribute ("omp declare simd", *attrlist);
8932 if (ods)
8934 tree attr;
8935 for (attr = ods; attr;
8936 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
8938 if (TREE_CODE (type) == METHOD_TYPE)
8939 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
8940 DECL_ARGUMENTS (decl), NULL);
8941 if (TREE_VALUE (attr) != NULL_TREE)
8943 tree cl = TREE_VALUE (TREE_VALUE (attr));
8944 cl = c_omp_declare_simd_clauses_to_numbers
8945 (DECL_ARGUMENTS (decl), cl);
8946 if (cl)
8947 TREE_VALUE (TREE_VALUE (attr)) = cl;
8948 else
8949 TREE_VALUE (attr) = NULL_TREE;
8955 /* Caller will do the rest of this. */
8956 if (check < 0)
8957 return decl;
8959 if (ctype != NULL_TREE)
8960 grokclassfn (ctype, decl, flags);
8962 /* 12.4/3 */
8963 if (cxx_dialect >= cxx11
8964 && DECL_DESTRUCTOR_P (decl)
8965 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
8966 && !processing_template_decl)
8967 deduce_noexcept_on_destructor (decl);
8969 decl = check_explicit_specialization (orig_declarator, decl,
8970 template_count,
8971 2 * funcdef_flag +
8972 4 * (friendp != 0) +
8973 8 * concept_p,
8974 *attrlist);
8975 if (decl == error_mark_node)
8976 return NULL_TREE;
8978 if (DECL_STATIC_FUNCTION_P (decl))
8979 check_static_quals (decl, quals);
8981 if (attrlist)
8983 cplus_decl_attributes (&decl, *attrlist, 0);
8984 *attrlist = NULL_TREE;
8987 /* Check main's type after attributes have been applied. */
8988 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8990 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8991 integer_type_node))
8993 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
8994 tree newtype;
8995 error ("%<::main%> must return %<int%>");
8996 newtype = build_function_type (integer_type_node, oldtypeargs);
8997 TREE_TYPE (decl) = newtype;
8999 if (warn_main)
9000 check_main_parameter_types (decl);
9003 if (ctype != NULL_TREE && check)
9005 tree old_decl = check_classfn (ctype, decl,
9006 (processing_template_decl
9007 > template_class_depth (ctype))
9008 ? current_template_parms
9009 : NULL_TREE);
9011 if (old_decl == error_mark_node)
9012 return NULL_TREE;
9014 if (old_decl)
9016 tree ok;
9017 tree pushed_scope;
9019 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
9020 /* Because grokfndecl is always supposed to return a
9021 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9022 here. We depend on our callers to figure out that its
9023 really a template that's being returned. */
9024 old_decl = DECL_TEMPLATE_RESULT (old_decl);
9026 if (DECL_STATIC_FUNCTION_P (old_decl)
9027 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9029 /* Remove the `this' parm added by grokclassfn. */
9030 revert_static_member_fn (decl);
9031 check_static_quals (decl, quals);
9033 if (DECL_ARTIFICIAL (old_decl))
9035 error ("definition of implicitly-declared %qD", old_decl);
9036 return NULL_TREE;
9038 else if (DECL_DEFAULTED_FN (old_decl))
9040 error ("definition of explicitly-defaulted %q+D", decl);
9041 inform (DECL_SOURCE_LOCATION (old_decl),
9042 "%q#D explicitly defaulted here", old_decl);
9043 return NULL_TREE;
9046 /* Since we've smashed OLD_DECL to its
9047 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9048 if (TREE_CODE (decl) == TEMPLATE_DECL)
9049 decl = DECL_TEMPLATE_RESULT (decl);
9051 /* Attempt to merge the declarations. This can fail, in
9052 the case of some invalid specialization declarations. */
9053 pushed_scope = push_scope (ctype);
9054 ok = duplicate_decls (decl, old_decl, friendp);
9055 if (pushed_scope)
9056 pop_scope (pushed_scope);
9057 if (!ok)
9059 error ("no %q#D member function declared in class %qT",
9060 decl, ctype);
9061 return NULL_TREE;
9063 if (ok == error_mark_node)
9064 return NULL_TREE;
9065 return old_decl;
9069 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9070 return NULL_TREE;
9072 if (ctype == NULL_TREE || check)
9073 return decl;
9075 if (virtualp)
9076 DECL_VIRTUAL_P (decl) = 1;
9078 return decl;
9081 /* decl is a FUNCTION_DECL.
9082 specifiers are the parsed virt-specifiers.
9084 Set flags to reflect the virt-specifiers.
9086 Returns decl. */
9088 static tree
9089 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
9091 if (decl == NULL_TREE)
9092 return decl;
9093 if (specifiers & VIRT_SPEC_OVERRIDE)
9094 DECL_OVERRIDE_P (decl) = 1;
9095 if (specifiers & VIRT_SPEC_FINAL)
9096 DECL_FINAL_P (decl) = 1;
9097 return decl;
9100 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
9101 the linkage that DECL will receive in the object file. */
9103 static void
9104 set_linkage_for_static_data_member (tree decl)
9106 /* A static data member always has static storage duration and
9107 external linkage. Note that static data members are forbidden in
9108 local classes -- the only situation in which a class has
9109 non-external linkage. */
9110 TREE_PUBLIC (decl) = 1;
9111 TREE_STATIC (decl) = 1;
9112 /* For non-template classes, static data members are always put
9113 out in exactly those files where they are defined, just as
9114 with ordinary namespace-scope variables. */
9115 if (!processing_template_decl)
9116 DECL_INTERFACE_KNOWN (decl) = 1;
9119 /* Create a VAR_DECL named NAME with the indicated TYPE.
9121 If SCOPE is non-NULL, it is the class type or namespace containing
9122 the variable. If SCOPE is NULL, the variable should is created in
9123 the innermost enclosing scope. */
9125 static tree
9126 grokvardecl (tree type,
9127 tree name,
9128 tree orig_declarator,
9129 const cp_decl_specifier_seq *declspecs,
9130 int initialized,
9131 int type_quals,
9132 int inlinep,
9133 bool conceptp,
9134 int template_count,
9135 tree scope)
9137 tree decl;
9138 tree explicit_scope;
9140 gcc_assert (!name || identifier_p (name));
9142 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9143 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9145 /* Compute the scope in which to place the variable, but remember
9146 whether or not that scope was explicitly specified by the user. */
9147 explicit_scope = scope;
9148 if (!scope)
9150 /* An explicit "extern" specifier indicates a namespace-scope
9151 variable. */
9152 if (declspecs->storage_class == sc_extern)
9153 scope = current_decl_namespace ();
9154 else if (!at_function_scope_p ())
9155 scope = current_scope ();
9158 if (scope
9159 && (/* If the variable is a namespace-scope variable declared in a
9160 template, we need DECL_LANG_SPECIFIC. */
9161 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9162 /* Similarly for namespace-scope variables with language linkage
9163 other than C++. */
9164 || (TREE_CODE (scope) == NAMESPACE_DECL
9165 && current_lang_name != lang_name_cplusplus)
9166 /* Similarly for static data members. */
9167 || TYPE_P (scope)
9168 /* Similarly for explicit specializations. */
9169 || (orig_declarator
9170 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9171 decl = build_lang_decl (VAR_DECL, name, type);
9172 else
9173 decl = build_decl (input_location, VAR_DECL, name, type);
9175 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9176 set_decl_namespace (decl, explicit_scope, 0);
9177 else
9178 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9180 if (declspecs->storage_class == sc_extern)
9182 DECL_THIS_EXTERN (decl) = 1;
9183 DECL_EXTERNAL (decl) = !initialized;
9186 if (DECL_CLASS_SCOPE_P (decl))
9188 set_linkage_for_static_data_member (decl);
9189 /* This function is only called with out-of-class definitions. */
9190 DECL_EXTERNAL (decl) = 0;
9191 check_class_member_definition_namespace (decl);
9193 /* At top level, either `static' or no s.c. makes a definition
9194 (perhaps tentative), and absence of `static' makes it public. */
9195 else if (toplevel_bindings_p ())
9197 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9198 && (DECL_THIS_EXTERN (decl)
9199 || ! constp
9200 || volatilep
9201 || inlinep));
9202 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9204 /* Not at top level, only `static' makes a static definition. */
9205 else
9207 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9208 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9211 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9213 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9215 CP_DECL_THREAD_LOCAL_P (decl) = true;
9216 if (!processing_template_decl)
9217 set_decl_tls_model (decl, decl_default_tls_model (decl));
9219 if (declspecs->gnu_thread_keyword_p)
9220 SET_DECL_GNU_TLS_P (decl);
9223 /* If the type of the decl has no linkage, make sure that we'll
9224 notice that in mark_used. */
9225 if (cxx_dialect > cxx98
9226 && decl_linkage (decl) != lk_none
9227 && DECL_LANG_SPECIFIC (decl) == NULL
9228 && !DECL_EXTERN_C_P (decl)
9229 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9230 retrofit_lang_decl (decl);
9232 if (TREE_PUBLIC (decl))
9234 /* [basic.link]: A name with no linkage (notably, the name of a class
9235 or enumeration declared in a local scope) shall not be used to
9236 declare an entity with linkage.
9238 DR 757 relaxes this restriction for C++0x. */
9239 if (cxx_dialect < cxx11)
9240 no_linkage_error (decl);
9242 else
9243 DECL_INTERFACE_KNOWN (decl) = 1;
9245 if (DECL_NAME (decl)
9246 && MAIN_NAME_P (DECL_NAME (decl))
9247 && scope == global_namespace)
9248 error ("cannot declare %<::main%> to be a global variable");
9250 /* Check that the variable can be safely declared as a concept.
9251 Note that this also forbids explicit specializations. */
9252 if (conceptp)
9254 if (!processing_template_decl)
9256 error ("a non-template variable cannot be %<concept%>");
9257 return NULL_TREE;
9259 else
9260 DECL_DECLARED_CONCEPT_P (decl) = true;
9261 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9262 error_at (declspecs->locations[ds_type_spec],
9263 "concept must have type %<bool%>");
9265 else if (flag_concepts
9266 && processing_template_decl > template_class_depth (scope))
9268 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9269 tree ci = build_constraints (reqs, NULL_TREE);
9270 set_constraints (decl, ci);
9273 // Handle explicit specializations and instantiations of variable templates.
9274 if (orig_declarator)
9275 decl = check_explicit_specialization (orig_declarator, decl,
9276 template_count, conceptp * 8);
9278 return decl != error_mark_node ? decl : NULL_TREE;
9281 /* Create and return a canonical pointer to member function type, for
9282 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9284 tree
9285 build_ptrmemfunc_type (tree type)
9287 tree field, fields;
9288 tree t;
9290 if (type == error_mark_node)
9291 return type;
9293 /* Make sure that we always have the unqualified pointer-to-member
9294 type first. */
9295 if (cp_cv_quals quals = cp_type_quals (type))
9297 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9298 return cp_build_qualified_type (unqual, quals);
9301 /* If a canonical type already exists for this type, use it. We use
9302 this method instead of type_hash_canon, because it only does a
9303 simple equality check on the list of field members. */
9305 t = TYPE_PTRMEMFUNC_TYPE (type);
9306 if (t)
9307 return t;
9309 t = make_node (RECORD_TYPE);
9311 /* Let the front end know this is a pointer to member function. */
9312 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9314 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9315 fields = field;
9317 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9318 delta_type_node);
9319 DECL_CHAIN (field) = fields;
9320 fields = field;
9322 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9324 /* Zap out the name so that the back end will give us the debugging
9325 information for this anonymous RECORD_TYPE. */
9326 TYPE_NAME (t) = NULL_TREE;
9328 /* Cache this pointer-to-member type so that we can find it again
9329 later. */
9330 TYPE_PTRMEMFUNC_TYPE (type) = t;
9332 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9333 SET_TYPE_STRUCTURAL_EQUALITY (t);
9334 else if (TYPE_CANONICAL (type) != type)
9335 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9337 return t;
9340 /* Create and return a pointer to data member type. */
9342 tree
9343 build_ptrmem_type (tree class_type, tree member_type)
9345 if (TREE_CODE (member_type) == METHOD_TYPE)
9347 cp_cv_quals quals = type_memfn_quals (member_type);
9348 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9349 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9350 return build_ptrmemfunc_type (build_pointer_type (member_type));
9352 else
9354 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9355 return build_offset_type (class_type, member_type);
9359 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9360 Check to see that the definition is valid. Issue appropriate error
9361 messages. Return 1 if the definition is particularly bad, or 0
9362 otherwise. */
9364 static int
9365 check_static_variable_definition (tree decl, tree type)
9367 /* Avoid redundant diagnostics on out-of-class definitions. */
9368 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9369 return 0;
9370 /* Can't check yet if we don't know the type. */
9371 if (dependent_type_p (type))
9372 return 0;
9373 /* If DECL is declared constexpr, we'll do the appropriate checks
9374 in check_initializer. Similarly for inline static data members. */
9375 if (DECL_P (decl)
9376 && (DECL_DECLARED_CONSTEXPR_P (decl)
9377 || undeduced_auto_decl (decl)
9378 || DECL_VAR_DECLARED_INLINE_P (decl)))
9379 return 0;
9380 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9382 if (!COMPLETE_TYPE_P (type))
9383 error_at (DECL_SOURCE_LOCATION (decl),
9384 "in-class initialization of static data member %q#D of "
9385 "incomplete type", decl);
9386 else if (literal_type_p (type))
9387 permerror (DECL_SOURCE_LOCATION (decl),
9388 "%<constexpr%> needed for in-class initialization of "
9389 "static data member %q#D of non-integral type", decl);
9390 else
9391 error_at (DECL_SOURCE_LOCATION (decl),
9392 "in-class initialization of static data member %q#D of "
9393 "non-literal type", decl);
9394 return 1;
9397 /* Motion 10 at San Diego: If a static const integral data member is
9398 initialized with an integral constant expression, the initializer
9399 may appear either in the declaration (within the class), or in
9400 the definition, but not both. If it appears in the class, the
9401 member is a member constant. The file-scope definition is always
9402 required. */
9403 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9405 error_at (DECL_SOURCE_LOCATION (decl),
9406 "invalid in-class initialization of static data member "
9407 "of non-integral type %qT",
9408 type);
9409 return 1;
9411 else if (!CP_TYPE_CONST_P (type))
9412 error_at (DECL_SOURCE_LOCATION (decl),
9413 "ISO C++ forbids in-class initialization of non-const "
9414 "static member %qD",
9415 decl);
9416 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9417 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9418 "ISO C++ forbids initialization of member constant "
9419 "%qD of non-integral type %qT", decl, type);
9421 return 0;
9424 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9425 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9426 expressions out into temporary variables so that walk_tree doesn't
9427 step into them (c++/15764). */
9429 static tree
9430 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9432 hash_set<tree> *pset = (hash_set<tree> *)data;
9433 tree expr = *expr_p;
9434 if (TREE_CODE (expr) == SAVE_EXPR)
9436 tree op = TREE_OPERAND (expr, 0);
9437 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9438 if (TREE_SIDE_EFFECTS (op))
9439 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9440 *walk_subtrees = 0;
9442 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9443 *walk_subtrees = 0;
9444 return NULL;
9447 /* Entry point for the above. */
9449 static void
9450 stabilize_vla_size (tree size)
9452 hash_set<tree> pset;
9453 /* Break out any function calls into temporary variables. */
9454 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9457 /* Reduce a SIZEOF_EXPR to its value. */
9459 tree
9460 fold_sizeof_expr (tree t)
9462 tree r;
9463 if (SIZEOF_EXPR_TYPE_P (t))
9464 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9465 SIZEOF_EXPR, false, false);
9466 else if (TYPE_P (TREE_OPERAND (t, 0)))
9467 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9468 false, false);
9469 else
9470 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9471 false);
9472 if (r == error_mark_node)
9473 r = size_one_node;
9474 return r;
9477 /* Given the SIZE (i.e., number of elements) in an array, compute
9478 an appropriate index type for the array. If non-NULL, NAME is
9479 the name of the entity being declared. */
9481 tree
9482 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9484 tree itype;
9485 tree osize = size;
9487 if (error_operand_p (size))
9488 return error_mark_node;
9490 if (!type_dependent_expression_p (size))
9492 osize = size = mark_rvalue_use (size);
9494 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9495 && TREE_SIDE_EFFECTS (size))
9496 /* In C++98, we mark a non-constant array bound with a magic
9497 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9498 else
9500 size = instantiate_non_dependent_expr_sfinae (size, complain);
9501 size = build_converted_constant_expr (size_type_node, size, complain);
9502 size = maybe_constant_value (size);
9504 if (!TREE_CONSTANT (size))
9505 size = osize;
9508 if (error_operand_p (size))
9509 return error_mark_node;
9511 /* The array bound must be an integer type. */
9512 tree type = TREE_TYPE (size);
9513 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9515 if (!(complain & tf_error))
9516 return error_mark_node;
9517 if (name)
9518 error ("size of array %qD has non-integral type %qT", name, type);
9519 else
9520 error ("size of array has non-integral type %qT", type);
9521 size = integer_one_node;
9525 /* A type is dependent if it is...an array type constructed from any
9526 dependent type or whose size is specified by a constant expression
9527 that is value-dependent. */
9528 /* We can only call value_dependent_expression_p on integral constant
9529 expressions; treat non-constant expressions as dependent, too. */
9530 if (processing_template_decl
9531 && (type_dependent_expression_p (size)
9532 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9534 /* We cannot do any checking for a SIZE that isn't known to be
9535 constant. Just build the index type and mark that it requires
9536 structural equality checks. */
9537 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9538 size, size_one_node));
9539 TYPE_DEPENDENT_P (itype) = 1;
9540 TYPE_DEPENDENT_P_VALID (itype) = 1;
9541 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9542 return itype;
9545 if (TREE_CODE (size) != INTEGER_CST)
9547 tree folded = cp_fully_fold (size);
9548 if (TREE_CODE (folded) == INTEGER_CST)
9549 pedwarn (location_of (size), OPT_Wpedantic,
9550 "size of array is not an integral constant-expression");
9551 /* Use the folded result for VLAs, too; it will have resolved
9552 SIZEOF_EXPR. */
9553 size = folded;
9556 /* Normally, the array-bound will be a constant. */
9557 if (TREE_CODE (size) == INTEGER_CST)
9559 /* An array must have a positive number of elements. */
9560 if (!valid_constant_size_p (size))
9562 if (!(complain & tf_error))
9563 return error_mark_node;
9565 if (name)
9566 error ("size of array %qD is negative", name);
9567 else
9568 error ("size of array is negative");
9569 size = integer_one_node;
9571 /* As an extension we allow zero-sized arrays. */
9572 else if (integer_zerop (size))
9574 if (!(complain & tf_error))
9575 /* We must fail if performing argument deduction (as
9576 indicated by the state of complain), so that
9577 another substitution can be found. */
9578 return error_mark_node;
9579 else if (in_system_header_at (input_location))
9580 /* Allow them in system headers because glibc uses them. */;
9581 else if (name)
9582 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9583 else
9584 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9587 else if (TREE_CONSTANT (size)
9588 /* We don't allow VLAs at non-function scopes, or during
9589 tentative template substitution. */
9590 || !at_function_scope_p ()
9591 || !(complain & tf_error))
9593 if (!(complain & tf_error))
9594 return error_mark_node;
9595 /* `(int) &fn' is not a valid array bound. */
9596 if (name)
9597 error ("size of array %qD is not an integral constant-expression",
9598 name);
9599 else
9600 error ("size of array is not an integral constant-expression");
9601 size = integer_one_node;
9603 else if (pedantic && warn_vla != 0)
9605 if (name)
9606 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9607 else
9608 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9610 else if (warn_vla > 0)
9612 if (name)
9613 warning (OPT_Wvla,
9614 "variable length array %qD is used", name);
9615 else
9616 warning (OPT_Wvla,
9617 "variable length array is used");
9620 if (processing_template_decl && !TREE_CONSTANT (size))
9621 /* A variable sized array. */
9622 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9623 else
9625 /* Compute the index of the largest element in the array. It is
9626 one less than the number of elements in the array. We save
9627 and restore PROCESSING_TEMPLATE_DECL so that computations in
9628 cp_build_binary_op will be appropriately folded. */
9630 processing_template_decl_sentinel s;
9631 itype = cp_build_binary_op (input_location,
9632 MINUS_EXPR,
9633 cp_convert (ssizetype, size, complain),
9634 cp_convert (ssizetype, integer_one_node,
9635 complain),
9636 complain);
9637 itype = maybe_constant_value (itype);
9640 if (!TREE_CONSTANT (itype))
9642 /* A variable sized array. */
9643 itype = variable_size (itype);
9645 stabilize_vla_size (itype);
9647 if (sanitize_flags_p (SANITIZE_VLA)
9648 && current_function_decl != NULL_TREE)
9650 /* We have to add 1 -- in the ubsan routine we generate
9651 LE_EXPR rather than LT_EXPR. */
9652 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9653 build_one_cst (TREE_TYPE (itype)));
9654 t = ubsan_instrument_vla (input_location, t);
9655 finish_expr_stmt (t);
9658 /* Make sure that there was no overflow when creating to a signed
9659 index type. (For example, on a 32-bit machine, an array with
9660 size 2^32 - 1 is too big.) */
9661 else if (TREE_CODE (itype) == INTEGER_CST
9662 && TREE_OVERFLOW (itype))
9664 if (!(complain & tf_error))
9665 return error_mark_node;
9666 error ("overflow in array dimension");
9667 TREE_OVERFLOW (itype) = 0;
9671 /* Create and return the appropriate index type. */
9672 itype = build_index_type (itype);
9674 /* If the index type were dependent, we would have returned early, so
9675 remember that it isn't. */
9676 TYPE_DEPENDENT_P (itype) = 0;
9677 TYPE_DEPENDENT_P_VALID (itype) = 1;
9678 return itype;
9681 /* Returns the scope (if any) in which the entity declared by
9682 DECLARATOR will be located. If the entity was declared with an
9683 unqualified name, NULL_TREE is returned. */
9685 tree
9686 get_scope_of_declarator (const cp_declarator *declarator)
9688 while (declarator && declarator->kind != cdk_id)
9689 declarator = declarator->declarator;
9691 /* If the declarator-id is a SCOPE_REF, the scope in which the
9692 declaration occurs is the first operand. */
9693 if (declarator
9694 && declarator->u.id.qualifying_scope)
9695 return declarator->u.id.qualifying_scope;
9697 /* Otherwise, the declarator is not a qualified name; the entity will
9698 be declared in the current scope. */
9699 return NULL_TREE;
9702 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9703 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9704 with this type. */
9706 static tree
9707 create_array_type_for_decl (tree name, tree type, tree size)
9709 tree itype = NULL_TREE;
9711 /* If things have already gone awry, bail now. */
9712 if (type == error_mark_node || size == error_mark_node)
9713 return error_mark_node;
9715 /* 8.3.4/1: If the type of the identifier of D contains the auto
9716 type-specifier, the program is ill-formed. */
9717 if (type_uses_auto (type))
9719 error ("%qD declared as array of %qT", name, type);
9720 return error_mark_node;
9723 /* If there are some types which cannot be array elements,
9724 issue an error-message and return. */
9725 switch (TREE_CODE (type))
9727 case VOID_TYPE:
9728 if (name)
9729 error ("declaration of %qD as array of void", name);
9730 else
9731 error ("creating array of void");
9732 return error_mark_node;
9734 case FUNCTION_TYPE:
9735 if (name)
9736 error ("declaration of %qD as array of functions", name);
9737 else
9738 error ("creating array of functions");
9739 return error_mark_node;
9741 case REFERENCE_TYPE:
9742 if (name)
9743 error ("declaration of %qD as array of references", name);
9744 else
9745 error ("creating array of references");
9746 return error_mark_node;
9748 case METHOD_TYPE:
9749 if (name)
9750 error ("declaration of %qD as array of function members", name);
9751 else
9752 error ("creating array of function members");
9753 return error_mark_node;
9755 default:
9756 break;
9759 /* [dcl.array]
9761 The constant expressions that specify the bounds of the arrays
9762 can be omitted only for the first member of the sequence. */
9763 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9765 if (name)
9766 error ("declaration of %qD as multidimensional array must "
9767 "have bounds for all dimensions except the first",
9768 name);
9769 else
9770 error ("multidimensional array must have bounds for all "
9771 "dimensions except the first");
9773 return error_mark_node;
9776 /* Figure out the index type for the array. */
9777 if (size)
9778 itype = compute_array_index_type (name, size, tf_warning_or_error);
9780 /* [dcl.array]
9781 T is called the array element type; this type shall not be [...] an
9782 abstract class type. */
9783 abstract_virtuals_error (name, type);
9785 return build_cplus_array_type (type, itype);
9788 /* Returns the smallest location != UNKNOWN_LOCATION among the
9789 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9790 and LOCATIONS[ds_restrict]. */
9792 static location_t
9793 smallest_type_quals_location (int type_quals, const location_t* locations)
9795 location_t loc = UNKNOWN_LOCATION;
9797 if (type_quals & TYPE_QUAL_CONST)
9798 loc = locations[ds_const];
9800 if ((type_quals & TYPE_QUAL_VOLATILE)
9801 && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc))
9802 loc = locations[ds_volatile];
9804 if ((type_quals & TYPE_QUAL_RESTRICT)
9805 && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc))
9806 loc = locations[ds_restrict];
9808 return loc;
9811 /* Check that it's OK to declare a function with the indicated TYPE
9812 and TYPE_QUALS. SFK indicates the kind of special function (if any)
9813 that this function is. OPTYPE is the type given in a conversion
9814 operator declaration, or the class type for a constructor/destructor.
9815 Returns the actual return type of the function; that may be different
9816 than TYPE if an error occurs, or for certain special functions. */
9818 static tree
9819 check_special_function_return_type (special_function_kind sfk,
9820 tree type,
9821 tree optype,
9822 int type_quals,
9823 const location_t* locations)
9825 switch (sfk)
9827 case sfk_constructor:
9828 if (type)
9829 error ("return type specification for constructor invalid");
9830 else if (type_quals != TYPE_UNQUALIFIED)
9831 error_at (smallest_type_quals_location (type_quals, locations),
9832 "qualifiers are not allowed on constructor declaration");
9834 if (targetm.cxx.cdtor_returns_this ())
9835 type = build_pointer_type (optype);
9836 else
9837 type = void_type_node;
9838 break;
9840 case sfk_destructor:
9841 if (type)
9842 error ("return type specification for destructor invalid");
9843 else if (type_quals != TYPE_UNQUALIFIED)
9844 error_at (smallest_type_quals_location (type_quals, locations),
9845 "qualifiers are not allowed on destructor declaration");
9847 /* We can't use the proper return type here because we run into
9848 problems with ambiguous bases and covariant returns. */
9849 if (targetm.cxx.cdtor_returns_this ())
9850 type = build_pointer_type (void_type_node);
9851 else
9852 type = void_type_node;
9853 break;
9855 case sfk_conversion:
9856 if (type)
9857 error ("return type specified for %<operator %T%>", optype);
9858 else if (type_quals != TYPE_UNQUALIFIED)
9859 error_at (smallest_type_quals_location (type_quals, locations),
9860 "qualifiers are not allowed on declaration of "
9861 "%<operator %T%>", optype);
9863 type = optype;
9864 break;
9866 case sfk_deduction_guide:
9867 if (type)
9868 error ("return type specified for deduction guide");
9869 else if (type_quals != TYPE_UNQUALIFIED)
9870 error_at (smallest_type_quals_location (type_quals, locations),
9871 "qualifiers are not allowed on declaration of "
9872 "deduction guide");
9873 if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
9875 error ("template template parameter %qT in declaration of "
9876 "deduction guide", optype);
9877 type = error_mark_node;
9879 else
9880 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
9881 for (int i = 0; i < ds_last; ++i)
9882 if (i != ds_explicit && locations[i])
9883 error_at (locations[i],
9884 "decl-specifier in declaration of deduction guide");
9885 break;
9887 default:
9888 gcc_unreachable ();
9891 return type;
9894 /* A variable or data member (whose unqualified name is IDENTIFIER)
9895 has been declared with the indicated TYPE. If the TYPE is not
9896 acceptable, issue an error message and return a type to use for
9897 error-recovery purposes. */
9899 tree
9900 check_var_type (tree identifier, tree type)
9902 if (VOID_TYPE_P (type))
9904 if (!identifier)
9905 error ("unnamed variable or field declared void");
9906 else if (identifier_p (identifier))
9908 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
9909 error ("variable or field %qE declared void", identifier);
9911 else
9912 error ("variable or field declared void");
9913 type = error_mark_node;
9916 return type;
9919 /* Handle declaring DECL as an inline variable. */
9921 static void
9922 mark_inline_variable (tree decl)
9924 bool inlinep = true;
9925 if (! toplevel_bindings_p ())
9927 error ("%<inline%> specifier invalid for variable "
9928 "%qD declared at block scope", decl);
9929 inlinep = false;
9931 else if (cxx_dialect < cxx17)
9932 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
9933 "inline variables are only available "
9934 "with -std=c++17 or -std=gnu++17");
9935 if (inlinep)
9937 retrofit_lang_decl (decl);
9938 SET_DECL_VAR_DECLARED_INLINE_P (decl);
9943 /* Assign a typedef-given name to a class or enumeration type declared
9944 as anonymous at first. This was split out of grokdeclarator
9945 because it is also used in libcc1. */
9947 void
9948 name_unnamed_type (tree type, tree decl)
9950 gcc_assert (TYPE_UNNAMED_P (type));
9952 /* Replace the anonymous name with the real name everywhere. */
9953 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9955 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
9956 /* We do not rename the debug info representing the
9957 unnamed tagged type because the standard says in
9958 [dcl.typedef] that the naming applies only for
9959 linkage purposes. */
9960 /*debug_hooks->set_name (t, decl);*/
9961 TYPE_NAME (t) = decl;
9964 if (TYPE_LANG_SPECIFIC (type))
9965 TYPE_WAS_UNNAMED (type) = 1;
9967 /* If this is a typedef within a template class, the nested
9968 type is a (non-primary) template. The name for the
9969 template needs updating as well. */
9970 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9971 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9972 = TYPE_IDENTIFIER (type);
9974 /* Adjust linkage now that we aren't unnamed anymore. */
9975 reset_type_linkage (type);
9977 /* FIXME remangle member functions; member functions of a
9978 type with external linkage have external linkage. */
9980 /* Check that our job is done, and that it would fail if we
9981 attempted to do it again. */
9982 gcc_assert (!TYPE_UNNAMED_P (type));
9985 /* Given declspecs and a declarator (abstract or otherwise), determine
9986 the name and type of the object declared and construct a DECL node
9987 for it.
9989 DECLSPECS points to the representation of declaration-specifier
9990 sequence that precedes declarator.
9992 DECL_CONTEXT says which syntactic context this declaration is in:
9993 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9994 FUNCDEF for a function definition. Like NORMAL but a few different
9995 error messages in each case. Return value may be zero meaning
9996 this definition is too screwy to try to parse.
9997 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9998 handle member functions (which have FIELD context).
9999 Return value may be zero meaning this definition is too screwy to
10000 try to parse.
10001 PARM for a parameter declaration (either within a function prototype
10002 or before a function body). Make a PARM_DECL, or return void_type_node.
10003 TPARM for a template parameter declaration.
10004 CATCHPARM for a parameter declaration before a catch clause.
10005 TYPENAME if for a typename (in a cast or sizeof).
10006 Don't make a DECL node; just return the ..._TYPE node.
10007 FIELD for a struct or union field; make a FIELD_DECL.
10008 BITFIELD for a field with specified width.
10010 INITIALIZED is as for start_decl.
10012 ATTRLIST is a pointer to the list of attributes, which may be NULL
10013 if there are none; *ATTRLIST may be modified if attributes from inside
10014 the declarator should be applied to the declaration.
10016 When this function is called, scoping variables (such as
10017 CURRENT_CLASS_TYPE) should reflect the scope in which the
10018 declaration occurs, not the scope in which the new declaration will
10019 be placed. For example, on:
10021 void S::f() { ... }
10023 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
10024 should not be `S'.
10026 Returns a DECL (if a declarator is present), a TYPE (if there is no
10027 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
10028 error occurs. */
10030 tree
10031 grokdeclarator (const cp_declarator *declarator,
10032 cp_decl_specifier_seq *declspecs,
10033 enum decl_context decl_context,
10034 int initialized,
10035 tree* attrlist)
10037 tree type = NULL_TREE;
10038 int longlong = 0;
10039 int explicit_intN = 0;
10040 int virtualp, explicitp, friendp, inlinep, staticp;
10041 int explicit_int = 0;
10042 int explicit_char = 0;
10043 int defaulted_int = 0;
10045 tree typedef_decl = NULL_TREE;
10046 const char *name = NULL;
10047 tree typedef_type = NULL_TREE;
10048 /* True if this declarator is a function definition. */
10049 bool funcdef_flag = false;
10050 cp_declarator_kind innermost_code = cdk_error;
10051 int bitfield = 0;
10052 #if 0
10053 /* See the code below that used this. */
10054 tree decl_attr = NULL_TREE;
10055 #endif
10057 /* Keep track of what sort of function is being processed
10058 so that we can warn about default return values, or explicit
10059 return values which do not match prescribed defaults. */
10060 special_function_kind sfk = sfk_none;
10062 tree dname = NULL_TREE;
10063 tree ctor_return_type = NULL_TREE;
10064 enum overload_flags flags = NO_SPECIAL;
10065 /* cv-qualifiers that apply to the declarator, for a declaration of
10066 a member function. */
10067 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
10068 /* virt-specifiers that apply to the declarator, for a declaration of
10069 a member function. */
10070 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
10071 /* ref-qualifier that applies to the declarator, for a declaration of
10072 a member function. */
10073 cp_ref_qualifier rqual = REF_QUAL_NONE;
10074 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
10075 int type_quals = TYPE_UNQUALIFIED;
10076 tree raises = NULL_TREE;
10077 int template_count = 0;
10078 tree returned_attrs = NULL_TREE;
10079 tree parms = NULL_TREE;
10080 const cp_declarator *id_declarator;
10081 /* The unqualified name of the declarator; either an
10082 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
10083 tree unqualified_id;
10084 /* The class type, if any, in which this entity is located,
10085 or NULL_TREE if none. Note that this value may be different from
10086 the current class type; for example if an attempt is made to declare
10087 "A::f" inside "B", this value will be "A". */
10088 tree ctype = current_class_type;
10089 /* The NAMESPACE_DECL for the namespace in which this entity is
10090 located. If an unqualified name is used to declare the entity,
10091 this value will be NULL_TREE, even if the entity is located at
10092 namespace scope. */
10093 tree in_namespace = NULL_TREE;
10094 cp_storage_class storage_class;
10095 bool unsigned_p, signed_p, short_p, long_p, thread_p;
10096 bool type_was_error_mark_node = false;
10097 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10098 bool template_type_arg = false;
10099 bool template_parm_flag = false;
10100 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10101 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10102 bool late_return_type_p = false;
10103 bool array_parameter_p = false;
10104 source_location saved_loc = input_location;
10105 tree reqs = NULL_TREE;
10107 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10108 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10109 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10110 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10111 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10112 explicit_intN = declspecs->explicit_intN_p;
10113 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10115 // Was concept_p specified? Note that ds_concept
10116 // implies ds_constexpr!
10117 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10118 if (concept_p)
10119 constexpr_p = true;
10121 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10122 type_quals |= TYPE_QUAL_CONST;
10123 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10124 type_quals |= TYPE_QUAL_VOLATILE;
10125 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10126 type_quals |= TYPE_QUAL_RESTRICT;
10128 if (decl_context == FUNCDEF)
10129 funcdef_flag = true, decl_context = NORMAL;
10130 else if (decl_context == MEMFUNCDEF)
10131 funcdef_flag = true, decl_context = FIELD;
10132 else if (decl_context == BITFIELD)
10133 bitfield = 1, decl_context = FIELD;
10134 else if (decl_context == TEMPLATE_TYPE_ARG)
10135 template_type_arg = true, decl_context = TYPENAME;
10136 else if (decl_context == TPARM)
10137 template_parm_flag = true, decl_context = PARM;
10139 if (initialized > 1)
10140 funcdef_flag = true;
10142 location_t typespec_loc = smallest_type_quals_location (type_quals,
10143 declspecs->locations);
10144 if (typespec_loc == UNKNOWN_LOCATION)
10145 typespec_loc = declspecs->locations[ds_type_spec];
10146 if (typespec_loc == UNKNOWN_LOCATION)
10147 typespec_loc = input_location;
10149 /* Look inside a declarator for the name being declared
10150 and get it as a string, for an error message. */
10151 for (id_declarator = declarator;
10152 id_declarator;
10153 id_declarator = id_declarator->declarator)
10155 if (id_declarator->kind != cdk_id)
10156 innermost_code = id_declarator->kind;
10158 switch (id_declarator->kind)
10160 case cdk_function:
10161 if (id_declarator->declarator
10162 && id_declarator->declarator->kind == cdk_id)
10164 sfk = id_declarator->declarator->u.id.sfk;
10165 if (sfk == sfk_destructor)
10166 flags = DTOR_FLAG;
10168 break;
10170 case cdk_id:
10172 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10173 tree decl = id_declarator->u.id.unqualified_name;
10174 if (!decl)
10175 break;
10176 if (qualifying_scope)
10178 if (check_for_bare_parameter_packs (qualifying_scope,
10179 id_declarator->id_loc))
10180 return error_mark_node;
10181 if (at_function_scope_p ())
10183 /* [dcl.meaning]
10185 A declarator-id shall not be qualified except
10186 for ...
10188 None of the cases are permitted in block
10189 scope. */
10190 if (qualifying_scope == global_namespace)
10191 error ("invalid use of qualified-name %<::%D%>",
10192 decl);
10193 else if (TYPE_P (qualifying_scope))
10194 error ("invalid use of qualified-name %<%T::%D%>",
10195 qualifying_scope, decl);
10196 else
10197 error ("invalid use of qualified-name %<%D::%D%>",
10198 qualifying_scope, decl);
10199 return error_mark_node;
10201 else if (TYPE_P (qualifying_scope))
10203 ctype = qualifying_scope;
10204 if (!MAYBE_CLASS_TYPE_P (ctype))
10206 error ("%q#T is not a class or a namespace", ctype);
10207 ctype = NULL_TREE;
10209 else if (innermost_code != cdk_function
10210 && current_class_type
10211 && !uniquely_derived_from_p (ctype,
10212 current_class_type))
10214 error ("invalid use of qualified-name %<%T::%D%>",
10215 qualifying_scope, decl);
10216 return error_mark_node;
10219 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10220 in_namespace = qualifying_scope;
10222 switch (TREE_CODE (decl))
10224 case BIT_NOT_EXPR:
10226 if (innermost_code != cdk_function)
10228 error ("declaration of %qD as non-function", decl);
10229 return error_mark_node;
10231 else if (!qualifying_scope
10232 && !(current_class_type && at_class_scope_p ()))
10234 error ("declaration of %qD as non-member", decl);
10235 return error_mark_node;
10238 tree type = TREE_OPERAND (decl, 0);
10239 if (TYPE_P (type))
10240 type = constructor_name (type);
10241 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10242 dname = decl;
10244 break;
10246 case TEMPLATE_ID_EXPR:
10248 tree fns = TREE_OPERAND (decl, 0);
10250 dname = fns;
10251 if (!identifier_p (dname))
10252 dname = OVL_NAME (dname);
10254 /* Fall through. */
10256 case IDENTIFIER_NODE:
10257 if (identifier_p (decl))
10258 dname = decl;
10260 if (IDENTIFIER_KEYWORD_P (dname))
10262 error ("declarator-id missing; using reserved word %qD",
10263 dname);
10264 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10266 else if (!IDENTIFIER_CONV_OP_P (dname))
10267 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10268 else
10270 gcc_assert (flags == NO_SPECIAL);
10271 flags = TYPENAME_FLAG;
10272 sfk = sfk_conversion;
10273 tree glob = get_global_binding (dname);
10274 if (glob && TREE_CODE (glob) == TYPE_DECL)
10275 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10276 else
10277 name = "<invalid operator>";
10279 break;
10281 default:
10282 gcc_unreachable ();
10284 break;
10287 case cdk_array:
10288 case cdk_pointer:
10289 case cdk_reference:
10290 case cdk_ptrmem:
10291 break;
10293 case cdk_decomp:
10294 name = "structured binding";
10295 break;
10297 case cdk_error:
10298 return error_mark_node;
10300 default:
10301 gcc_unreachable ();
10303 if (id_declarator->kind == cdk_id)
10304 break;
10307 /* [dcl.fct.edf]
10309 The declarator in a function-definition shall have the form
10310 D1 ( parameter-declaration-clause) ... */
10311 if (funcdef_flag && innermost_code != cdk_function)
10313 error ("function definition does not declare parameters");
10314 return error_mark_node;
10317 if (flags == TYPENAME_FLAG
10318 && innermost_code != cdk_function
10319 && ! (ctype && !declspecs->any_specifiers_p))
10321 error ("declaration of %qD as non-function", dname);
10322 return error_mark_node;
10325 if (dname && identifier_p (dname))
10327 if (UDLIT_OPER_P (dname)
10328 && innermost_code != cdk_function)
10330 error ("declaration of %qD as non-function", dname);
10331 return error_mark_node;
10334 if (IDENTIFIER_ANY_OP_P (dname))
10336 if (typedef_p)
10338 error ("declaration of %qD as %<typedef%>", dname);
10339 return error_mark_node;
10341 else if (decl_context == PARM || decl_context == CATCHPARM)
10343 error ("declaration of %qD as parameter", dname);
10344 return error_mark_node;
10349 /* Anything declared one level down from the top level
10350 must be one of the parameters of a function
10351 (because the body is at least two levels down). */
10353 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10354 by not allowing C++ class definitions to specify their parameters
10355 with xdecls (must be spec.d in the parmlist).
10357 Since we now wait to push a class scope until we are sure that
10358 we are in a legitimate method context, we must set oldcname
10359 explicitly (since current_class_name is not yet alive).
10361 We also want to avoid calling this a PARM if it is in a namespace. */
10363 if (decl_context == NORMAL && !toplevel_bindings_p ())
10365 cp_binding_level *b = current_binding_level;
10366 current_binding_level = b->level_chain;
10367 if (current_binding_level != 0 && toplevel_bindings_p ())
10368 decl_context = PARM;
10369 current_binding_level = b;
10372 if (name == NULL)
10373 name = decl_context == PARM ? "parameter" : "type name";
10375 if (concept_p && typedef_p)
10377 error ("%<concept%> cannot appear in a typedef declaration");
10378 return error_mark_node;
10381 if (constexpr_p && typedef_p)
10383 error ("%<constexpr%> cannot appear in a typedef declaration");
10384 return error_mark_node;
10387 /* If there were multiple types specified in the decl-specifier-seq,
10388 issue an error message. */
10389 if (declspecs->multiple_types_p)
10391 error ("two or more data types in declaration of %qs", name);
10392 return error_mark_node;
10395 if (declspecs->conflicting_specifiers_p)
10397 error ("conflicting specifiers in declaration of %qs", name);
10398 return error_mark_node;
10401 /* Extract the basic type from the decl-specifier-seq. */
10402 type = declspecs->type;
10403 if (type == error_mark_node)
10405 type = NULL_TREE;
10406 type_was_error_mark_node = true;
10408 cp_warn_deprecated_use (type);
10409 if (type && TREE_CODE (type) == TYPE_DECL)
10411 typedef_decl = type;
10412 type = TREE_TYPE (typedef_decl);
10413 if (DECL_ARTIFICIAL (typedef_decl))
10414 cp_warn_deprecated_use (type);
10416 /* No type at all: default to `int', and set DEFAULTED_INT
10417 because it was not a user-defined typedef. */
10418 if (type == NULL_TREE)
10420 if (signed_p || unsigned_p || long_p || short_p)
10422 /* These imply 'int'. */
10423 type = integer_type_node;
10424 defaulted_int = 1;
10426 /* If we just have "complex", it is equivalent to "complex double". */
10427 else if (!longlong && !explicit_intN
10428 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10430 type = double_type_node;
10431 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10432 "ISO C++ does not support plain %<complex%> meaning "
10433 "%<double complex%>");
10436 /* Gather flags. */
10437 explicit_int = declspecs->explicit_int_p;
10438 explicit_char = declspecs->explicit_char_p;
10440 #if 0
10441 /* See the code below that used this. */
10442 if (typedef_decl)
10443 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10444 #endif
10445 typedef_type = type;
10447 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10448 ctor_return_type = TREE_TYPE (dname);
10449 else
10450 ctor_return_type = ctype;
10452 if (sfk != sfk_none)
10454 type = check_special_function_return_type (sfk, type,
10455 ctor_return_type,
10456 type_quals,
10457 declspecs->locations);
10458 type_quals = TYPE_UNQUALIFIED;
10460 else if (type == NULL_TREE)
10462 int is_main;
10464 explicit_int = -1;
10466 /* We handle `main' specially here, because 'main () { }' is so
10467 common. With no options, it is allowed. With -Wreturn-type,
10468 it is a warning. It is only an error with -pedantic-errors. */
10469 is_main = (funcdef_flag
10470 && dname && identifier_p (dname)
10471 && MAIN_NAME_P (dname)
10472 && ctype == NULL_TREE
10473 && in_namespace == NULL_TREE
10474 && current_namespace == global_namespace);
10476 if (type_was_error_mark_node)
10477 /* We've already issued an error, don't complain more. */;
10478 else if (in_system_header_at (input_location) || flag_ms_extensions)
10479 /* Allow it, sigh. */;
10480 else if (! is_main)
10481 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10482 else if (pedantic)
10483 pedwarn (input_location, OPT_Wpedantic,
10484 "ISO C++ forbids declaration of %qs with no type", name);
10485 else
10486 warning (OPT_Wreturn_type,
10487 "ISO C++ forbids declaration of %qs with no type", name);
10489 if (type_was_error_mark_node && template_parm_flag)
10490 /* FIXME we should be able to propagate the error_mark_node as is
10491 for other contexts too. */
10492 type = error_mark_node;
10493 else
10494 type = integer_type_node;
10497 ctype = NULL_TREE;
10499 if (explicit_intN)
10501 if (! int_n_enabled_p[declspecs->int_n_idx])
10503 error ("%<__int%d%> is not supported by this target",
10504 int_n_data[declspecs->int_n_idx].bitsize);
10505 explicit_intN = false;
10507 else if (pedantic && ! in_system_header_at (input_location))
10508 pedwarn (input_location, OPT_Wpedantic,
10509 "ISO C++ does not support %<__int%d%> for %qs",
10510 int_n_data[declspecs->int_n_idx].bitsize, name);
10513 /* Now process the modifiers that were specified
10514 and check for invalid combinations. */
10516 /* Long double is a special combination. */
10517 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10519 long_p = false;
10520 type = cp_build_qualified_type (long_double_type_node,
10521 cp_type_quals (type));
10524 /* Check all other uses of type modifiers. */
10526 if (unsigned_p || signed_p || long_p || short_p)
10528 location_t loc;
10529 const char *key;
10530 if (unsigned_p)
10532 key = "unsigned";
10533 loc = declspecs->locations[ds_unsigned];
10535 else if (signed_p)
10537 key = "signed";
10538 loc = declspecs->locations[ds_signed];
10540 else if (longlong)
10542 key = "long long";
10543 loc = declspecs->locations[ds_long_long];
10545 else if (long_p)
10547 key = "long";
10548 loc = declspecs->locations[ds_long];
10550 else /* if (short_p) */
10552 key = "short";
10553 loc = declspecs->locations[ds_short];
10556 int ok = 0;
10558 if (signed_p && unsigned_p)
10559 error_at (loc, "%<signed%> and %<unsigned%> specified together");
10560 else if (long_p && short_p)
10561 error_at (loc, "%<long%> and %<short%> specified together");
10562 else if (TREE_CODE (type) != INTEGER_TYPE
10563 || type == char16_type_node || type == char32_type_node
10564 || ((long_p || short_p)
10565 && (explicit_char || explicit_intN)))
10566 error_at (loc, "%qs specified with %qT", key, type);
10567 else if (!explicit_int && !defaulted_int
10568 && !explicit_char && !explicit_intN)
10570 if (typedef_decl)
10572 pedwarn (loc, OPT_Wpedantic, "%qs specified with %qT",
10573 key, type);
10574 ok = !flag_pedantic_errors;
10576 else if (declspecs->decltype_p)
10577 error_at (loc, "%qs specified with %<decltype%>", key);
10578 else
10579 error_at (loc, "%qs specified with %<typeof%>", key);
10581 else
10582 ok = 1;
10584 /* Discard the type modifiers if they are invalid. */
10585 if (! ok)
10587 unsigned_p = false;
10588 signed_p = false;
10589 long_p = false;
10590 short_p = false;
10591 longlong = 0;
10595 /* Decide whether an integer type is signed or not.
10596 Optionally treat bitfields as signed by default. */
10597 if (unsigned_p
10598 /* [class.bit]
10600 It is implementation-defined whether a plain (neither
10601 explicitly signed or unsigned) char, short, int, or long
10602 bit-field is signed or unsigned.
10604 Naturally, we extend this to long long as well. Note that
10605 this does not include wchar_t. */
10606 || (bitfield && !flag_signed_bitfields
10607 && !signed_p
10608 /* A typedef for plain `int' without `signed' can be
10609 controlled just like plain `int', but a typedef for
10610 `signed int' cannot be so controlled. */
10611 && !(typedef_decl
10612 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10613 && TREE_CODE (type) == INTEGER_TYPE
10614 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10616 if (explicit_intN)
10617 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10618 else if (longlong)
10619 type = long_long_unsigned_type_node;
10620 else if (long_p)
10621 type = long_unsigned_type_node;
10622 else if (short_p)
10623 type = short_unsigned_type_node;
10624 else if (type == char_type_node)
10625 type = unsigned_char_type_node;
10626 else if (typedef_decl)
10627 type = unsigned_type_for (type);
10628 else
10629 type = unsigned_type_node;
10631 else if (signed_p && type == char_type_node)
10632 type = signed_char_type_node;
10633 else if (explicit_intN)
10634 type = int_n_trees[declspecs->int_n_idx].signed_type;
10635 else if (longlong)
10636 type = long_long_integer_type_node;
10637 else if (long_p)
10638 type = long_integer_type_node;
10639 else if (short_p)
10640 type = short_integer_type_node;
10642 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10644 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10645 error ("complex invalid for %qs", name);
10646 /* If a modifier is specified, the resulting complex is the complex
10647 form of TYPE. E.g, "complex short" is "complex short int". */
10648 else if (type == integer_type_node)
10649 type = complex_integer_type_node;
10650 else if (type == float_type_node)
10651 type = complex_float_type_node;
10652 else if (type == double_type_node)
10653 type = complex_double_type_node;
10654 else if (type == long_double_type_node)
10655 type = complex_long_double_type_node;
10656 else
10657 type = build_complex_type (type);
10660 /* If we're using the injected-class-name to form a compound type or a
10661 declaration, replace it with the underlying class so we don't get
10662 redundant typedefs in the debug output. But if we are returning the
10663 type unchanged, leave it alone so that it's available to
10664 maybe_get_template_decl_from_type_decl. */
10665 if (CLASS_TYPE_P (type)
10666 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10667 && type == TREE_TYPE (TYPE_NAME (type))
10668 && (declarator || type_quals))
10669 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10671 type_quals |= cp_type_quals (type);
10672 type = cp_build_qualified_type_real
10673 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10674 || declspecs->decltype_p)
10675 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10676 /* We might have ignored or rejected some of the qualifiers. */
10677 type_quals = cp_type_quals (type);
10679 if (cxx_dialect >= cxx17 && type && is_auto (type)
10680 && innermost_code != cdk_function
10681 && id_declarator && declarator != id_declarator)
10682 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10684 error_at (typespec_loc, "template placeholder type %qT must be followed "
10685 "by a simple declarator-id", type);
10686 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10689 staticp = 0;
10690 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10691 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10692 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10694 storage_class = declspecs->storage_class;
10695 if (storage_class == sc_static)
10696 staticp = 1 + (decl_context == FIELD);
10698 if (virtualp)
10700 if (staticp == 2)
10702 error ("member %qD cannot be declared both %<virtual%> "
10703 "and %<static%>", dname);
10704 storage_class = sc_none;
10705 staticp = 0;
10707 if (constexpr_p)
10708 error ("member %qD cannot be declared both %<virtual%> "
10709 "and %<constexpr%>", dname);
10711 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10713 /* Issue errors about use of storage classes for parameters. */
10714 if (decl_context == PARM)
10716 if (typedef_p)
10718 error ("typedef declaration invalid in parameter declaration");
10719 return error_mark_node;
10721 else if (template_parm_flag && storage_class != sc_none)
10723 error ("storage class specified for template parameter %qs", name);
10724 return error_mark_node;
10726 else if (storage_class == sc_static
10727 || storage_class == sc_extern
10728 || thread_p)
10729 error ("storage class specifiers invalid in parameter declarations");
10731 /* Function parameters cannot be concept. */
10732 if (concept_p)
10733 error ("a parameter cannot be declared %<concept%>");
10734 /* Function parameters cannot be constexpr. If we saw one, moan
10735 and pretend it wasn't there. */
10736 else if (constexpr_p)
10738 error ("a parameter cannot be declared %<constexpr%>");
10739 constexpr_p = 0;
10743 /* Give error if `virtual' is used outside of class declaration. */
10744 if (virtualp
10745 && (current_class_name == NULL_TREE || decl_context != FIELD))
10747 error_at (declspecs->locations[ds_virtual],
10748 "%<virtual%> outside class declaration");
10749 virtualp = 0;
10752 if (innermost_code == cdk_decomp)
10754 location_t loc = (declarator->kind == cdk_reference
10755 ? declarator->declarator->id_loc : declarator->id_loc);
10756 if (inlinep)
10757 error_at (declspecs->locations[ds_inline],
10758 "structured binding declaration cannot be %<inline%>");
10759 if (typedef_p)
10760 error_at (declspecs->locations[ds_typedef],
10761 "structured binding declaration cannot be %<typedef%>");
10762 if (constexpr_p)
10763 error_at (declspecs->locations[ds_constexpr], "structured "
10764 "binding declaration cannot be %<constexpr%>");
10765 if (thread_p)
10766 error_at (declspecs->locations[ds_thread],
10767 "structured binding declaration cannot be %qs",
10768 declspecs->gnu_thread_keyword_p
10769 ? "__thread" : "thread_local");
10770 if (concept_p)
10771 error_at (declspecs->locations[ds_concept],
10772 "structured binding declaration cannot be %<concept%>");
10773 switch (storage_class)
10775 case sc_none:
10776 break;
10777 case sc_register:
10778 error_at (loc, "structured binding declaration cannot be "
10779 "%<register%>");
10780 break;
10781 case sc_static:
10782 error_at (loc, "structured binding declaration cannot be "
10783 "%<static%>");
10784 break;
10785 case sc_extern:
10786 error_at (loc, "structured binding declaration cannot be "
10787 "%<extern%>");
10788 break;
10789 case sc_mutable:
10790 error_at (loc, "structured binding declaration cannot be "
10791 "%<mutable%>");
10792 break;
10793 case sc_auto:
10794 error_at (loc, "structured binding declaration cannot be "
10795 "C++98 %<auto%>");
10796 break;
10797 default:
10798 gcc_unreachable ();
10800 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
10801 || TYPE_IDENTIFIER (type) != auto_identifier)
10803 if (type != error_mark_node)
10805 error_at (loc, "structured binding declaration cannot have "
10806 "type %qT", type);
10807 inform (loc,
10808 "type must be cv-qualified %<auto%> or reference to "
10809 "cv-qualified %<auto%>");
10811 type = build_qualified_type (make_auto (), type_quals);
10812 declspecs->type = type;
10814 inlinep = 0;
10815 typedef_p = 0;
10816 constexpr_p = 0;
10817 thread_p = 0;
10818 concept_p = 0;
10819 storage_class = sc_none;
10820 staticp = 0;
10821 declspecs->storage_class = sc_none;
10822 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
10825 /* Static anonymous unions are dealt with here. */
10826 if (staticp && decl_context == TYPENAME
10827 && declspecs->type
10828 && ANON_AGGR_TYPE_P (declspecs->type))
10829 decl_context = FIELD;
10831 /* Warn about storage classes that are invalid for certain
10832 kinds of declarations (parameters, typenames, etc.). */
10833 if (thread_p
10834 && ((storage_class
10835 && storage_class != sc_extern
10836 && storage_class != sc_static)
10837 || typedef_p))
10839 error ("multiple storage classes in declaration of %qs", name);
10840 thread_p = false;
10842 if (decl_context != NORMAL
10843 && ((storage_class != sc_none
10844 && storage_class != sc_mutable)
10845 || thread_p))
10847 if ((decl_context == PARM || decl_context == CATCHPARM)
10848 && (storage_class == sc_register
10849 || storage_class == sc_auto))
10851 else if (typedef_p)
10853 else if (decl_context == FIELD
10854 /* C++ allows static class elements. */
10855 && storage_class == sc_static)
10856 /* C++ also allows inlines and signed and unsigned elements,
10857 but in those cases we don't come in here. */
10859 else
10861 if (decl_context == FIELD)
10862 error ("storage class specified for %qs", name);
10863 else
10865 if (decl_context == PARM || decl_context == CATCHPARM)
10866 error ("storage class specified for parameter %qs", name);
10867 else
10868 error ("storage class specified for typename");
10870 if (storage_class == sc_register
10871 || storage_class == sc_auto
10872 || storage_class == sc_extern
10873 || thread_p)
10874 storage_class = sc_none;
10877 else if (storage_class == sc_extern && funcdef_flag
10878 && ! toplevel_bindings_p ())
10879 error ("nested function %qs declared %<extern%>", name);
10880 else if (toplevel_bindings_p ())
10882 if (storage_class == sc_auto)
10883 error ("top-level declaration of %qs specifies %<auto%>", name);
10885 else if (thread_p
10886 && storage_class != sc_extern
10887 && storage_class != sc_static)
10889 if (declspecs->gnu_thread_keyword_p)
10890 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
10891 "declared %<__thread%>", name);
10893 /* When thread_local is applied to a variable of block scope the
10894 storage-class-specifier static is implied if it does not appear
10895 explicitly. */
10896 storage_class = declspecs->storage_class = sc_static;
10897 staticp = 1;
10900 if (storage_class && friendp)
10902 error ("storage class specifiers invalid in friend function declarations");
10903 storage_class = sc_none;
10904 staticp = 0;
10907 if (!id_declarator)
10908 unqualified_id = NULL_TREE;
10909 else
10911 unqualified_id = id_declarator->u.id.unqualified_name;
10912 switch (TREE_CODE (unqualified_id))
10914 case BIT_NOT_EXPR:
10915 unqualified_id = TREE_OPERAND (unqualified_id, 0);
10916 if (TYPE_P (unqualified_id))
10917 unqualified_id = constructor_name (unqualified_id);
10918 break;
10920 case IDENTIFIER_NODE:
10921 case TEMPLATE_ID_EXPR:
10922 break;
10924 default:
10925 gcc_unreachable ();
10929 if (declspecs->std_attributes)
10931 location_t attr_loc = declspecs->locations[ds_std_attribute];
10932 if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
10933 inform (attr_loc, "an attribute that appertains to a type-specifier "
10934 "is ignored");
10937 /* Determine the type of the entity declared by recurring on the
10938 declarator. */
10939 for (; declarator; declarator = declarator->declarator)
10941 const cp_declarator *inner_declarator;
10942 tree attrs;
10944 if (type == error_mark_node)
10945 return error_mark_node;
10947 attrs = declarator->attributes;
10948 if (attrs)
10950 int attr_flags;
10952 attr_flags = 0;
10953 if (declarator == NULL || declarator->kind == cdk_id)
10954 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
10955 if (declarator->kind == cdk_function)
10956 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
10957 if (declarator->kind == cdk_array)
10958 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
10959 returned_attrs = decl_attributes (&type,
10960 chainon (returned_attrs, attrs),
10961 attr_flags);
10964 inner_declarator = declarator->declarator;
10966 /* We don't want to warn in parameter context because we don't
10967 yet know if the parse will succeed, and this might turn out
10968 to be a constructor call. */
10969 if (decl_context != PARM
10970 && decl_context != TYPENAME
10971 && !typedef_p
10972 && declarator->parenthesized != UNKNOWN_LOCATION
10973 /* If the type is class-like and the inner name used a
10974 global namespace qualifier, we need the parens.
10975 Unfortunately all we can tell is whether a qualified name
10976 was used or not. */
10977 && !(inner_declarator
10978 && inner_declarator->kind == cdk_id
10979 && inner_declarator->u.id.qualifying_scope
10980 && (MAYBE_CLASS_TYPE_P (type)
10981 || TREE_CODE (type) == ENUMERAL_TYPE)))
10982 warning_at (declarator->parenthesized, OPT_Wparentheses,
10983 "unnecessary parentheses in declaration of %qs", name);
10984 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
10985 break;
10987 switch (declarator->kind)
10989 case cdk_array:
10990 type = create_array_type_for_decl (dname, type,
10991 declarator->u.array.bounds);
10992 if (!valid_array_size_p (input_location, type, dname))
10993 type = error_mark_node;
10995 if (declarator->std_attributes)
10996 /* [dcl.array]/1:
10998 The optional attribute-specifier-seq appertains to the
10999 array. */
11000 returned_attrs = chainon (returned_attrs,
11001 declarator->std_attributes);
11002 break;
11004 case cdk_function:
11006 tree arg_types;
11007 int funcdecl_p;
11009 /* Declaring a function type. */
11011 input_location = declspecs->locations[ds_type_spec];
11012 abstract_virtuals_error (ACU_RETURN, type);
11013 input_location = saved_loc;
11015 /* Pick up type qualifiers which should be applied to `this'. */
11016 memfn_quals = declarator->u.function.qualifiers;
11017 /* Pick up virt-specifiers. */
11018 virt_specifiers = declarator->u.function.virt_specifiers;
11019 /* And ref-qualifier, too */
11020 rqual = declarator->u.function.ref_qualifier;
11021 /* And tx-qualifier. */
11022 tree tx_qual = declarator->u.function.tx_qualifier;
11023 /* Pick up the exception specifications. */
11024 raises = declarator->u.function.exception_specification;
11025 /* If the exception-specification is ill-formed, let's pretend
11026 there wasn't one. */
11027 if (raises == error_mark_node)
11028 raises = NULL_TREE;
11030 if (reqs)
11031 error_at (location_of (reqs), "requires-clause on return type");
11032 reqs = declarator->u.function.requires_clause;
11034 /* Say it's a definition only for the CALL_EXPR
11035 closest to the identifier. */
11036 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
11038 /* Handle a late-specified return type. */
11039 tree late_return_type = declarator->u.function.late_return_type;
11040 if (funcdecl_p)
11042 if (tree auto_node = type_uses_auto (type))
11044 if (!late_return_type)
11046 if (current_class_type
11047 && LAMBDA_TYPE_P (current_class_type))
11048 /* OK for C++11 lambdas. */;
11049 else if (cxx_dialect < cxx14)
11051 error ("%qs function uses "
11052 "%<auto%> type specifier without trailing "
11053 "return type", name);
11054 inform (input_location, "deduced return type "
11055 "only available with -std=c++14 or "
11056 "-std=gnu++14");
11058 else if (virtualp)
11060 error ("virtual function cannot "
11061 "have deduced return type");
11062 virtualp = false;
11065 else if (!is_auto (type) && sfk != sfk_conversion)
11067 error ("%qs function with trailing return type has"
11068 " %qT as its type rather than plain %<auto%>",
11069 name, type);
11070 return error_mark_node;
11072 tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
11073 if (!tmpl)
11074 if (tree late_auto = type_uses_auto (late_return_type))
11075 tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
11076 if (tmpl)
11078 if (!dguide_name_p (unqualified_id))
11080 error_at (declarator->id_loc, "deduced class "
11081 "type %qD in function return type",
11082 DECL_NAME (tmpl));
11083 inform (DECL_SOURCE_LOCATION (tmpl),
11084 "%qD declared here", tmpl);
11085 return error_mark_node;
11087 else if (!late_return_type)
11089 error_at (declarator->id_loc, "deduction guide "
11090 "for %qT must have trailing return "
11091 "type", TREE_TYPE (tmpl));
11092 inform (DECL_SOURCE_LOCATION (tmpl),
11093 "%qD declared here", tmpl);
11094 return error_mark_node;
11096 else if (CLASS_TYPE_P (late_return_type)
11097 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11098 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11099 == tmpl))
11100 /* OK */;
11101 else
11102 error ("trailing return type %qT of deduction guide "
11103 "is not a specialization of %qT",
11104 late_return_type, TREE_TYPE (tmpl));
11107 else if (late_return_type
11108 && sfk != sfk_conversion)
11110 if (cxx_dialect < cxx11)
11111 /* Not using maybe_warn_cpp0x because this should
11112 always be an error. */
11113 error ("trailing return type only available with "
11114 "-std=c++11 or -std=gnu++11");
11115 else
11116 error ("%qs function with trailing return type not "
11117 "declared with %<auto%> type specifier", name);
11118 return error_mark_node;
11121 type = splice_late_return_type (type, late_return_type);
11122 if (type == error_mark_node)
11123 return error_mark_node;
11125 if (late_return_type)
11127 late_return_type_p = true;
11128 type_quals = cp_type_quals (type);
11131 if (type_quals != TYPE_UNQUALIFIED)
11133 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11134 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11135 "qualifiers ignored on function return type");
11136 /* We now know that the TYPE_QUALS don't apply to the
11137 decl, but to its return type. */
11138 type_quals = TYPE_UNQUALIFIED;
11141 /* Error about some types functions can't return. */
11143 if (TREE_CODE (type) == FUNCTION_TYPE)
11145 error_at (typespec_loc, "%qs declared as function returning "
11146 "a function", name);
11147 return error_mark_node;
11149 if (TREE_CODE (type) == ARRAY_TYPE)
11151 error_at (typespec_loc, "%qs declared as function returning "
11152 "an array", name);
11153 return error_mark_node;
11156 if (ctype == NULL_TREE
11157 && decl_context == FIELD
11158 && funcdecl_p
11159 && friendp == 0)
11160 ctype = current_class_type;
11162 if (ctype && (sfk == sfk_constructor
11163 || sfk == sfk_destructor))
11165 /* We are within a class's scope. If our declarator name
11166 is the same as the class name, and we are defining
11167 a function, then it is a constructor/destructor, and
11168 therefore returns a void type. */
11170 /* ISO C++ 12.4/2. A destructor may not be declared
11171 const or volatile. A destructor may not be static.
11172 A destructor may not be declared with ref-qualifier.
11174 ISO C++ 12.1. A constructor may not be declared
11175 const or volatile. A constructor may not be
11176 virtual. A constructor may not be static.
11177 A constructor may not be declared with ref-qualifier. */
11178 if (staticp == 2)
11179 error ((flags == DTOR_FLAG)
11180 ? G_("destructor cannot be static member function")
11181 : G_("constructor cannot be static member function"));
11182 if (memfn_quals)
11184 error ((flags == DTOR_FLAG)
11185 ? G_("destructors may not be cv-qualified")
11186 : G_("constructors may not be cv-qualified"));
11187 memfn_quals = TYPE_UNQUALIFIED;
11190 if (rqual)
11192 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11193 error ((flags == DTOR_FLAG)
11194 ? G_("destructors may not be ref-qualified")
11195 : G_("constructors may not be ref-qualified"));
11196 rqual = REF_QUAL_NONE;
11199 if (decl_context == FIELD
11200 && !member_function_or_else (ctype,
11201 current_class_type,
11202 flags))
11203 return error_mark_node;
11205 if (flags != DTOR_FLAG)
11207 /* It's a constructor. */
11208 if (explicitp == 1)
11209 explicitp = 2;
11210 if (virtualp)
11212 permerror (input_location,
11213 "constructors cannot be declared %<virtual%>");
11214 virtualp = 0;
11216 if (decl_context == FIELD
11217 && sfk != sfk_constructor)
11218 return error_mark_node;
11220 if (decl_context == FIELD)
11221 staticp = 0;
11223 else if (friendp)
11225 if (virtualp)
11227 /* Cannot be both friend and virtual. */
11228 error ("virtual functions cannot be friends");
11229 friendp = 0;
11231 if (decl_context == NORMAL)
11232 error ("friend declaration not in class definition");
11233 if (current_function_decl && funcdef_flag)
11235 error ("can%'t define friend function %qs in a local "
11236 "class definition", name);
11237 friendp = 0;
11240 else if (ctype && sfk == sfk_conversion)
11242 if (explicitp == 1)
11244 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11245 explicitp = 2;
11247 if (late_return_type_p)
11248 error ("a conversion function cannot have a trailing return type");
11250 else if (sfk == sfk_deduction_guide)
11252 if (explicitp == 1)
11253 explicitp = 2;
11256 tree pushed_scope = NULL_TREE;
11257 if (funcdecl_p
11258 && decl_context != FIELD
11259 && inner_declarator->u.id.qualifying_scope
11260 && CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
11261 pushed_scope
11262 = push_scope (inner_declarator->u.id.qualifying_scope);
11264 arg_types = grokparms (declarator->u.function.parameters, &parms);
11266 if (pushed_scope)
11267 pop_scope (pushed_scope);
11269 if (inner_declarator
11270 && inner_declarator->kind == cdk_id
11271 && inner_declarator->u.id.sfk == sfk_destructor
11272 && arg_types != void_list_node)
11274 error ("destructors may not have parameters");
11275 arg_types = void_list_node;
11276 parms = NULL_TREE;
11279 type = build_function_type (type, arg_types);
11281 tree attrs = declarator->std_attributes;
11282 if (tx_qual)
11284 tree att = build_tree_list (tx_qual, NULL_TREE);
11285 /* transaction_safe applies to the type, but
11286 transaction_safe_dynamic applies to the function. */
11287 if (is_attribute_p ("transaction_safe", tx_qual))
11288 attrs = chainon (attrs, att);
11289 else
11290 returned_attrs = chainon (returned_attrs, att);
11292 if (attrs)
11293 /* [dcl.fct]/2:
11295 The optional attribute-specifier-seq appertains to
11296 the function type. */
11297 decl_attributes (&type, attrs, 0);
11299 if (raises)
11300 type = build_exception_variant (type, raises);
11302 break;
11304 case cdk_pointer:
11305 case cdk_reference:
11306 case cdk_ptrmem:
11307 /* Filter out pointers-to-references and references-to-references.
11308 We can get these if a TYPE_DECL is used. */
11310 if (TYPE_REF_P (type))
11312 if (declarator->kind != cdk_reference)
11314 error ("cannot declare pointer to %q#T", type);
11315 type = TREE_TYPE (type);
11318 /* In C++0x, we allow reference to reference declarations
11319 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11320 and template type arguments [14.3.1/4 temp.arg.type]. The
11321 check for direct reference to reference declarations, which
11322 are still forbidden, occurs below. Reasoning behind the change
11323 can be found in DR106, DR540, and the rvalue reference
11324 proposals. */
11325 else if (cxx_dialect == cxx98)
11327 error ("cannot declare reference to %q#T", type);
11328 type = TREE_TYPE (type);
11331 else if (VOID_TYPE_P (type))
11333 if (declarator->kind == cdk_reference)
11334 error ("cannot declare reference to %q#T", type);
11335 else if (declarator->kind == cdk_ptrmem)
11336 error ("cannot declare pointer to %q#T member", type);
11339 /* We now know that the TYPE_QUALS don't apply to the decl,
11340 but to the target of the pointer. */
11341 type_quals = TYPE_UNQUALIFIED;
11343 /* This code used to handle METHOD_TYPE, but I don't think it's
11344 possible to get it here anymore. */
11345 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11346 if (declarator->kind == cdk_ptrmem
11347 && TREE_CODE (type) == FUNCTION_TYPE)
11349 memfn_quals |= type_memfn_quals (type);
11350 type = build_memfn_type (type,
11351 declarator->u.pointer.class_type,
11352 memfn_quals,
11353 rqual);
11354 if (type == error_mark_node)
11355 return error_mark_node;
11357 rqual = REF_QUAL_NONE;
11358 memfn_quals = TYPE_UNQUALIFIED;
11361 if (TREE_CODE (type) == FUNCTION_TYPE
11362 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11363 || type_memfn_rqual (type) != REF_QUAL_NONE))
11364 error (declarator->kind == cdk_reference
11365 ? G_("cannot declare reference to qualified function type %qT")
11366 : G_("cannot declare pointer to qualified function type %qT"),
11367 type);
11369 /* When the pointed-to type involves components of variable size,
11370 care must be taken to ensure that the size evaluation code is
11371 emitted early enough to dominate all the possible later uses
11372 and late enough for the variables on which it depends to have
11373 been assigned.
11375 This is expected to happen automatically when the pointed-to
11376 type has a name/declaration of it's own, but special attention
11377 is required if the type is anonymous.
11379 We handle the NORMAL and FIELD contexts here by inserting a
11380 dummy statement that just evaluates the size at a safe point
11381 and ensures it is not deferred until e.g. within a deeper
11382 conditional context (c++/43555).
11384 We expect nothing to be needed here for PARM or TYPENAME.
11385 Evaluating the size at this point for TYPENAME would
11386 actually be incorrect, as we might be in the middle of an
11387 expression with side effects on the pointed-to type size
11388 "arguments" prior to the pointer declaration point and the
11389 size evaluation could end up prior to the side effects. */
11391 if (!TYPE_NAME (type)
11392 && (decl_context == NORMAL || decl_context == FIELD)
11393 && at_function_scope_p ()
11394 && variably_modified_type_p (type, NULL_TREE))
11396 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11397 NULL_TREE, type);
11398 add_decl_expr (TYPE_NAME (type));
11401 if (declarator->kind == cdk_reference)
11403 /* In C++0x, the type we are creating a reference to might be
11404 a typedef which is itself a reference type. In that case,
11405 we follow the reference collapsing rules in
11406 [7.1.3/8 dcl.typedef] to create the final reference type:
11408 "If a typedef TD names a type that is a reference to a type
11409 T, an attempt to create the type 'lvalue reference to cv TD'
11410 creates the type 'lvalue reference to T,' while an attempt
11411 to create the type "rvalue reference to cv TD' creates the
11412 type TD."
11414 if (VOID_TYPE_P (type))
11415 /* We already gave an error. */;
11416 else if (TYPE_REF_P (type))
11418 if (declarator->u.reference.rvalue_ref)
11419 /* Leave type alone. */;
11420 else
11421 type = cp_build_reference_type (TREE_TYPE (type), false);
11423 else
11424 type = cp_build_reference_type
11425 (type, declarator->u.reference.rvalue_ref);
11427 /* In C++0x, we need this check for direct reference to
11428 reference declarations, which are forbidden by
11429 [8.3.2/5 dcl.ref]. Reference to reference declarations
11430 are only allowed indirectly through typedefs and template
11431 type arguments. Example:
11433 void foo(int & &); // invalid ref-to-ref decl
11435 typedef int & int_ref;
11436 void foo(int_ref &); // valid ref-to-ref decl
11438 if (inner_declarator && inner_declarator->kind == cdk_reference)
11439 error ("cannot declare reference to %q#T, which is not "
11440 "a typedef or a template type argument", type);
11442 else if (TREE_CODE (type) == METHOD_TYPE)
11443 type = build_ptrmemfunc_type (build_pointer_type (type));
11444 else if (declarator->kind == cdk_ptrmem)
11446 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11447 != NAMESPACE_DECL);
11448 if (declarator->u.pointer.class_type == error_mark_node)
11449 /* We will already have complained. */
11450 type = error_mark_node;
11451 else
11452 type = build_ptrmem_type (declarator->u.pointer.class_type,
11453 type);
11455 else
11456 type = build_pointer_type (type);
11458 /* Process a list of type modifier keywords (such as
11459 const or volatile) that were given inside the `*' or `&'. */
11461 if (declarator->u.pointer.qualifiers)
11463 type
11464 = cp_build_qualified_type (type,
11465 declarator->u.pointer.qualifiers);
11466 type_quals = cp_type_quals (type);
11469 /* Apply C++11 attributes to the pointer, and not to the
11470 type pointed to. This is unlike what is done for GNU
11471 attributes above. It is to comply with [dcl.ptr]/1:
11473 [the optional attribute-specifier-seq (7.6.1) appertains
11474 to the pointer and not to the object pointed to]. */
11475 if (declarator->std_attributes)
11476 decl_attributes (&type, declarator->std_attributes,
11479 ctype = NULL_TREE;
11480 break;
11482 case cdk_error:
11483 break;
11485 default:
11486 gcc_unreachable ();
11490 /* A `constexpr' specifier used in an object declaration declares
11491 the object as `const'. */
11492 if (constexpr_p && innermost_code != cdk_function)
11494 /* DR1688 says that a `constexpr' specifier in combination with
11495 `volatile' is valid. */
11497 if (!TYPE_REF_P (type))
11499 type_quals |= TYPE_QUAL_CONST;
11500 type = cp_build_qualified_type (type, type_quals);
11504 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11505 && TREE_CODE (type) != FUNCTION_TYPE
11506 && TREE_CODE (type) != METHOD_TYPE
11507 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11509 error ("template-id %qD used as a declarator",
11510 unqualified_id);
11511 unqualified_id = dname;
11514 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11515 qualified with a class-name, turn it into a METHOD_TYPE, unless
11516 we know that the function is static. We take advantage of this
11517 opportunity to do other processing that pertains to entities
11518 explicitly declared to be class members. Note that if DECLARATOR
11519 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11520 would not have exited the loop above. */
11521 if (declarator
11522 && declarator->kind == cdk_id
11523 && declarator->u.id.qualifying_scope
11524 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11526 ctype = declarator->u.id.qualifying_scope;
11527 ctype = TYPE_MAIN_VARIANT (ctype);
11528 template_count = num_template_headers_for_class (ctype);
11530 if (ctype == current_class_type)
11532 if (friendp)
11534 permerror (input_location, "member functions are implicitly "
11535 "friends of their class");
11536 friendp = 0;
11538 else
11539 permerror (declarator->id_loc,
11540 "extra qualification %<%T::%> on member %qs",
11541 ctype, name);
11543 else if (/* If the qualifying type is already complete, then we
11544 can skip the following checks. */
11545 !COMPLETE_TYPE_P (ctype)
11546 && (/* If the function is being defined, then
11547 qualifying type must certainly be complete. */
11548 funcdef_flag
11549 /* A friend declaration of "T::f" is OK, even if
11550 "T" is a template parameter. But, if this
11551 function is not a friend, the qualifying type
11552 must be a class. */
11553 || (!friendp && !CLASS_TYPE_P (ctype))
11554 /* For a declaration, the type need not be
11555 complete, if either it is dependent (since there
11556 is no meaningful definition of complete in that
11557 case) or the qualifying class is currently being
11558 defined. */
11559 || !(dependent_type_p (ctype)
11560 || currently_open_class (ctype)))
11561 /* Check that the qualifying type is complete. */
11562 && !complete_type_or_else (ctype, NULL_TREE))
11563 return error_mark_node;
11564 else if (TREE_CODE (type) == FUNCTION_TYPE)
11566 if (current_class_type
11567 && (!friendp || funcdef_flag || initialized))
11569 error (funcdef_flag || initialized
11570 ? G_("cannot define member function %<%T::%s%> "
11571 "within %qT")
11572 : G_("cannot declare member function %<%T::%s%> "
11573 "within %qT"),
11574 ctype, name, current_class_type);
11575 return error_mark_node;
11578 else if (typedef_p && current_class_type)
11580 error ("cannot declare member %<%T::%s%> within %qT",
11581 ctype, name, current_class_type);
11582 return error_mark_node;
11586 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11587 ctype = current_class_type;
11589 /* Now TYPE has the actual type. */
11591 if (returned_attrs)
11593 if (attrlist)
11594 *attrlist = chainon (returned_attrs, *attrlist);
11595 else
11596 attrlist = &returned_attrs;
11599 if (declarator
11600 && declarator->kind == cdk_id
11601 && declarator->std_attributes
11602 && attrlist != NULL)
11604 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11605 a declarator-id appertains to the entity that is declared. */
11606 if (declarator->std_attributes != error_mark_node)
11607 *attrlist = chainon (*attrlist, declarator->std_attributes);
11608 else
11609 /* We should have already diagnosed the issue (c++/78344). */
11610 gcc_assert (seen_error ());
11613 /* Handle parameter packs. */
11614 if (parameter_pack_p)
11616 if (decl_context == PARM)
11617 /* Turn the type into a pack expansion.*/
11618 type = make_pack_expansion (type);
11619 else
11620 error ("non-parameter %qs cannot be a parameter pack", name);
11623 if ((decl_context == FIELD || decl_context == PARM)
11624 && !processing_template_decl
11625 && variably_modified_type_p (type, NULL_TREE))
11627 if (decl_context == FIELD)
11628 error ("data member may not have variably modified type %qT", type);
11629 else
11630 error ("parameter may not have variably modified type %qT", type);
11631 type = error_mark_node;
11634 if (explicitp == 1 || (explicitp && friendp))
11636 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11637 in the declaration of a constructor or conversion function within
11638 a class definition. */
11639 if (!current_class_type)
11640 error_at (declspecs->locations[ds_explicit],
11641 "%<explicit%> outside class declaration");
11642 else if (friendp)
11643 error_at (declspecs->locations[ds_explicit],
11644 "%<explicit%> in friend declaration");
11645 else
11646 error_at (declspecs->locations[ds_explicit],
11647 "only declarations of constructors and conversion operators "
11648 "can be %<explicit%>");
11649 explicitp = 0;
11652 if (storage_class == sc_mutable)
11654 if (decl_context != FIELD || friendp)
11656 error ("non-member %qs cannot be declared %<mutable%>", name);
11657 storage_class = sc_none;
11659 else if (decl_context == TYPENAME || typedef_p)
11661 error ("non-object member %qs cannot be declared %<mutable%>", name);
11662 storage_class = sc_none;
11664 else if (TREE_CODE (type) == FUNCTION_TYPE
11665 || TREE_CODE (type) == METHOD_TYPE)
11667 error ("function %qs cannot be declared %<mutable%>", name);
11668 storage_class = sc_none;
11670 else if (staticp)
11672 error ("static %qs cannot be declared %<mutable%>", name);
11673 storage_class = sc_none;
11675 else if (type_quals & TYPE_QUAL_CONST)
11677 error ("const %qs cannot be declared %<mutable%>", name);
11678 storage_class = sc_none;
11680 else if (TYPE_REF_P (type))
11682 permerror (input_location, "reference %qs cannot be declared "
11683 "%<mutable%>", name);
11684 storage_class = sc_none;
11688 /* If this is declaring a typedef name, return a TYPE_DECL. */
11689 if (typedef_p && decl_context != TYPENAME)
11691 tree decl;
11693 /* This declaration:
11695 typedef void f(int) const;
11697 declares a function type which is not a member of any
11698 particular class, but which is cv-qualified; for
11699 example "f S::*" declares a pointer to a const-qualified
11700 member function of S. We record the cv-qualification in the
11701 function type. */
11702 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11704 type = apply_memfn_quals (type, memfn_quals, rqual);
11706 /* We have now dealt with these qualifiers. */
11707 memfn_quals = TYPE_UNQUALIFIED;
11708 rqual = REF_QUAL_NONE;
11711 if (type_uses_auto (type))
11713 error ("typedef declared %<auto%>");
11714 type = error_mark_node;
11717 if (reqs)
11718 error_at (location_of (reqs), "requires-clause on typedef");
11720 if (id_declarator && declarator->u.id.qualifying_scope)
11722 error ("typedef name may not be a nested-name-specifier");
11723 type = error_mark_node;
11726 if (decl_context == FIELD)
11727 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11728 else
11729 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11731 if (decl_context != FIELD)
11733 if (!current_function_decl)
11734 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11735 else if (DECL_MAYBE_IN_CHARGE_CDTOR_P (current_function_decl))
11736 /* The TYPE_DECL is "abstract" because there will be
11737 clones of this constructor/destructor, and there will
11738 be copies of this TYPE_DECL generated in those
11739 clones. The decloning optimization (for space) may
11740 revert this subsequently if it determines that
11741 the clones should share a common implementation. */
11742 DECL_ABSTRACT_P (decl) = true;
11744 else if (current_class_type
11745 && constructor_name_p (unqualified_id, current_class_type))
11746 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11747 "as enclosing class",
11748 unqualified_id);
11750 /* If the user declares "typedef struct {...} foo" then the
11751 struct will have an anonymous name. Fill that name in now.
11752 Nothing can refer to it, so nothing needs know about the name
11753 change. */
11754 if (type != error_mark_node
11755 && unqualified_id
11756 && TYPE_NAME (type)
11757 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11758 && TYPE_UNNAMED_P (type)
11759 && declspecs->type_definition_p
11760 && attributes_naming_typedef_ok (*attrlist)
11761 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11762 name_unnamed_type (type, decl);
11764 if (signed_p
11765 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11766 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11768 bad_specifiers (decl, BSP_TYPE, virtualp,
11769 memfn_quals != TYPE_UNQUALIFIED,
11770 inlinep, friendp, raises != NULL_TREE);
11772 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11773 /* Acknowledge that this was written:
11774 `using analias = atype;'. */
11775 TYPE_DECL_ALIAS_P (decl) = 1;
11777 return decl;
11780 /* Detect the case of an array type of unspecified size
11781 which came, as such, direct from a typedef name.
11782 We must copy the type, so that the array's domain can be
11783 individually set by the object's initializer. */
11785 if (type && typedef_type
11786 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11787 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11788 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11790 /* Detect where we're using a typedef of function type to declare a
11791 function. PARMS will not be set, so we must create it now. */
11793 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11795 tree decls = NULL_TREE;
11796 tree args;
11798 for (args = TYPE_ARG_TYPES (type);
11799 args && args != void_list_node;
11800 args = TREE_CHAIN (args))
11802 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
11803 TREE_VALUE (args));
11805 DECL_CHAIN (decl) = decls;
11806 decls = decl;
11809 parms = nreverse (decls);
11811 if (decl_context != TYPENAME)
11813 /* The qualifiers on the function type become the qualifiers on
11814 the non-static member function. */
11815 memfn_quals |= type_memfn_quals (type);
11816 rqual = type_memfn_rqual (type);
11817 type_quals = TYPE_UNQUALIFIED;
11821 /* If this is a type name (such as, in a cast or sizeof),
11822 compute the type and return it now. */
11824 if (decl_context == TYPENAME)
11826 /* Note that here we don't care about type_quals. */
11828 /* Special case: "friend class foo" looks like a TYPENAME context. */
11829 if (friendp)
11831 if (inlinep)
11833 error ("%<inline%> specified for friend class declaration");
11834 inlinep = 0;
11837 if (!current_aggr)
11839 /* Don't allow friend declaration without a class-key. */
11840 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11841 permerror (input_location, "template parameters cannot be friends");
11842 else if (TREE_CODE (type) == TYPENAME_TYPE)
11843 permerror (input_location, "friend declaration requires class-key, "
11844 "i.e. %<friend class %T::%D%>",
11845 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11846 else
11847 permerror (input_location, "friend declaration requires class-key, "
11848 "i.e. %<friend %#T%>",
11849 type);
11852 /* Only try to do this stuff if we didn't already give up. */
11853 if (type != integer_type_node)
11855 /* A friendly class? */
11856 if (current_class_type)
11857 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11858 /*complain=*/true);
11859 else
11860 error ("trying to make class %qT a friend of global scope",
11861 type);
11863 type = void_type_node;
11866 else if (memfn_quals || rqual)
11868 if (ctype == NULL_TREE
11869 && TREE_CODE (type) == METHOD_TYPE)
11870 ctype = TYPE_METHOD_BASETYPE (type);
11872 if (ctype)
11873 type = build_memfn_type (type, ctype, memfn_quals, rqual);
11874 /* Core issue #547: need to allow this in template type args.
11875 Allow it in general in C++11 for alias-declarations. */
11876 else if ((template_type_arg || cxx_dialect >= cxx11)
11877 && TREE_CODE (type) == FUNCTION_TYPE)
11878 type = apply_memfn_quals (type, memfn_quals, rqual);
11879 else
11880 error ("invalid qualifiers on non-member function type");
11883 if (reqs)
11884 error_at (location_of (reqs), "requires-clause on type-id");
11886 return type;
11888 else if (unqualified_id == NULL_TREE && decl_context != PARM
11889 && decl_context != CATCHPARM
11890 && TREE_CODE (type) != UNION_TYPE
11891 && ! bitfield
11892 && innermost_code != cdk_decomp)
11894 error ("abstract declarator %qT used as declaration", type);
11895 return error_mark_node;
11898 if (!FUNC_OR_METHOD_TYPE_P (type))
11900 /* Only functions may be declared using an operator-function-id. */
11901 if (dname && IDENTIFIER_ANY_OP_P (dname))
11903 error ("declaration of %qD as non-function", dname);
11904 return error_mark_node;
11907 if (reqs)
11908 error_at (location_of (reqs),
11909 "requires-clause on declaration of non-function type %qT",
11910 type);
11913 /* We don't check parameter types here because we can emit a better
11914 error message later. */
11915 if (decl_context != PARM)
11917 type = check_var_type (unqualified_id, type);
11918 if (type == error_mark_node)
11919 return error_mark_node;
11922 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11923 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11925 if (decl_context == PARM || decl_context == CATCHPARM)
11927 if (ctype || in_namespace)
11928 error ("cannot use %<::%> in parameter declaration");
11930 if (type_uses_auto (type)
11931 && !(cxx_dialect >= cxx17 && template_parm_flag))
11933 if (cxx_dialect >= cxx14)
11934 error ("%<auto%> parameter not permitted in this context");
11935 else
11936 error ("parameter declared %<auto%>");
11937 type = error_mark_node;
11940 /* A parameter declared as an array of T is really a pointer to T.
11941 One declared as a function is really a pointer to a function.
11942 One declared as a member is really a pointer to member. */
11944 if (TREE_CODE (type) == ARRAY_TYPE)
11946 /* Transfer const-ness of array into that of type pointed to. */
11947 type = build_pointer_type (TREE_TYPE (type));
11948 type_quals = TYPE_UNQUALIFIED;
11949 array_parameter_p = true;
11951 else if (TREE_CODE (type) == FUNCTION_TYPE)
11952 type = build_pointer_type (type);
11955 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
11956 && !(identifier_p (unqualified_id)
11957 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
11959 cp_cv_quals real_quals = memfn_quals;
11960 if (cxx_dialect < cxx14 && constexpr_p
11961 && sfk != sfk_constructor && sfk != sfk_destructor)
11962 real_quals |= TYPE_QUAL_CONST;
11963 type = build_memfn_type (type, ctype, real_quals, rqual);
11967 tree decl = NULL_TREE;
11969 if (decl_context == PARM)
11971 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
11972 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
11974 bad_specifiers (decl, BSP_PARM, virtualp,
11975 memfn_quals != TYPE_UNQUALIFIED,
11976 inlinep, friendp, raises != NULL_TREE);
11978 else if (decl_context == FIELD)
11980 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
11981 if (tree auto_node = type_uses_auto (type))
11983 location_t loc = declspecs->locations[ds_type_spec];
11984 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
11985 error_at (loc, "invalid use of template-name %qE without an "
11986 "argument list",
11987 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
11988 else
11989 error_at (loc, "non-static data member declared with "
11990 "placeholder %qT", auto_node);
11991 type = error_mark_node;
11994 /* The C99 flexible array extension. */
11995 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
11996 && TYPE_DOMAIN (type) == NULL_TREE)
11998 if (ctype
11999 && (TREE_CODE (ctype) == UNION_TYPE
12000 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
12002 error ("flexible array member in union");
12003 type = error_mark_node;
12005 else
12007 /* Array is a flexible member. */
12008 if (in_system_header_at (input_location))
12009 /* Do not warn on flexible array members in system
12010 headers because glibc uses them. */;
12011 else if (name)
12012 pedwarn (input_location, OPT_Wpedantic,
12013 "ISO C++ forbids flexible array member %qs", name);
12014 else
12015 pedwarn (input_location, OPT_Wpedantic,
12016 "ISO C++ forbids flexible array members");
12018 /* Flexible array member has a null domain. */
12019 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12023 if (type == error_mark_node)
12025 /* Happens when declaring arrays of sizes which
12026 are error_mark_node, for example. */
12027 decl = NULL_TREE;
12029 else if (in_namespace && !friendp)
12031 /* Something like struct S { int N::j; }; */
12032 error ("invalid use of %<::%>");
12033 return error_mark_node;
12035 else if (TREE_CODE (type) == FUNCTION_TYPE
12036 || TREE_CODE (type) == METHOD_TYPE)
12038 int publicp = 0;
12039 tree function_context;
12041 if (friendp == 0)
12043 /* This should never happen in pure C++ (the check
12044 could be an assert). It could happen in
12045 Objective-C++ if someone writes invalid code that
12046 uses a function declaration for an instance
12047 variable or property (instance variables and
12048 properties are parsed as FIELD_DECLs, but they are
12049 part of an Objective-C class, not a C++ class).
12050 That code is invalid and is caught by this
12051 check. */
12052 if (!ctype)
12054 error ("declaration of function %qD in invalid context",
12055 unqualified_id);
12056 return error_mark_node;
12059 /* ``A union may [ ... ] not [ have ] virtual functions.''
12060 ARM 9.5 */
12061 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12063 error ("function %qD declared %<virtual%> inside a union",
12064 unqualified_id);
12065 return error_mark_node;
12068 if (virtualp
12069 && identifier_p (unqualified_id)
12070 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
12072 error ("%qD cannot be declared %<virtual%>, since it "
12073 "is always static", unqualified_id);
12074 virtualp = 0;
12078 /* Check that the name used for a destructor makes sense. */
12079 if (sfk == sfk_destructor)
12081 tree uqname = id_declarator->u.id.unqualified_name;
12083 if (!ctype)
12085 gcc_assert (friendp);
12086 error ("expected qualified name in friend declaration "
12087 "for destructor %qD", uqname);
12088 return error_mark_node;
12091 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
12093 error ("declaration of %qD as member of %qT",
12094 uqname, ctype);
12095 return error_mark_node;
12097 if (concept_p)
12099 error ("a destructor cannot be %<concept%>");
12100 return error_mark_node;
12102 if (constexpr_p)
12104 error ("a destructor cannot be %<constexpr%>");
12105 return error_mark_node;
12108 else if (sfk == sfk_constructor && friendp && !ctype)
12110 error ("expected qualified name in friend declaration "
12111 "for constructor %qD",
12112 id_declarator->u.id.unqualified_name);
12113 return error_mark_node;
12115 if (sfk == sfk_constructor)
12116 if (concept_p)
12118 error ("a constructor cannot be %<concept%>");
12119 return error_mark_node;
12121 if (concept_p)
12123 error ("a concept cannot be a member function");
12124 concept_p = false;
12127 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12129 tree tmpl = TREE_OPERAND (unqualified_id, 0);
12130 if (variable_template_p (tmpl))
12132 error ("specialization of variable template %qD "
12133 "declared as function", tmpl);
12134 inform (DECL_SOURCE_LOCATION (tmpl),
12135 "variable template declared here");
12136 return error_mark_node;
12140 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12141 function_context = (ctype != NULL_TREE) ?
12142 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12143 publicp = (! friendp || ! staticp)
12144 && function_context == NULL_TREE;
12146 decl = grokfndecl (ctype, type,
12147 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12148 ? unqualified_id : dname,
12149 parms,
12150 unqualified_id,
12151 reqs,
12152 virtualp, flags, memfn_quals, rqual, raises,
12153 friendp ? -1 : 0, friendp, publicp,
12154 inlinep | (2 * constexpr_p) | (4 * concept_p),
12155 initialized == SD_DELETED, sfk,
12156 funcdef_flag, late_return_type_p,
12157 template_count, in_namespace,
12158 attrlist, declarator->id_loc);
12159 decl = set_virt_specifiers (decl, virt_specifiers);
12160 if (decl == NULL_TREE)
12161 return error_mark_node;
12162 #if 0
12163 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12164 /* The decl and setting of decl_attr is also turned off. */
12165 decl = build_decl_attribute_variant (decl, decl_attr);
12166 #endif
12168 /* [class.conv.ctor]
12170 A constructor declared without the function-specifier
12171 explicit that can be called with a single parameter
12172 specifies a conversion from the type of its first
12173 parameter to the type of its class. Such a constructor
12174 is called a converting constructor. */
12175 if (explicitp == 2)
12176 DECL_NONCONVERTING_P (decl) = 1;
12178 else if (!staticp && !dependent_type_p (type)
12179 && !COMPLETE_TYPE_P (complete_type (type))
12180 && (!complete_or_array_type_p (type)
12181 || initialized == 0))
12183 if (TREE_CODE (type) != ARRAY_TYPE
12184 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12186 if (unqualified_id)
12188 error ("field %qD has incomplete type %qT",
12189 unqualified_id, type);
12190 cxx_incomplete_type_inform (strip_array_types (type));
12192 else
12193 error ("name %qT has incomplete type", type);
12195 type = error_mark_node;
12196 decl = NULL_TREE;
12199 else
12201 if (friendp)
12203 error ("%qE is neither function nor member function; "
12204 "cannot be declared friend", unqualified_id);
12205 return error_mark_node;
12207 decl = NULL_TREE;
12210 if (friendp)
12212 /* Friends are treated specially. */
12213 if (ctype == current_class_type)
12214 ; /* We already issued a permerror. */
12215 else if (decl && DECL_NAME (decl))
12217 if (template_class_depth (current_class_type) == 0)
12219 decl = check_explicit_specialization
12220 (unqualified_id, decl, template_count,
12221 2 * funcdef_flag + 4);
12222 if (decl == error_mark_node)
12223 return error_mark_node;
12226 decl = do_friend (ctype, unqualified_id, decl,
12227 *attrlist, flags,
12228 funcdef_flag);
12229 return decl;
12231 else
12232 return error_mark_node;
12235 /* Structure field. It may not be a function, except for C++. */
12237 if (decl == NULL_TREE)
12239 if (staticp)
12241 /* C++ allows static class members. All other work
12242 for this is done by grokfield. */
12243 decl = build_lang_decl_loc (declarator
12244 ? declarator->id_loc
12245 : input_location,
12246 VAR_DECL, unqualified_id, type);
12247 set_linkage_for_static_data_member (decl);
12248 if (concept_p)
12249 error ("static data member %qE declared %<concept%>",
12250 unqualified_id);
12251 else if (constexpr_p && !initialized)
12253 error ("%<constexpr%> static data member %qD must have an "
12254 "initializer", decl);
12255 constexpr_p = false;
12258 if (inlinep)
12259 mark_inline_variable (decl);
12261 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12262 && !(cxx_dialect >= cxx17 && constexpr_p))
12263 /* Even if there is an in-class initialization, DECL
12264 is considered undefined until an out-of-class
12265 definition is provided, unless this is an inline
12266 variable. */
12267 DECL_EXTERNAL (decl) = 1;
12269 if (thread_p)
12271 CP_DECL_THREAD_LOCAL_P (decl) = true;
12272 if (!processing_template_decl)
12273 set_decl_tls_model (decl, decl_default_tls_model (decl));
12274 if (declspecs->gnu_thread_keyword_p)
12275 SET_DECL_GNU_TLS_P (decl);
12278 else
12280 if (concept_p)
12281 error ("non-static data member %qE declared %<concept%>",
12282 unqualified_id);
12283 else if (constexpr_p)
12285 error ("non-static data member %qE declared %<constexpr%>",
12286 unqualified_id);
12287 constexpr_p = false;
12289 decl = build_decl (input_location,
12290 FIELD_DECL, unqualified_id, type);
12291 DECL_NONADDRESSABLE_P (decl) = bitfield;
12292 if (bitfield && !unqualified_id)
12294 TREE_NO_WARNING (decl) = 1;
12295 DECL_PADDING_P (decl) = 1;
12298 if (storage_class == sc_mutable)
12300 DECL_MUTABLE_P (decl) = 1;
12301 storage_class = sc_none;
12304 if (initialized)
12306 /* An attempt is being made to initialize a non-static
12307 member. This is new in C++11. */
12308 maybe_warn_cpp0x (CPP0X_NSDMI);
12310 /* If this has been parsed with static storage class, but
12311 errors forced staticp to be cleared, ensure NSDMI is
12312 not present. */
12313 if (declspecs->storage_class == sc_static)
12314 DECL_INITIAL (decl) = error_mark_node;
12318 bad_specifiers (decl, BSP_FIELD, virtualp,
12319 memfn_quals != TYPE_UNQUALIFIED,
12320 staticp ? false : inlinep, friendp,
12321 raises != NULL_TREE);
12324 else if (TREE_CODE (type) == FUNCTION_TYPE
12325 || TREE_CODE (type) == METHOD_TYPE)
12327 tree original_name;
12328 int publicp = 0;
12330 if (!unqualified_id)
12331 return error_mark_node;
12333 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12334 original_name = dname;
12335 else
12336 original_name = unqualified_id;
12337 // FIXME:gcc_assert (original_name == dname);
12339 if (storage_class == sc_auto)
12340 error ("storage class %<auto%> invalid for function %qs", name);
12341 else if (storage_class == sc_register)
12342 error ("storage class %<register%> invalid for function %qs", name);
12343 else if (thread_p)
12345 if (declspecs->gnu_thread_keyword_p)
12346 error ("storage class %<__thread%> invalid for function %qs",
12347 name);
12348 else
12349 error ("storage class %<thread_local%> invalid for function %qs",
12350 name);
12353 if (virt_specifiers)
12354 error ("virt-specifiers in %qs not allowed outside a class definition", name);
12355 /* Function declaration not at top level.
12356 Storage classes other than `extern' are not allowed
12357 and `extern' makes no difference. */
12358 if (! toplevel_bindings_p ()
12359 && (storage_class == sc_static
12360 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12361 && pedantic)
12363 if (storage_class == sc_static)
12364 pedwarn (input_location, OPT_Wpedantic,
12365 "%<static%> specifier invalid for function %qs "
12366 "declared out of global scope", name);
12367 else
12368 pedwarn (input_location, OPT_Wpedantic,
12369 "%<inline%> specifier invalid for function %qs "
12370 "declared out of global scope", name);
12373 if (ctype == NULL_TREE)
12375 if (virtualp)
12377 error ("virtual non-class function %qs", name);
12378 virtualp = 0;
12380 else if (sfk == sfk_constructor
12381 || sfk == sfk_destructor)
12383 error (funcdef_flag
12384 ? G_("%qs defined in a non-class scope")
12385 : G_("%qs declared in a non-class scope"), name);
12386 sfk = sfk_none;
12390 /* Record whether the function is public. */
12391 publicp = (ctype != NULL_TREE
12392 || storage_class != sc_static);
12394 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12395 reqs, virtualp, flags, memfn_quals, rqual, raises,
12396 1, friendp,
12397 publicp,
12398 inlinep | (2 * constexpr_p) | (4 * concept_p),
12399 initialized == SD_DELETED,
12400 sfk,
12401 funcdef_flag,
12402 late_return_type_p,
12403 template_count, in_namespace, attrlist,
12404 declarator->id_loc);
12405 if (decl == NULL_TREE)
12406 return error_mark_node;
12408 if (explicitp == 2)
12409 DECL_NONCONVERTING_P (decl) = 1;
12410 if (staticp == 1)
12412 int invalid_static = 0;
12414 /* Don't allow a static member function in a class, and forbid
12415 declaring main to be static. */
12416 if (TREE_CODE (type) == METHOD_TYPE)
12418 permerror (input_location, "cannot declare member function %qD to have "
12419 "static linkage", decl);
12420 invalid_static = 1;
12422 else if (current_function_decl)
12424 /* 7.1.1: There can be no static function declarations within a
12425 block. */
12426 error_at (declspecs->locations[ds_storage_class],
12427 "cannot declare static function inside another function");
12428 invalid_static = 1;
12431 if (invalid_static)
12433 staticp = 0;
12434 storage_class = sc_none;
12438 else
12440 /* It's a variable. */
12442 /* An uninitialized decl with `extern' is a reference. */
12443 decl = grokvardecl (type, dname, unqualified_id,
12444 declspecs,
12445 initialized,
12446 type_quals,
12447 inlinep,
12448 concept_p,
12449 template_count,
12450 ctype ? ctype : in_namespace);
12451 if (decl == NULL_TREE)
12452 return error_mark_node;
12454 bad_specifiers (decl, BSP_VAR, virtualp,
12455 memfn_quals != TYPE_UNQUALIFIED,
12456 inlinep, friendp, raises != NULL_TREE);
12458 if (ctype)
12460 DECL_CONTEXT (decl) = ctype;
12461 if (staticp == 1)
12463 permerror (input_location, "%<static%> may not be used when defining "
12464 "(as opposed to declaring) a static data member");
12465 staticp = 0;
12466 storage_class = sc_none;
12468 if (storage_class == sc_register && TREE_STATIC (decl))
12470 error ("static member %qD declared %<register%>", decl);
12471 storage_class = sc_none;
12473 if (storage_class == sc_extern && pedantic)
12475 pedwarn (input_location, OPT_Wpedantic,
12476 "cannot explicitly declare member %q#D to have "
12477 "extern linkage", decl);
12478 storage_class = sc_none;
12481 else if (constexpr_p && DECL_EXTERNAL (decl))
12483 error ("declaration of %<constexpr%> variable %qD "
12484 "is not a definition", decl);
12485 constexpr_p = false;
12488 if (inlinep)
12489 mark_inline_variable (decl);
12490 if (innermost_code == cdk_decomp)
12492 gcc_assert (declarator && declarator->kind == cdk_decomp);
12493 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12494 DECL_ARTIFICIAL (decl) = 1;
12495 fit_decomposition_lang_decl (decl, NULL_TREE);
12499 if (VAR_P (decl) && !initialized)
12500 if (tree auto_node = type_uses_auto (type))
12501 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12503 location_t loc = declspecs->locations[ds_type_spec];
12504 error_at (loc, "declaration of %q#D has no initializer", decl);
12505 TREE_TYPE (decl) = error_mark_node;
12508 if (storage_class == sc_extern && initialized && !funcdef_flag)
12510 if (toplevel_bindings_p ())
12512 /* It's common practice (and completely valid) to have a const
12513 be initialized and declared extern. */
12514 if (!(type_quals & TYPE_QUAL_CONST))
12515 warning (0, "%qs initialized and declared %<extern%>", name);
12517 else
12519 error ("%qs has both %<extern%> and initializer", name);
12520 return error_mark_node;
12524 /* Record `register' declaration for warnings on &
12525 and in case doing stupid register allocation. */
12527 if (storage_class == sc_register)
12529 DECL_REGISTER (decl) = 1;
12530 /* Warn about register storage specifiers on PARM_DECLs. */
12531 if (TREE_CODE (decl) == PARM_DECL)
12533 if (cxx_dialect >= cxx17)
12534 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12535 "ISO C++17 does not allow %<register%> storage "
12536 "class specifier");
12537 else
12538 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12539 "%<register%> storage class specifier used");
12542 else if (storage_class == sc_extern)
12543 DECL_THIS_EXTERN (decl) = 1;
12544 else if (storage_class == sc_static)
12545 DECL_THIS_STATIC (decl) = 1;
12547 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12548 if (constexpr_p && VAR_P (decl))
12549 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12551 /* Record constancy and volatility on the DECL itself . There's
12552 no need to do this when processing a template; we'll do this
12553 for the instantiated declaration based on the type of DECL. */
12554 if (!processing_template_decl)
12555 cp_apply_type_quals_to_decl (type_quals, decl);
12557 return decl;
12561 /* Subroutine of start_function. Ensure that each of the parameter
12562 types (as listed in PARMS) is complete, as is required for a
12563 function definition. */
12565 static void
12566 require_complete_types_for_parms (tree parms)
12568 for (; parms; parms = DECL_CHAIN (parms))
12570 if (dependent_type_p (TREE_TYPE (parms)))
12571 continue;
12572 if (!VOID_TYPE_P (TREE_TYPE (parms))
12573 && complete_type_or_else (TREE_TYPE (parms), parms))
12575 relayout_decl (parms);
12576 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12578 maybe_warn_parm_abi (TREE_TYPE (parms),
12579 DECL_SOURCE_LOCATION (parms));
12581 else
12582 /* grokparms or complete_type_or_else will have already issued
12583 an error. */
12584 TREE_TYPE (parms) = error_mark_node;
12588 /* Returns nonzero if T is a local variable. */
12591 local_variable_p (const_tree t)
12593 if ((VAR_P (t)
12594 /* A VAR_DECL with a context that is a _TYPE is a static data
12595 member. */
12596 && !TYPE_P (CP_DECL_CONTEXT (t))
12597 /* Any other non-local variable must be at namespace scope. */
12598 && !DECL_NAMESPACE_SCOPE_P (t))
12599 || (TREE_CODE (t) == PARM_DECL))
12600 return 1;
12602 return 0;
12605 /* Like local_variable_p, but suitable for use as a tree-walking
12606 function. */
12608 static tree
12609 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12610 void * /*data*/)
12612 if (local_variable_p (*tp)
12613 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12614 return *tp;
12615 else if (TYPE_P (*tp))
12616 *walk_subtrees = 0;
12618 return NULL_TREE;
12621 /* Check that ARG, which is a default-argument expression for a
12622 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12623 something goes wrong. DECL may also be a _TYPE node, rather than a
12624 DECL, if there is no DECL available. */
12626 tree
12627 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12629 tree var;
12630 tree decl_type;
12632 if (TREE_CODE (arg) == DEFAULT_ARG)
12633 /* We get a DEFAULT_ARG when looking at an in-class declaration
12634 with a default argument. Ignore the argument for now; we'll
12635 deal with it after the class is complete. */
12636 return arg;
12638 if (TYPE_P (decl))
12640 decl_type = decl;
12641 decl = NULL_TREE;
12643 else
12644 decl_type = TREE_TYPE (decl);
12646 if (arg == error_mark_node
12647 || decl == error_mark_node
12648 || TREE_TYPE (arg) == error_mark_node
12649 || decl_type == error_mark_node)
12650 /* Something already went wrong. There's no need to check
12651 further. */
12652 return error_mark_node;
12654 /* [dcl.fct.default]
12656 A default argument expression is implicitly converted to the
12657 parameter type. */
12658 ++cp_unevaluated_operand;
12659 /* Avoid digest_init clobbering the initializer. */
12660 tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
12661 perform_implicit_conversion_flags (decl_type, carg, complain,
12662 LOOKUP_IMPLICIT);
12663 --cp_unevaluated_operand;
12665 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12666 the call sites. */
12667 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12668 && null_ptr_cst_p (arg))
12669 return nullptr_node;
12671 /* [dcl.fct.default]
12673 Local variables shall not be used in default argument
12674 expressions.
12676 The keyword `this' shall not be used in a default argument of a
12677 member function. */
12678 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12679 if (var)
12681 if (complain & tf_warning_or_error)
12683 if (DECL_NAME (var) == this_identifier)
12684 permerror (input_location, "default argument %qE uses %qD",
12685 arg, var);
12686 else
12687 error ("default argument %qE uses local variable %qD", arg, var);
12689 return error_mark_node;
12692 /* All is well. */
12693 return arg;
12696 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12698 static tree
12699 type_is_deprecated (tree type)
12701 enum tree_code code;
12702 if (TREE_DEPRECATED (type))
12703 return type;
12704 if (TYPE_NAME (type))
12706 if (TREE_DEPRECATED (TYPE_NAME (type)))
12707 return type;
12708 else
12709 return NULL_TREE;
12712 /* Do warn about using typedefs to a deprecated class. */
12713 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12714 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12716 code = TREE_CODE (type);
12718 if (code == POINTER_TYPE || code == REFERENCE_TYPE
12719 || code == OFFSET_TYPE || code == FUNCTION_TYPE
12720 || code == METHOD_TYPE || code == ARRAY_TYPE)
12721 return type_is_deprecated (TREE_TYPE (type));
12723 if (TYPE_PTRMEMFUNC_P (type))
12724 return type_is_deprecated
12725 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12727 return NULL_TREE;
12730 /* Decode the list of parameter types for a function type.
12731 Given the list of things declared inside the parens,
12732 return a list of types.
12734 If this parameter does not end with an ellipsis, we append
12735 void_list_node.
12737 *PARMS is set to the chain of PARM_DECLs created. */
12739 tree
12740 grokparms (tree parmlist, tree *parms)
12742 tree result = NULL_TREE;
12743 tree decls = NULL_TREE;
12744 tree parm;
12745 int any_error = 0;
12747 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12749 tree type = NULL_TREE;
12750 tree init = TREE_PURPOSE (parm);
12751 tree decl = TREE_VALUE (parm);
12753 if (parm == void_list_node)
12754 break;
12756 if (! decl || TREE_TYPE (decl) == error_mark_node)
12757 continue;
12759 type = TREE_TYPE (decl);
12760 if (VOID_TYPE_P (type))
12762 if (same_type_p (type, void_type_node)
12763 && !init
12764 && !DECL_NAME (decl) && !result
12765 && TREE_CHAIN (parm) == void_list_node)
12766 /* DR 577: A parameter list consisting of a single
12767 unnamed parameter of non-dependent type 'void'. */
12768 break;
12769 else if (cv_qualified_p (type))
12770 error_at (DECL_SOURCE_LOCATION (decl),
12771 "invalid use of cv-qualified type %qT in "
12772 "parameter declaration", type);
12773 else
12774 error_at (DECL_SOURCE_LOCATION (decl),
12775 "invalid use of type %<void%> in parameter "
12776 "declaration");
12777 /* It's not a good idea to actually create parameters of
12778 type `void'; other parts of the compiler assume that a
12779 void type terminates the parameter list. */
12780 type = error_mark_node;
12781 TREE_TYPE (decl) = error_mark_node;
12784 if (type != error_mark_node)
12786 if (deprecated_state != DEPRECATED_SUPPRESS)
12788 tree deptype = type_is_deprecated (type);
12789 if (deptype)
12790 cp_warn_deprecated_use (deptype);
12793 /* Top-level qualifiers on the parameters are
12794 ignored for function types. */
12795 type = cp_build_qualified_type (type, 0);
12796 if (TREE_CODE (type) == METHOD_TYPE)
12798 error ("parameter %qD invalidly declared method type", decl);
12799 type = build_pointer_type (type);
12800 TREE_TYPE (decl) = type;
12802 else if (abstract_virtuals_error (decl, type))
12803 any_error = 1; /* Seems like a good idea. */
12804 else if (cxx_dialect < cxx17 && INDIRECT_TYPE_P (type))
12806 /* Before C++17 DR 393:
12807 [dcl.fct]/6, parameter types cannot contain pointers
12808 (references) to arrays of unknown bound. */
12809 tree t = TREE_TYPE (type);
12810 int ptr = TYPE_PTR_P (type);
12812 while (1)
12814 if (TYPE_PTR_P (t))
12815 ptr = 1;
12816 else if (TREE_CODE (t) != ARRAY_TYPE)
12817 break;
12818 else if (!TYPE_DOMAIN (t))
12819 break;
12820 t = TREE_TYPE (t);
12822 if (TREE_CODE (t) == ARRAY_TYPE)
12823 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
12825 ? G_("parameter %qD includes pointer to array of "
12826 "unknown bound %qT")
12827 : G_("parameter %qD includes reference to array of "
12828 "unknown bound %qT"),
12829 decl, t);
12832 if (any_error)
12833 init = NULL_TREE;
12834 else if (init && !processing_template_decl)
12835 init = check_default_argument (decl, init, tf_warning_or_error);
12838 DECL_CHAIN (decl) = decls;
12839 decls = decl;
12840 result = tree_cons (init, type, result);
12842 decls = nreverse (decls);
12843 result = nreverse (result);
12844 if (parm)
12845 result = chainon (result, void_list_node);
12846 *parms = decls;
12848 return result;
12852 /* D is a constructor or overloaded `operator='.
12854 Let T be the class in which D is declared. Then, this function
12855 returns:
12857 -1 if D's is an ill-formed constructor or copy assignment operator
12858 whose first parameter is of type `T'.
12859 0 if D is not a copy constructor or copy assignment
12860 operator.
12861 1 if D is a copy constructor or copy assignment operator whose
12862 first parameter is a reference to non-const qualified T.
12863 2 if D is a copy constructor or copy assignment operator whose
12864 first parameter is a reference to const qualified T.
12866 This function can be used as a predicate. Positive values indicate
12867 a copy constructor and nonzero values indicate a copy assignment
12868 operator. */
12871 copy_fn_p (const_tree d)
12873 tree args;
12874 tree arg_type;
12875 int result = 1;
12877 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12879 if (TREE_CODE (d) == TEMPLATE_DECL
12880 || (DECL_TEMPLATE_INFO (d)
12881 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12882 /* Instantiations of template member functions are never copy
12883 functions. Note that member functions of templated classes are
12884 represented as template functions internally, and we must
12885 accept those as copy functions. */
12886 return 0;
12888 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12889 if (!args)
12890 return 0;
12892 arg_type = TREE_VALUE (args);
12893 if (arg_type == error_mark_node)
12894 return 0;
12896 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12898 /* Pass by value copy assignment operator. */
12899 result = -1;
12901 else if (TYPE_REF_P (arg_type)
12902 && !TYPE_REF_IS_RVALUE (arg_type)
12903 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12905 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12906 result = 2;
12908 else
12909 return 0;
12911 args = TREE_CHAIN (args);
12913 if (args && args != void_list_node && !TREE_PURPOSE (args))
12914 /* There are more non-optional args. */
12915 return 0;
12917 return result;
12920 /* D is a constructor or overloaded `operator='.
12922 Let T be the class in which D is declared. Then, this function
12923 returns true when D is a move constructor or move assignment
12924 operator, false otherwise. */
12926 bool
12927 move_fn_p (const_tree d)
12929 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12931 if (cxx_dialect == cxx98)
12932 /* There are no move constructors if we are in C++98 mode. */
12933 return false;
12935 if (TREE_CODE (d) == TEMPLATE_DECL
12936 || (DECL_TEMPLATE_INFO (d)
12937 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12938 /* Instantiations of template member functions are never move
12939 functions. Note that member functions of templated classes are
12940 represented as template functions internally, and we must
12941 accept those as move functions. */
12942 return 0;
12944 return move_signature_fn_p (d);
12947 /* D is a constructor or overloaded `operator='.
12949 Then, this function returns true when D has the same signature as a move
12950 constructor or move assignment operator (because either it is such a
12951 ctor/op= or it is a template specialization with the same signature),
12952 false otherwise. */
12954 bool
12955 move_signature_fn_p (const_tree d)
12957 tree args;
12958 tree arg_type;
12959 bool result = false;
12961 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12962 if (!args)
12963 return 0;
12965 arg_type = TREE_VALUE (args);
12966 if (arg_type == error_mark_node)
12967 return 0;
12969 if (TYPE_REF_P (arg_type)
12970 && TYPE_REF_IS_RVALUE (arg_type)
12971 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
12972 DECL_CONTEXT (d)))
12973 result = true;
12975 args = TREE_CHAIN (args);
12977 if (args && args != void_list_node && !TREE_PURPOSE (args))
12978 /* There are more non-optional args. */
12979 return false;
12981 return result;
12984 /* Remember any special properties of member function DECL. */
12986 void
12987 grok_special_member_properties (tree decl)
12989 tree class_type;
12991 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
12992 return;
12994 class_type = DECL_CONTEXT (decl);
12995 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
12997 int ctor = copy_fn_p (decl);
12999 if (!DECL_ARTIFICIAL (decl))
13000 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
13002 if (ctor > 0)
13004 /* [class.copy]
13006 A non-template constructor for class X is a copy
13007 constructor if its first parameter is of type X&, const
13008 X&, volatile X& or const volatile X&, and either there
13009 are no other parameters or else all other parameters have
13010 default arguments. */
13011 TYPE_HAS_COPY_CTOR (class_type) = 1;
13012 if (user_provided_p (decl))
13013 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
13014 if (ctor > 1)
13015 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
13017 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
13018 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
13019 else if (move_fn_p (decl) && user_provided_p (decl))
13020 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
13021 else if (is_list_ctor (decl))
13022 TYPE_HAS_LIST_CTOR (class_type) = 1;
13024 if (DECL_DECLARED_CONSTEXPR_P (decl)
13025 && !ctor && !move_fn_p (decl))
13026 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
13028 else if (DECL_NAME (decl) == assign_op_identifier)
13030 /* [class.copy]
13032 A non-template assignment operator for class X is a copy
13033 assignment operator if its parameter is of type X, X&, const
13034 X&, volatile X& or const volatile X&. */
13036 int assop = copy_fn_p (decl);
13038 if (assop)
13040 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
13041 if (user_provided_p (decl))
13042 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
13043 if (assop != 1)
13044 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
13046 else if (move_fn_p (decl) && user_provided_p (decl))
13047 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
13049 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
13050 TYPE_HAS_CONVERSION (class_type) = true;
13052 /* Destructors are handled in check_methods. */
13055 /* Check a constructor DECL has the correct form. Complains
13056 if the class has a constructor of the form X(X). */
13058 bool
13059 grok_ctor_properties (const_tree ctype, const_tree decl)
13061 int ctor_parm = copy_fn_p (decl);
13063 if (ctor_parm < 0)
13065 /* [class.copy]
13067 A declaration of a constructor for a class X is ill-formed if
13068 its first parameter is of type (optionally cv-qualified) X
13069 and either there are no other parameters or else all other
13070 parameters have default arguments.
13072 We *don't* complain about member template instantiations that
13073 have this form, though; they can occur as we try to decide
13074 what constructor to use during overload resolution. Since
13075 overload resolution will never prefer such a constructor to
13076 the non-template copy constructor (which is either explicitly
13077 or implicitly defined), there's no need to worry about their
13078 existence. Theoretically, they should never even be
13079 instantiated, but that's hard to forestall. */
13080 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
13081 ctype, ctype);
13082 return false;
13085 return true;
13088 /* DECL is a declaration for an overloaded or conversion operator. If
13089 COMPLAIN is true, errors are issued for invalid declarations. */
13091 bool
13092 grok_op_properties (tree decl, bool complain)
13094 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13095 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
13096 tree name = DECL_NAME (decl);
13097 location_t loc = DECL_SOURCE_LOCATION (decl);
13099 tree class_type = DECL_CONTEXT (decl);
13100 if (class_type && !CLASS_TYPE_P (class_type))
13101 class_type = NULL_TREE;
13103 tree_code operator_code;
13104 unsigned op_flags;
13105 if (IDENTIFIER_CONV_OP_P (name))
13107 /* Conversion operators are TYPE_EXPR for the purposes of this
13108 function. */
13109 operator_code = TYPE_EXPR;
13110 op_flags = OVL_OP_FLAG_UNARY;
13112 else
13114 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13116 operator_code = ovl_op->tree_code;
13117 op_flags = ovl_op->flags;
13118 gcc_checking_assert (operator_code != ERROR_MARK);
13119 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13122 if (op_flags & OVL_OP_FLAG_ALLOC)
13124 /* operator new and operator delete are quite special. */
13125 if (class_type)
13126 switch (op_flags)
13128 case OVL_OP_FLAG_ALLOC:
13129 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13130 break;
13132 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13133 TYPE_GETS_DELETE (class_type) |= 1;
13134 break;
13136 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13137 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13138 break;
13140 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13141 TYPE_GETS_DELETE (class_type) |= 2;
13142 break;
13144 default:
13145 gcc_unreachable ();
13148 /* [basic.std.dynamic.allocation]/1:
13150 A program is ill-formed if an allocation function is declared
13151 in a namespace scope other than global scope or declared
13152 static in global scope.
13154 The same also holds true for deallocation functions. */
13155 if (DECL_NAMESPACE_SCOPE_P (decl))
13157 if (CP_DECL_CONTEXT (decl) != global_namespace)
13159 error_at (loc, "%qD may not be declared within a namespace",
13160 decl);
13161 return false;
13164 if (!TREE_PUBLIC (decl))
13166 error_at (loc, "%qD may not be declared as static", decl);
13167 return false;
13171 if (op_flags & OVL_OP_FLAG_DELETE)
13172 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl), loc);
13173 else
13175 DECL_IS_OPERATOR_NEW (decl) = 1;
13176 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl), loc);
13179 return true;
13182 /* An operator function must either be a non-static member function
13183 or have at least one parameter of a class, a reference to a class,
13184 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13185 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13187 if (operator_code == TYPE_EXPR
13188 || operator_code == CALL_EXPR
13189 || operator_code == COMPONENT_REF
13190 || operator_code == ARRAY_REF
13191 || operator_code == NOP_EXPR)
13193 error_at (loc, "%qD must be a nonstatic member function", decl);
13194 return false;
13197 if (DECL_STATIC_FUNCTION_P (decl))
13199 error_at (loc, "%qD must be either a non-static member "
13200 "function or a non-member function", decl);
13201 return false;
13204 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13206 if (!arg || arg == void_list_node)
13208 if (complain)
13209 error_at(loc, "%qD must have an argument of class or "
13210 "enumerated type", decl);
13211 return false;
13214 tree type = non_reference (TREE_VALUE (arg));
13215 if (type == error_mark_node)
13216 return false;
13218 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13219 because these checks are performed even on template
13220 functions. */
13221 if (MAYBE_CLASS_TYPE_P (type)
13222 || TREE_CODE (type) == ENUMERAL_TYPE)
13223 break;
13227 if (operator_code == CALL_EXPR)
13228 /* There are no further restrictions on the arguments to an overloaded
13229 "operator ()". */
13230 return true;
13232 if (operator_code == COND_EXPR)
13234 /* 13.4.0.3 */
13235 error_at (loc, "ISO C++ prohibits overloading operator ?:");
13236 return false;
13239 /* Count the number of arguments and check for ellipsis. */
13240 int arity = 0;
13241 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13243 if (!arg)
13245 /* Variadic. */
13246 error_at (loc, "%qD must not have variable number of arguments",
13247 decl);
13248 return false;
13250 ++arity;
13253 /* Verify correct number of arguments. */
13254 switch (op_flags)
13256 case OVL_OP_FLAG_AMBIARY:
13257 if (arity == 1)
13259 /* We have a unary instance of an ambi-ary op. Remap to the
13260 unary one. */
13261 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13262 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13263 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13264 operator_code = ovl_op->tree_code;
13265 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13267 else if (arity != 2)
13269 /* This was an ambiguous operator but is invalid. */
13270 error_at (loc,
13271 methodp
13272 ? G_("%qD must have either zero or one argument")
13273 : G_("%qD must have either one or two arguments"), decl);
13274 return false;
13276 else if ((operator_code == POSTINCREMENT_EXPR
13277 || operator_code == POSTDECREMENT_EXPR)
13278 && ! processing_template_decl
13279 /* x++ and x--'s second argument must be an int. */
13280 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13281 integer_type_node))
13283 error_at (loc,
13284 methodp
13285 ? G_("postfix %qD must have %<int%> as its argument")
13286 : G_("postfix %qD must have %<int%> as its second argument"),
13287 decl);
13288 return false;
13290 break;
13292 case OVL_OP_FLAG_UNARY:
13293 if (arity != 1)
13295 error_at (loc,
13296 methodp
13297 ? G_("%qD must have no arguments")
13298 : G_("%qD must have exactly one argument"), decl);
13299 return false;
13301 break;
13303 case OVL_OP_FLAG_BINARY:
13304 if (arity != 2)
13306 error_at (loc,
13307 methodp
13308 ? G_("%qD must have exactly one argument")
13309 : G_("%qD must have exactly two arguments"), decl);
13310 return false;
13312 break;
13314 default:
13315 gcc_unreachable ();
13318 /* There can be no default arguments. */
13319 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13320 if (TREE_PURPOSE (arg))
13322 TREE_PURPOSE (arg) = NULL_TREE;
13323 error_at (loc, "%qD cannot have default arguments", decl);
13324 return false;
13327 /* At this point the declaration is well-formed. It may not be
13328 sensible though. */
13330 /* Check member function warnings only on the in-class declaration.
13331 There's no point warning on an out-of-class definition. */
13332 if (class_type && class_type != current_class_type)
13333 return true;
13335 /* Warn about conversion operators that will never be used. */
13336 if (IDENTIFIER_CONV_OP_P (name)
13337 && ! DECL_TEMPLATE_INFO (decl)
13338 && warn_conversion)
13340 tree t = TREE_TYPE (name);
13341 int ref = TYPE_REF_P (t);
13343 if (ref)
13344 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13346 if (VOID_TYPE_P (t))
13347 warning_at (loc, OPT_Wconversion,
13349 ? G_("conversion to a reference to void "
13350 "will never use a type conversion operator")
13351 : G_("conversion to void "
13352 "will never use a type conversion operator"));
13353 else if (class_type)
13355 if (t == class_type)
13356 warning_at (loc, OPT_Wconversion,
13358 ? G_("conversion to a reference to the same type "
13359 "will never use a type conversion operator")
13360 : G_("conversion to the same type "
13361 "will never use a type conversion operator"));
13362 /* Don't force t to be complete here. */
13363 else if (MAYBE_CLASS_TYPE_P (t)
13364 && COMPLETE_TYPE_P (t)
13365 && DERIVED_FROM_P (t, class_type))
13366 warning_at (loc, OPT_Wconversion,
13368 ? G_("conversion to a reference to a base class "
13369 "will never use a type conversion operator")
13370 : G_("conversion to a base class "
13371 "will never use a type conversion operator"));
13375 if (!warn_ecpp)
13376 return true;
13378 /* Effective C++ rules below. */
13380 /* More Effective C++ rule 7. */
13381 if (operator_code == TRUTH_ANDIF_EXPR
13382 || operator_code == TRUTH_ORIF_EXPR
13383 || operator_code == COMPOUND_EXPR)
13384 warning_at (loc, OPT_Weffc__,
13385 "user-defined %qD always evaluates both arguments", decl);
13387 /* More Effective C++ rule 6. */
13388 if (operator_code == POSTINCREMENT_EXPR
13389 || operator_code == POSTDECREMENT_EXPR
13390 || operator_code == PREINCREMENT_EXPR
13391 || operator_code == PREDECREMENT_EXPR)
13393 tree arg = TREE_VALUE (argtypes);
13394 tree ret = TREE_TYPE (TREE_TYPE (decl));
13395 if (methodp || TYPE_REF_P (arg))
13396 arg = TREE_TYPE (arg);
13397 arg = TYPE_MAIN_VARIANT (arg);
13399 if (operator_code == PREINCREMENT_EXPR
13400 || operator_code == PREDECREMENT_EXPR)
13402 if (!TYPE_REF_P (ret)
13403 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13404 warning_at (loc, OPT_Weffc__, "prefix %qD should return %qT", decl,
13405 build_reference_type (arg));
13407 else
13409 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13410 warning_at (loc, OPT_Weffc__,
13411 "postfix %qD should return %qT", decl, arg);
13415 /* Effective C++ rule 23. */
13416 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13417 && (operator_code == PLUS_EXPR
13418 || operator_code == MINUS_EXPR
13419 || operator_code == TRUNC_DIV_EXPR
13420 || operator_code == MULT_EXPR
13421 || operator_code == TRUNC_MOD_EXPR)
13422 && TYPE_REF_P (TREE_TYPE (TREE_TYPE (decl))))
13423 warning_at (loc, OPT_Weffc__, "%qD should return by value", decl);
13425 return true;
13428 /* Return a string giving the keyword associate with CODE. */
13430 static const char *
13431 tag_name (enum tag_types code)
13433 switch (code)
13435 case record_type:
13436 return "struct";
13437 case class_type:
13438 return "class";
13439 case union_type:
13440 return "union";
13441 case enum_type:
13442 return "enum";
13443 case typename_type:
13444 return "typename";
13445 default:
13446 gcc_unreachable ();
13450 /* Name lookup in an elaborated-type-specifier (after the keyword
13451 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13452 elaborated-type-specifier is invalid, issue a diagnostic and return
13453 error_mark_node; otherwise, return the *_TYPE to which it referred.
13454 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13456 tree
13457 check_elaborated_type_specifier (enum tag_types tag_code,
13458 tree decl,
13459 bool allow_template_p)
13461 tree type;
13463 /* In the case of:
13465 struct S { struct S *p; };
13467 name lookup will find the TYPE_DECL for the implicit "S::S"
13468 typedef. Adjust for that here. */
13469 if (DECL_SELF_REFERENCE_P (decl))
13470 decl = TYPE_NAME (TREE_TYPE (decl));
13472 type = TREE_TYPE (decl);
13474 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13475 is false for this case as well. */
13476 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13478 error ("using template type parameter %qT after %qs",
13479 type, tag_name (tag_code));
13480 return error_mark_node;
13482 /* Accept template template parameters. */
13483 else if (allow_template_p
13484 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13485 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13487 /* [dcl.type.elab]
13489 If the identifier resolves to a typedef-name or the
13490 simple-template-id resolves to an alias template
13491 specialization, the elaborated-type-specifier is ill-formed.
13493 In other words, the only legitimate declaration to use in the
13494 elaborated type specifier is the implicit typedef created when
13495 the type is declared. */
13496 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13497 && !DECL_SELF_REFERENCE_P (decl)
13498 && tag_code != typename_type)
13500 if (alias_template_specialization_p (type))
13501 error ("using alias template specialization %qT after %qs",
13502 type, tag_name (tag_code));
13503 else
13504 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13505 inform (DECL_SOURCE_LOCATION (decl),
13506 "%qD has a previous declaration here", decl);
13507 return error_mark_node;
13509 else if (TREE_CODE (type) != RECORD_TYPE
13510 && TREE_CODE (type) != UNION_TYPE
13511 && tag_code != enum_type
13512 && tag_code != typename_type)
13514 error ("%qT referred to as %qs", type, tag_name (tag_code));
13515 inform (location_of (type), "%qT has a previous declaration here", type);
13516 return error_mark_node;
13518 else if (TREE_CODE (type) != ENUMERAL_TYPE
13519 && tag_code == enum_type)
13521 error ("%qT referred to as enum", type);
13522 inform (location_of (type), "%qT has a previous declaration here", type);
13523 return error_mark_node;
13525 else if (!allow_template_p
13526 && TREE_CODE (type) == RECORD_TYPE
13527 && CLASSTYPE_IS_TEMPLATE (type))
13529 /* If a class template appears as elaborated type specifier
13530 without a template header such as:
13532 template <class T> class C {};
13533 void f(class C); // No template header here
13535 then the required template argument is missing. */
13536 error ("template argument required for %<%s %T%>",
13537 tag_name (tag_code),
13538 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13539 return error_mark_node;
13542 return type;
13545 /* Lookup NAME in elaborate type specifier in scope according to
13546 SCOPE and issue diagnostics if necessary.
13547 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13548 found, and ERROR_MARK_NODE for type error. */
13550 static tree
13551 lookup_and_check_tag (enum tag_types tag_code, tree name,
13552 tag_scope scope, bool template_header_p)
13554 tree t;
13555 tree decl;
13556 if (scope == ts_global)
13558 /* First try ordinary name lookup, ignoring hidden class name
13559 injected via friend declaration. */
13560 decl = lookup_name_prefer_type (name, 2);
13561 decl = strip_using_decl (decl);
13562 /* If that fails, the name will be placed in the smallest
13563 non-class, non-function-prototype scope according to 3.3.1/5.
13564 We may already have a hidden name declared as friend in this
13565 scope. So lookup again but not ignoring hidden names.
13566 If we find one, that name will be made visible rather than
13567 creating a new tag. */
13568 if (!decl)
13569 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13571 else
13572 decl = lookup_type_scope (name, scope);
13574 if (decl
13575 && (DECL_CLASS_TEMPLATE_P (decl)
13576 /* If scope is ts_current we're defining a class, so ignore a
13577 template template parameter. */
13578 || (scope != ts_current
13579 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13580 decl = DECL_TEMPLATE_RESULT (decl);
13582 if (decl && TREE_CODE (decl) == TYPE_DECL)
13584 /* Look for invalid nested type:
13585 class C {
13586 class C {};
13587 }; */
13588 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13590 error ("%qD has the same name as the class in which it is "
13591 "declared",
13592 decl);
13593 return error_mark_node;
13596 /* Two cases we need to consider when deciding if a class
13597 template is allowed as an elaborated type specifier:
13598 1. It is a self reference to its own class.
13599 2. It comes with a template header.
13601 For example:
13603 template <class T> class C {
13604 class C *c1; // DECL_SELF_REFERENCE_P is true
13605 class D;
13607 template <class U> class C; // template_header_p is true
13608 template <class T> class C<T>::D {
13609 class C *c2; // DECL_SELF_REFERENCE_P is true
13610 }; */
13612 t = check_elaborated_type_specifier (tag_code,
13613 decl,
13614 template_header_p
13615 | DECL_SELF_REFERENCE_P (decl));
13616 if (template_header_p && t && CLASS_TYPE_P (t)
13617 && (!CLASSTYPE_TEMPLATE_INFO (t)
13618 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13620 error ("%qT is not a template", t);
13621 inform (location_of (t), "previous declaration here");
13622 if (TYPE_CLASS_SCOPE_P (t)
13623 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13624 inform (input_location,
13625 "perhaps you want to explicitly add %<%T::%>",
13626 TYPE_CONTEXT (t));
13627 t = error_mark_node;
13630 return t;
13632 else if (decl && TREE_CODE (decl) == TREE_LIST)
13634 error ("reference to %qD is ambiguous", name);
13635 print_candidates (decl);
13636 return error_mark_node;
13638 else
13639 return NULL_TREE;
13642 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13643 Define the tag as a forward-reference if it is not defined.
13645 If a declaration is given, process it here, and report an error if
13646 multiple declarations are not identical.
13648 SCOPE is TS_CURRENT when this is also a definition. Only look in
13649 the current frame for the name (since C++ allows new names in any
13650 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13651 declaration. Only look beginning from the current scope outward up
13652 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13654 TEMPLATE_HEADER_P is true when this declaration is preceded by
13655 a set of template parameters. */
13657 static tree
13658 xref_tag_1 (enum tag_types tag_code, tree name,
13659 tag_scope scope, bool template_header_p)
13661 enum tree_code code;
13662 tree context = NULL_TREE;
13664 gcc_assert (identifier_p (name));
13666 switch (tag_code)
13668 case record_type:
13669 case class_type:
13670 code = RECORD_TYPE;
13671 break;
13672 case union_type:
13673 code = UNION_TYPE;
13674 break;
13675 case enum_type:
13676 code = ENUMERAL_TYPE;
13677 break;
13678 default:
13679 gcc_unreachable ();
13682 /* In case of anonymous name, xref_tag is only called to
13683 make type node and push name. Name lookup is not required. */
13684 tree t = NULL_TREE;
13685 if (scope != ts_lambda && !anon_aggrname_p (name))
13686 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
13688 if (t == error_mark_node)
13689 return error_mark_node;
13691 if (scope != ts_current && t && current_class_type
13692 && template_class_depth (current_class_type)
13693 && template_header_p)
13695 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13696 return t;
13698 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13699 definition of this tag. Since, in addition, we are currently
13700 processing a (member) template declaration of a template
13701 class, we must be very careful; consider:
13703 template <class X> struct S1
13705 template <class U> struct S2
13707 template <class V> friend struct S1;
13710 Here, the S2::S1 declaration should not be confused with the
13711 outer declaration. In particular, the inner version should
13712 have a template parameter of level 2, not level 1.
13714 On the other hand, when presented with:
13716 template <class T> struct S1
13718 template <class U> struct S2 {};
13719 template <class U> friend struct S2;
13722 the friend must find S1::S2 eventually. We accomplish this
13723 by making sure that the new type we create to represent this
13724 declaration has the right TYPE_CONTEXT. */
13725 context = TYPE_CONTEXT (t);
13726 t = NULL_TREE;
13729 if (! t)
13731 /* If no such tag is yet defined, create a forward-reference node
13732 and record it as the "definition".
13733 When a real declaration of this type is found,
13734 the forward-reference will be altered into a real type. */
13735 if (code == ENUMERAL_TYPE)
13737 error ("use of enum %q#D without previous declaration", name);
13738 return error_mark_node;
13740 else
13742 t = make_class_type (code);
13743 TYPE_CONTEXT (t) = context;
13744 if (scope == ts_lambda)
13746 /* Mark it as a lambda type. */
13747 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13748 /* And push it into current scope. */
13749 scope = ts_current;
13751 t = pushtag (name, t, scope);
13754 else
13756 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13758 /* Check that we aren't trying to overload a class with different
13759 constraints. */
13760 tree constr = NULL_TREE;
13761 if (current_template_parms)
13763 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13764 constr = build_constraints (reqs, NULL_TREE);
13766 if (!redeclare_class_template (t, current_template_parms, constr))
13767 return error_mark_node;
13769 else if (!processing_template_decl
13770 && CLASS_TYPE_P (t)
13771 && CLASSTYPE_IS_TEMPLATE (t))
13773 error ("redeclaration of %qT as a non-template", t);
13774 inform (location_of (t), "previous declaration %qD", t);
13775 return error_mark_node;
13778 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
13780 /* This is no longer an invisible friend. Make it
13781 visible. */
13782 tree decl = TYPE_NAME (t);
13784 DECL_ANTICIPATED (decl) = false;
13785 DECL_FRIEND_P (decl) = false;
13787 if (TYPE_TEMPLATE_INFO (t))
13789 tree tmpl = TYPE_TI_TEMPLATE (t);
13790 DECL_ANTICIPATED (tmpl) = false;
13791 DECL_FRIEND_P (tmpl) = false;
13796 return t;
13799 /* Wrapper for xref_tag_1. */
13801 tree
13802 xref_tag (enum tag_types tag_code, tree name,
13803 tag_scope scope, bool template_header_p)
13805 tree ret;
13806 bool subtime;
13807 subtime = timevar_cond_start (TV_NAME_LOOKUP);
13808 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13809 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13810 return ret;
13814 tree
13815 xref_tag_from_type (tree old, tree id, tag_scope scope)
13817 enum tag_types tag_kind;
13819 if (TREE_CODE (old) == RECORD_TYPE)
13820 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13821 else
13822 tag_kind = union_type;
13824 if (id == NULL_TREE)
13825 id = TYPE_IDENTIFIER (old);
13827 return xref_tag (tag_kind, id, scope, false);
13830 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13831 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
13832 access_* node, and the TREE_VALUE is the type of the base-class.
13833 Non-NULL TREE_TYPE indicates virtual inheritance. */
13835 void
13836 xref_basetypes (tree ref, tree base_list)
13838 tree *basep;
13839 tree binfo, base_binfo;
13840 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
13841 unsigned max_bases = 0; /* Maximum direct bases. */
13842 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
13843 int i;
13844 tree default_access;
13845 tree igo_prev; /* Track Inheritance Graph Order. */
13847 if (ref == error_mark_node)
13848 return;
13850 /* The base of a derived class is private by default, all others are
13851 public. */
13852 default_access = (TREE_CODE (ref) == RECORD_TYPE
13853 && CLASSTYPE_DECLARED_CLASS (ref)
13854 ? access_private_node : access_public_node);
13856 /* First, make sure that any templates in base-classes are
13857 instantiated. This ensures that if we call ourselves recursively
13858 we do not get confused about which classes are marked and which
13859 are not. */
13860 basep = &base_list;
13861 while (*basep)
13863 tree basetype = TREE_VALUE (*basep);
13865 /* The dependent_type_p call below should really be dependent_scope_p
13866 so that we give a hard error about using an incomplete type as a
13867 base, but we allow it with a pedwarn for backward
13868 compatibility. */
13869 if (processing_template_decl
13870 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13871 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13872 if (!dependent_type_p (basetype)
13873 && !complete_type_or_else (basetype, NULL))
13874 /* An incomplete type. Remove it from the list. */
13875 *basep = TREE_CHAIN (*basep);
13876 else
13878 max_bases++;
13879 if (TREE_TYPE (*basep))
13880 max_dvbases++;
13881 if (CLASS_TYPE_P (basetype))
13882 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13883 basep = &TREE_CHAIN (*basep);
13886 max_vbases += max_dvbases;
13888 TYPE_MARKED_P (ref) = 1;
13890 /* The binfo slot should be empty, unless this is an (ill-formed)
13891 redefinition. */
13892 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13894 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13896 binfo = make_tree_binfo (max_bases);
13898 TYPE_BINFO (ref) = binfo;
13899 BINFO_OFFSET (binfo) = size_zero_node;
13900 BINFO_TYPE (binfo) = ref;
13902 /* Apply base-class info set up to the variants of this type. */
13903 fixup_type_variants (ref);
13905 if (max_bases)
13907 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
13908 /* A C++98 POD cannot have base classes. */
13909 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
13911 if (TREE_CODE (ref) == UNION_TYPE)
13913 error ("derived union %qT invalid", ref);
13914 return;
13918 if (max_bases > 1)
13919 warning (OPT_Wmultiple_inheritance,
13920 "%qT defined with multiple direct bases", ref);
13922 if (max_vbases)
13924 /* An aggregate can't have virtual base classes. */
13925 CLASSTYPE_NON_AGGREGATE (ref) = true;
13927 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
13929 if (max_dvbases)
13930 warning (OPT_Wvirtual_inheritance,
13931 "%qT defined with direct virtual base", ref);
13934 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
13936 tree access = TREE_PURPOSE (base_list);
13937 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
13938 tree basetype = TREE_VALUE (base_list);
13940 if (access == access_default_node)
13941 access = default_access;
13943 /* Before C++17, an aggregate cannot have base classes. In C++17, an
13944 aggregate can't have virtual, private, or protected base classes. */
13945 if (cxx_dialect < cxx17
13946 || access != access_public_node
13947 || via_virtual)
13948 CLASSTYPE_NON_AGGREGATE (ref) = true;
13950 if (PACK_EXPANSION_P (basetype))
13951 basetype = PACK_EXPANSION_PATTERN (basetype);
13952 if (TREE_CODE (basetype) == TYPE_DECL)
13953 basetype = TREE_TYPE (basetype);
13954 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
13956 error ("base type %qT fails to be a struct or class type",
13957 basetype);
13958 goto dropped_base;
13961 base_binfo = NULL_TREE;
13962 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
13964 base_binfo = TYPE_BINFO (basetype);
13965 /* The original basetype could have been a typedef'd type. */
13966 basetype = BINFO_TYPE (base_binfo);
13968 /* Inherit flags from the base. */
13969 TYPE_HAS_NEW_OPERATOR (ref)
13970 |= TYPE_HAS_NEW_OPERATOR (basetype);
13971 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13972 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
13973 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
13974 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
13975 CLASSTYPE_DIAMOND_SHAPED_P (ref)
13976 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
13977 CLASSTYPE_REPEATED_BASE_P (ref)
13978 |= CLASSTYPE_REPEATED_BASE_P (basetype);
13981 /* We must do this test after we've seen through a typedef
13982 type. */
13983 if (TYPE_MARKED_P (basetype))
13985 if (basetype == ref)
13986 error ("recursive type %qT undefined", basetype);
13987 else
13988 error ("duplicate base type %qT invalid", basetype);
13989 goto dropped_base;
13992 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
13993 /* Regenerate the pack expansion for the bases. */
13994 basetype = make_pack_expansion (basetype);
13996 TYPE_MARKED_P (basetype) = 1;
13998 base_binfo = copy_binfo (base_binfo, basetype, ref,
13999 &igo_prev, via_virtual);
14000 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
14001 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
14003 BINFO_BASE_APPEND (binfo, base_binfo);
14004 BINFO_BASE_ACCESS_APPEND (binfo, access);
14005 continue;
14007 dropped_base:
14008 /* Update max_vbases to reflect the reality that we are dropping
14009 this base: if it reaches zero we want to undo the vec_alloc
14010 above to avoid inconsistencies during error-recovery: eg, in
14011 build_special_member_call, CLASSTYPE_VBASECLASSES non null
14012 and vtt null (c++/27952). */
14013 if (via_virtual)
14014 max_vbases--;
14015 if (CLASS_TYPE_P (basetype))
14016 max_vbases
14017 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14020 if (CLASSTYPE_VBASECLASSES (ref)
14021 && max_vbases == 0)
14022 vec_free (CLASSTYPE_VBASECLASSES (ref));
14024 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
14025 /* If we didn't get max_vbases vbases, we must have shared at
14026 least one of them, and are therefore diamond shaped. */
14027 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
14029 /* Unmark all the types. */
14030 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
14031 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14032 TYPE_MARKED_P (ref) = 0;
14034 /* Now see if we have a repeated base type. */
14035 if (!CLASSTYPE_REPEATED_BASE_P (ref))
14037 for (base_binfo = binfo; base_binfo;
14038 base_binfo = TREE_CHAIN (base_binfo))
14040 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14042 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
14043 break;
14045 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
14047 for (base_binfo = binfo; base_binfo;
14048 base_binfo = TREE_CHAIN (base_binfo))
14049 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14050 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14051 else
14052 break;
14057 /* Copies the enum-related properties from type SRC to type DST.
14058 Used with the underlying type of an enum and the enum itself. */
14059 static void
14060 copy_type_enum (tree dst, tree src)
14062 tree t;
14063 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
14065 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
14066 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
14067 TYPE_SIZE (t) = TYPE_SIZE (src);
14068 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
14069 SET_TYPE_MODE (dst, TYPE_MODE (src));
14070 TYPE_PRECISION (t) = TYPE_PRECISION (src);
14071 unsigned valign = TYPE_ALIGN (src);
14072 if (TYPE_USER_ALIGN (t))
14073 valign = MAX (valign, TYPE_ALIGN (t));
14074 else
14075 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
14076 SET_TYPE_ALIGN (t, valign);
14077 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
14081 /* Begin compiling the definition of an enumeration type.
14082 NAME is its name,
14084 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
14086 UNDERLYING_TYPE is the type that will be used as the storage for
14087 the enumeration type. This should be NULL_TREE if no storage type
14088 was specified.
14090 ATTRIBUTES are any attributes specified after the enum-key.
14092 SCOPED_ENUM_P is true if this is a scoped enumeration type.
14094 if IS_NEW is not NULL, gets TRUE iff a new type is created.
14096 Returns the type object, as yet incomplete.
14097 Also records info about it so that build_enumerator
14098 may be used to declare the individual values as they are read. */
14100 tree
14101 start_enum (tree name, tree enumtype, tree underlying_type,
14102 tree attributes, bool scoped_enum_p, bool *is_new)
14104 tree prevtype = NULL_TREE;
14105 gcc_assert (identifier_p (name));
14107 if (is_new)
14108 *is_new = false;
14109 /* [C++0x dcl.enum]p5:
14111 If not explicitly specified, the underlying type of a scoped
14112 enumeration type is int. */
14113 if (!underlying_type && scoped_enum_p)
14114 underlying_type = integer_type_node;
14116 if (underlying_type)
14117 underlying_type = cv_unqualified (underlying_type);
14119 /* If this is the real definition for a previous forward reference,
14120 fill in the contents in the same object that used to be the
14121 forward reference. */
14122 if (!enumtype)
14123 enumtype = lookup_and_check_tag (enum_type, name,
14124 /*tag_scope=*/ts_current,
14125 /*template_header_p=*/false);
14127 /* In case of a template_decl, the only check that should be deferred
14128 to instantiation time is the comparison of underlying types. */
14129 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14131 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14133 error_at (input_location, "scoped/unscoped mismatch "
14134 "in enum %q#T", enumtype);
14135 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14136 "previous definition here");
14137 enumtype = error_mark_node;
14139 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14141 error_at (input_location, "underlying type mismatch "
14142 "in enum %q#T", enumtype);
14143 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14144 "previous definition here");
14145 enumtype = error_mark_node;
14147 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14148 && !same_type_p (underlying_type,
14149 ENUM_UNDERLYING_TYPE (enumtype)))
14151 error_at (input_location, "different underlying type "
14152 "in enum %q#T", enumtype);
14153 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14154 "previous definition here");
14155 underlying_type = NULL_TREE;
14159 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14160 || processing_template_decl)
14162 /* In case of error, make a dummy enum to allow parsing to
14163 continue. */
14164 if (enumtype == error_mark_node)
14166 name = make_anon_name ();
14167 enumtype = NULL_TREE;
14170 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14171 of an opaque enum, or an opaque enum of an already defined
14172 enumeration (C++11).
14173 In any other case, it'll be NULL_TREE. */
14174 if (!enumtype)
14176 if (is_new)
14177 *is_new = true;
14179 prevtype = enumtype;
14181 /* Do not push the decl more than once. */
14182 if (!enumtype
14183 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
14185 enumtype = cxx_make_type (ENUMERAL_TYPE);
14186 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14188 /* std::byte aliases anything. */
14189 if (enumtype != error_mark_node
14190 && TYPE_CONTEXT (enumtype) == std_node
14191 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14192 TYPE_ALIAS_SET (enumtype) = 0;
14194 else
14195 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14196 false);
14198 if (enumtype == error_mark_node)
14199 return error_mark_node;
14201 /* The enum is considered opaque until the opening '{' of the
14202 enumerator list. */
14203 SET_OPAQUE_ENUM_P (enumtype, true);
14204 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14207 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14209 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14211 if (underlying_type)
14213 if (ENUM_UNDERLYING_TYPE (enumtype))
14214 /* We already checked that it matches, don't change it to a different
14215 typedef variant. */;
14216 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14218 copy_type_enum (enumtype, underlying_type);
14219 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14221 else if (dependent_type_p (underlying_type))
14222 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14223 else
14224 error ("underlying type %qT of %qT must be an integral type",
14225 underlying_type, enumtype);
14228 /* If into a template class, the returned enum is always the first
14229 declaration (opaque or not) seen. This way all the references to
14230 this type will be to the same declaration. The following ones are used
14231 only to check for definition errors. */
14232 if (prevtype && processing_template_decl)
14233 return prevtype;
14234 else
14235 return enumtype;
14238 /* After processing and defining all the values of an enumeration type,
14239 install their decls in the enumeration type.
14240 ENUMTYPE is the type object. */
14242 void
14243 finish_enum_value_list (tree enumtype)
14245 tree values;
14246 tree underlying_type;
14247 tree decl;
14248 tree value;
14249 tree minnode, maxnode;
14250 tree t;
14252 bool fixed_underlying_type_p
14253 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14255 /* We built up the VALUES in reverse order. */
14256 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14258 /* For an enum defined in a template, just set the type of the values;
14259 all further processing is postponed until the template is
14260 instantiated. We need to set the type so that tsubst of a CONST_DECL
14261 works. */
14262 if (processing_template_decl)
14264 for (values = TYPE_VALUES (enumtype);
14265 values;
14266 values = TREE_CHAIN (values))
14267 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14268 return;
14271 /* Determine the minimum and maximum values of the enumerators. */
14272 if (TYPE_VALUES (enumtype))
14274 minnode = maxnode = NULL_TREE;
14276 for (values = TYPE_VALUES (enumtype);
14277 values;
14278 values = TREE_CHAIN (values))
14280 decl = TREE_VALUE (values);
14282 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14283 each enumerator has the type of its enumeration. Prior to the
14284 closing brace, the type of each enumerator is the type of its
14285 initializing value. */
14286 TREE_TYPE (decl) = enumtype;
14288 /* Update the minimum and maximum values, if appropriate. */
14289 value = DECL_INITIAL (decl);
14290 if (value == error_mark_node)
14291 value = integer_zero_node;
14292 /* Figure out what the minimum and maximum values of the
14293 enumerators are. */
14294 if (!minnode)
14295 minnode = maxnode = value;
14296 else if (tree_int_cst_lt (maxnode, value))
14297 maxnode = value;
14298 else if (tree_int_cst_lt (value, minnode))
14299 minnode = value;
14302 else
14303 /* [dcl.enum]
14305 If the enumerator-list is empty, the underlying type is as if
14306 the enumeration had a single enumerator with value 0. */
14307 minnode = maxnode = integer_zero_node;
14309 if (!fixed_underlying_type_p)
14311 /* Compute the number of bits require to represent all values of the
14312 enumeration. We must do this before the type of MINNODE and
14313 MAXNODE are transformed, since tree_int_cst_min_precision relies
14314 on the TREE_TYPE of the value it is passed. */
14315 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14316 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14317 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14318 int precision = MAX (lowprec, highprec);
14319 unsigned int itk;
14320 bool use_short_enum;
14322 /* Determine the underlying type of the enumeration.
14324 [dcl.enum]
14326 The underlying type of an enumeration is an integral type that
14327 can represent all the enumerator values defined in the
14328 enumeration. It is implementation-defined which integral type is
14329 used as the underlying type for an enumeration except that the
14330 underlying type shall not be larger than int unless the value of
14331 an enumerator cannot fit in an int or unsigned int.
14333 We use "int" or an "unsigned int" as the underlying type, even if
14334 a smaller integral type would work, unless the user has
14335 explicitly requested that we use the smallest possible type. The
14336 user can request that for all enumerations with a command line
14337 flag, or for just one enumeration with an attribute. */
14339 use_short_enum = flag_short_enums
14340 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14342 /* If the precision of the type was specified with an attribute and it
14343 was too small, give an error. Otherwise, use it. */
14344 if (TYPE_PRECISION (enumtype))
14346 if (precision > TYPE_PRECISION (enumtype))
14347 error ("specified mode too small for enumeral values");
14348 else
14350 use_short_enum = true;
14351 precision = TYPE_PRECISION (enumtype);
14355 for (itk = (use_short_enum ? itk_char : itk_int);
14356 itk != itk_none;
14357 itk++)
14359 underlying_type = integer_types[itk];
14360 if (underlying_type != NULL_TREE
14361 && TYPE_PRECISION (underlying_type) >= precision
14362 && TYPE_SIGN (underlying_type) == sgn)
14363 break;
14365 if (itk == itk_none)
14367 /* DR 377
14369 IF no integral type can represent all the enumerator values, the
14370 enumeration is ill-formed. */
14371 error ("no integral type can represent all of the enumerator values "
14372 "for %qT", enumtype);
14373 precision = TYPE_PRECISION (long_long_integer_type_node);
14374 underlying_type = integer_types[itk_unsigned_long_long];
14377 /* [dcl.enum]
14379 The value of sizeof() applied to an enumeration type, an object
14380 of an enumeration type, or an enumerator, is the value of sizeof()
14381 applied to the underlying type. */
14382 copy_type_enum (enumtype, underlying_type);
14384 /* Compute the minimum and maximum values for the type.
14386 [dcl.enum]
14388 For an enumeration where emin is the smallest enumerator and emax
14389 is the largest, the values of the enumeration are the values of the
14390 underlying type in the range bmin to bmax, where bmin and bmax are,
14391 respectively, the smallest and largest values of the smallest bit-
14392 field that can store emin and emax. */
14394 /* The middle-end currently assumes that types with TYPE_PRECISION
14395 narrower than their underlying type are suitably zero or sign
14396 extended to fill their mode. Similarly, it assumes that the front
14397 end assures that a value of a particular type must be within
14398 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14400 We used to set these fields based on bmin and bmax, but that led
14401 to invalid assumptions like optimizing away bounds checking. So
14402 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14403 TYPE_MAX_VALUE to the values for the mode above and only restrict
14404 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14405 ENUM_UNDERLYING_TYPE (enumtype)
14406 = build_distinct_type_copy (underlying_type);
14407 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14408 set_min_and_max_values_for_integral_type
14409 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14411 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14412 if (flag_strict_enums)
14413 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14415 else
14416 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14418 /* Convert each of the enumerators to the type of the underlying
14419 type of the enumeration. */
14420 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14422 location_t saved_location;
14424 decl = TREE_VALUE (values);
14425 saved_location = input_location;
14426 input_location = DECL_SOURCE_LOCATION (decl);
14427 if (fixed_underlying_type_p)
14428 /* If the enumeration type has a fixed underlying type, we
14429 already checked all of the enumerator values. */
14430 value = DECL_INITIAL (decl);
14431 else
14432 value = perform_implicit_conversion (underlying_type,
14433 DECL_INITIAL (decl),
14434 tf_warning_or_error);
14435 input_location = saved_location;
14437 /* Do not clobber shared ints. */
14438 if (value != error_mark_node)
14440 value = copy_node (value);
14442 TREE_TYPE (value) = enumtype;
14444 DECL_INITIAL (decl) = value;
14447 /* Fix up all variant types of this enum type. */
14448 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14449 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14451 if (at_class_scope_p ()
14452 && COMPLETE_TYPE_P (current_class_type)
14453 && UNSCOPED_ENUM_P (enumtype))
14455 insert_late_enum_def_bindings (current_class_type, enumtype);
14456 /* TYPE_FIELDS needs fixup. */
14457 fixup_type_variants (current_class_type);
14460 /* Finish debugging output for this type. */
14461 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14463 /* Each enumerator now has the type of its enumeration. Clear the cache
14464 so that this change in types doesn't confuse us later on. */
14465 clear_cv_and_fold_caches ();
14468 /* Finishes the enum type. This is called only the first time an
14469 enumeration is seen, be it opaque or odinary.
14470 ENUMTYPE is the type object. */
14472 void
14473 finish_enum (tree enumtype)
14475 if (processing_template_decl)
14477 if (at_function_scope_p ())
14478 add_stmt (build_min (TAG_DEFN, enumtype));
14479 return;
14482 /* If this is a forward declaration, there should not be any variants,
14483 though we can get a variant in the middle of an enum-specifier with
14484 wacky code like 'enum E { e = sizeof(const E*) };' */
14485 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14486 && (TYPE_VALUES (enumtype)
14487 || !TYPE_NEXT_VARIANT (enumtype)));
14490 /* Build and install a CONST_DECL for an enumeration constant of the
14491 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14492 Apply ATTRIBUTES if available. LOC is the location of NAME.
14493 Assignment of sequential values by default is handled here. */
14495 void
14496 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14497 location_t loc)
14499 tree decl;
14500 tree context;
14501 tree type;
14503 /* scalar_constant_value will pull out this expression, so make sure
14504 it's folded as appropriate. */
14505 if (processing_template_decl)
14506 value = fold_non_dependent_expr (value);
14508 /* If the VALUE was erroneous, pretend it wasn't there; that will
14509 result in the enum being assigned the next value in sequence. */
14510 if (value == error_mark_node)
14511 value = NULL_TREE;
14513 /* Remove no-op casts from the value. */
14514 if (value)
14515 STRIP_TYPE_NOPS (value);
14517 if (! processing_template_decl)
14519 /* Validate and default VALUE. */
14520 if (value != NULL_TREE)
14522 if (!ENUM_UNDERLYING_TYPE (enumtype))
14524 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14525 value, true);
14526 if (tmp_value)
14527 value = tmp_value;
14529 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14530 (TREE_TYPE (value)))
14531 value = perform_implicit_conversion_flags
14532 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14533 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14535 if (value == error_mark_node)
14536 value = NULL_TREE;
14538 if (value != NULL_TREE)
14540 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14541 (TREE_TYPE (value)))
14543 error ("enumerator value for %qD must have integral or "
14544 "unscoped enumeration type", name);
14545 value = NULL_TREE;
14547 else
14549 value = cxx_constant_value (value);
14551 if (TREE_CODE (value) != INTEGER_CST)
14553 error ("enumerator value for %qD is not an integer "
14554 "constant", name);
14555 value = NULL_TREE;
14561 /* Default based on previous value. */
14562 if (value == NULL_TREE)
14564 if (TYPE_VALUES (enumtype))
14566 tree prev_value;
14567 bool overflowed;
14569 /* C++03 7.2/4: If no initializer is specified for the first
14570 enumerator, the type is an unspecified integral
14571 type. Otherwise the type is the same as the type of the
14572 initializing value of the preceding enumerator unless the
14573 incremented value is not representable in that type, in
14574 which case the type is an unspecified integral type
14575 sufficient to contain the incremented value. */
14576 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14577 if (error_operand_p (prev_value))
14578 value = error_mark_node;
14579 else
14581 tree type = TREE_TYPE (prev_value);
14582 signop sgn = TYPE_SIGN (type);
14583 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14584 &overflowed);
14585 if (!overflowed)
14587 bool pos = !wi::neg_p (wi, sgn);
14588 if (!wi::fits_to_tree_p (wi, type))
14590 unsigned int itk;
14591 for (itk = itk_int; itk != itk_none; itk++)
14593 type = integer_types[itk];
14594 if (type != NULL_TREE
14595 && (pos || !TYPE_UNSIGNED (type))
14596 && wi::fits_to_tree_p (wi, type))
14597 break;
14599 if (type && cxx_dialect < cxx11
14600 && itk > itk_unsigned_long)
14601 pedwarn (input_location, OPT_Wlong_long,
14602 pos ? G_("\
14603 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14604 incremented enumerator value is too large for %<long%>"));
14606 if (type == NULL_TREE)
14607 overflowed = true;
14608 else
14609 value = wide_int_to_tree (type, wi);
14612 if (overflowed)
14614 error ("overflow in enumeration values at %qD", name);
14615 value = error_mark_node;
14619 else
14620 value = integer_zero_node;
14623 /* Remove no-op casts from the value. */
14624 STRIP_TYPE_NOPS (value);
14626 /* If the underlying type of the enum is fixed, check whether
14627 the enumerator values fits in the underlying type. If it
14628 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14629 if (ENUM_UNDERLYING_TYPE (enumtype)
14630 && value
14631 && TREE_CODE (value) == INTEGER_CST)
14633 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14634 error ("enumerator value %qE is outside the range of underlying "
14635 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14637 /* Convert the value to the appropriate type. */
14638 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14642 /* C++ associates enums with global, function, or class declarations. */
14643 context = current_scope ();
14645 /* Build the actual enumeration constant. Note that the enumeration
14646 constants have the underlying type of the enum (if it is fixed)
14647 or the type of their initializer (if the underlying type of the
14648 enum is not fixed):
14650 [ C++0x dcl.enum ]
14652 If the underlying type is fixed, the type of each enumerator
14653 prior to the closing brace is the underlying type; if the
14654 initializing value of an enumerator cannot be represented by
14655 the underlying type, the program is ill-formed. If the
14656 underlying type is not fixed, the type of each enumerator is
14657 the type of its initializing value.
14659 If the underlying type is not fixed, it will be computed by
14660 finish_enum and we will reset the type of this enumerator. Of
14661 course, if we're processing a template, there may be no value. */
14662 type = value ? TREE_TYPE (value) : NULL_TREE;
14664 decl = build_decl (loc, CONST_DECL, name, type);
14666 DECL_CONTEXT (decl) = enumtype;
14667 TREE_CONSTANT (decl) = 1;
14668 TREE_READONLY (decl) = 1;
14669 DECL_INITIAL (decl) = value;
14671 if (attributes)
14672 cplus_decl_attributes (&decl, attributes, 0);
14674 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14676 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14677 on the TYPE_FIELDS list for `S'. (That's so that you can say
14678 things like `S::i' later.) */
14680 /* The enumerator may be getting declared outside of its enclosing
14681 class, like so:
14683 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14685 For which case we need to make sure that the access of `S::i'
14686 matches the access of `S::E'. */
14687 tree saved_cas = current_access_specifier;
14688 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14689 current_access_specifier = access_private_node;
14690 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14691 current_access_specifier = access_protected_node;
14692 else
14693 current_access_specifier = access_public_node;
14695 finish_member_declaration (decl);
14697 current_access_specifier = saved_cas;
14699 else
14700 pushdecl (decl);
14702 /* Add this enumeration constant to the list for this type. */
14703 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14706 /* Look for an enumerator with the given NAME within the enumeration
14707 type ENUMTYPE. This routine is used primarily for qualified name
14708 lookup into an enumerator in C++0x, e.g.,
14710 enum class Color { Red, Green, Blue };
14712 Color color = Color::Red;
14714 Returns the value corresponding to the enumerator, or
14715 NULL_TREE if no such enumerator was found. */
14716 tree
14717 lookup_enumerator (tree enumtype, tree name)
14719 tree e;
14720 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14722 e = purpose_member (name, TYPE_VALUES (enumtype));
14723 return e? TREE_VALUE (e) : NULL_TREE;
14727 /* We're defining DECL. Make sure that its type is OK. */
14729 static void
14730 check_function_type (tree decl, tree current_function_parms)
14732 tree fntype = TREE_TYPE (decl);
14733 tree return_type = complete_type (TREE_TYPE (fntype));
14735 /* In a function definition, arg types must be complete. */
14736 require_complete_types_for_parms (current_function_parms);
14738 if (dependent_type_p (return_type)
14739 || type_uses_auto (return_type))
14740 return;
14741 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14743 tree args = TYPE_ARG_TYPES (fntype);
14745 error ("return type %q#T is incomplete", return_type);
14747 /* Make it return void instead. */
14748 if (TREE_CODE (fntype) == METHOD_TYPE)
14749 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14750 void_type_node,
14751 TREE_CHAIN (args));
14752 else
14753 fntype = build_function_type (void_type_node, args);
14754 fntype = (cp_build_type_attribute_variant
14755 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14756 fntype = cxx_copy_lang_qualifiers (fntype, TREE_TYPE (decl));
14757 TREE_TYPE (decl) = fntype;
14759 else
14761 abstract_virtuals_error (decl, TREE_TYPE (fntype));
14762 maybe_warn_parm_abi (TREE_TYPE (fntype),
14763 DECL_SOURCE_LOCATION (decl));
14767 /* True iff FN is an implicitly-defined default constructor. */
14769 static bool
14770 implicit_default_ctor_p (tree fn)
14772 return (DECL_CONSTRUCTOR_P (fn)
14773 && !user_provided_p (fn)
14774 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14777 /* Clobber the contents of *this to let the back end know that the object
14778 storage is dead when we enter the constructor or leave the destructor. */
14780 static tree
14781 build_clobber_this ()
14783 /* Clobbering an empty base is pointless, and harmful if its one byte
14784 TYPE_SIZE overlays real data. */
14785 if (is_empty_class (current_class_type))
14786 return void_node;
14788 /* If we have virtual bases, clobber the whole object, but only if we're in
14789 charge. If we don't have virtual bases, clobber the as-base type so we
14790 don't mess with tail padding. */
14791 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14793 tree ctype = current_class_type;
14794 if (!vbases)
14795 ctype = CLASSTYPE_AS_BASE (ctype);
14797 tree clobber = build_clobber (ctype);
14799 tree thisref = current_class_ref;
14800 if (ctype != current_class_type)
14802 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14803 thisref = convert_from_reference (thisref);
14806 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14807 if (vbases)
14808 exprstmt = build_if_in_charge (exprstmt);
14810 return exprstmt;
14813 /* Create the FUNCTION_DECL for a function definition.
14814 DECLSPECS and DECLARATOR are the parts of the declaration;
14815 they describe the function's name and the type it returns,
14816 but twisted together in a fashion that parallels the syntax of C.
14818 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14819 DECLARATOR is really the DECL for the function we are about to
14820 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14821 indicating that the function is an inline defined in-class.
14823 This function creates a binding context for the function body
14824 as well as setting up the FUNCTION_DECL in current_function_decl.
14826 For C++, we must first check whether that datum makes any sense.
14827 For example, "class A local_a(1,2);" means that variable local_a
14828 is an aggregate of type A, which should have a constructor
14829 applied to it with the argument list [1, 2].
14831 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14832 or may be a BLOCK if the function has been defined previously
14833 in this translation unit. On exit, DECL_INITIAL (decl1) will be
14834 error_mark_node if the function has never been defined, or
14835 a BLOCK if the function has been defined somewhere. */
14837 bool
14838 start_preparsed_function (tree decl1, tree attrs, int flags)
14840 tree ctype = NULL_TREE;
14841 tree fntype;
14842 tree restype;
14843 int doing_friend = 0;
14844 cp_binding_level *bl;
14845 tree current_function_parms;
14846 struct c_fileinfo *finfo
14847 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14848 bool honor_interface;
14850 /* Sanity check. */
14851 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14852 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14854 fntype = TREE_TYPE (decl1);
14855 if (TREE_CODE (fntype) == METHOD_TYPE)
14856 ctype = TYPE_METHOD_BASETYPE (fntype);
14858 /* ISO C++ 11.4/5. A friend function defined in a class is in
14859 the (lexical) scope of the class in which it is defined. */
14860 if (!ctype && DECL_FRIEND_P (decl1))
14862 ctype = DECL_FRIEND_CONTEXT (decl1);
14864 /* CTYPE could be null here if we're dealing with a template;
14865 for example, `inline friend float foo()' inside a template
14866 will have no CTYPE set. */
14867 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14868 ctype = NULL_TREE;
14869 else
14870 doing_friend = 1;
14873 if (DECL_DECLARED_INLINE_P (decl1)
14874 && lookup_attribute ("noinline", attrs))
14875 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14876 "inline function %qD given attribute noinline", decl1);
14878 /* Handle gnu_inline attribute. */
14879 if (GNU_INLINE_P (decl1))
14881 DECL_EXTERNAL (decl1) = 1;
14882 DECL_NOT_REALLY_EXTERN (decl1) = 0;
14883 DECL_INTERFACE_KNOWN (decl1) = 1;
14884 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14887 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
14888 /* This is a constructor, we must ensure that any default args
14889 introduced by this definition are propagated to the clones
14890 now. The clones are used directly in overload resolution. */
14891 adjust_clone_args (decl1);
14893 /* Sometimes we don't notice that a function is a static member, and
14894 build a METHOD_TYPE for it. Fix that up now. */
14895 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
14896 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
14898 /* Set up current_class_type, and enter the scope of the class, if
14899 appropriate. */
14900 if (ctype)
14901 push_nested_class (ctype);
14902 else if (DECL_STATIC_FUNCTION_P (decl1))
14903 push_nested_class (DECL_CONTEXT (decl1));
14905 /* Now that we have entered the scope of the class, we must restore
14906 the bindings for any template parameters surrounding DECL1, if it
14907 is an inline member template. (Order is important; consider the
14908 case where a template parameter has the same name as a field of
14909 the class.) It is not until after this point that
14910 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14911 if (flags & SF_INCLASS_INLINE)
14912 maybe_begin_member_template_processing (decl1);
14914 /* Effective C++ rule 15. */
14915 if (warn_ecpp
14916 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
14917 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
14918 && VOID_TYPE_P (TREE_TYPE (fntype)))
14919 warning (OPT_Weffc__,
14920 "%<operator=%> should return a reference to %<*this%>");
14922 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14923 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14924 if (!DECL_INITIAL (decl1))
14925 DECL_INITIAL (decl1) = error_mark_node;
14927 /* This function exists in static storage.
14928 (This does not mean `static' in the C sense!) */
14929 TREE_STATIC (decl1) = 1;
14931 /* We must call push_template_decl after current_class_type is set
14932 up. (If we are processing inline definitions after exiting a
14933 class scope, current_class_type will be NULL_TREE until set above
14934 by push_nested_class.) */
14935 if (processing_template_decl)
14937 tree newdecl1 = push_template_decl (decl1);
14938 if (newdecl1 == error_mark_node)
14940 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
14941 pop_nested_class ();
14942 return false;
14944 decl1 = newdecl1;
14947 /* Make sure the parameter and return types are reasonable. When
14948 you declare a function, these types can be incomplete, but they
14949 must be complete when you define the function. */
14950 check_function_type (decl1, DECL_ARGUMENTS (decl1));
14952 /* Build the return declaration for the function. */
14953 restype = TREE_TYPE (fntype);
14955 if (DECL_RESULT (decl1) == NULL_TREE)
14957 tree resdecl;
14959 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
14960 DECL_ARTIFICIAL (resdecl) = 1;
14961 DECL_IGNORED_P (resdecl) = 1;
14962 DECL_RESULT (decl1) = resdecl;
14964 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
14967 /* Record the decl so that the function name is defined.
14968 If we already have a decl for this name, and it is a FUNCTION_DECL,
14969 use the old decl. */
14970 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
14972 /* A specialization is not used to guide overload resolution. */
14973 if (!DECL_FUNCTION_MEMBER_P (decl1)
14974 && !(DECL_USE_TEMPLATE (decl1) &&
14975 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
14977 tree olddecl = pushdecl (decl1);
14979 if (olddecl == error_mark_node)
14980 /* If something went wrong when registering the declaration,
14981 use DECL1; we have to have a FUNCTION_DECL to use when
14982 parsing the body of the function. */
14984 else
14986 /* Otherwise, OLDDECL is either a previous declaration
14987 of the same function or DECL1 itself. */
14989 if (warn_missing_declarations
14990 && olddecl == decl1
14991 && !DECL_MAIN_P (decl1)
14992 && TREE_PUBLIC (decl1)
14993 && !DECL_DECLARED_INLINE_P (decl1))
14995 tree context;
14997 /* Check whether DECL1 is in an anonymous
14998 namespace. */
14999 for (context = DECL_CONTEXT (decl1);
15000 context;
15001 context = DECL_CONTEXT (context))
15003 if (TREE_CODE (context) == NAMESPACE_DECL
15004 && DECL_NAME (context) == NULL_TREE)
15005 break;
15008 if (context == NULL)
15009 warning_at (DECL_SOURCE_LOCATION (decl1),
15010 OPT_Wmissing_declarations,
15011 "no previous declaration for %qD", decl1);
15014 decl1 = olddecl;
15017 else
15019 /* We need to set the DECL_CONTEXT. */
15020 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
15021 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
15023 fntype = TREE_TYPE (decl1);
15024 restype = TREE_TYPE (fntype);
15026 /* If #pragma weak applies, mark the decl appropriately now.
15027 The pragma only applies to global functions. Because
15028 determining whether or not the #pragma applies involves
15029 computing the mangled name for the declaration, we cannot
15030 apply the pragma until after we have merged this declaration
15031 with any previous declarations; if the original declaration
15032 has a linkage specification, that specification applies to
15033 the definition as well, and may affect the mangled name. */
15034 if (DECL_FILE_SCOPE_P (decl1))
15035 maybe_apply_pragma_weak (decl1);
15038 /* We are now in the scope of the function being defined. */
15039 current_function_decl = decl1;
15041 /* Save the parm names or decls from this function's declarator
15042 where store_parm_decls will find them. */
15043 current_function_parms = DECL_ARGUMENTS (decl1);
15045 /* Let the user know we're compiling this function. */
15046 announce_function (decl1);
15048 gcc_assert (DECL_INITIAL (decl1));
15050 /* This function may already have been parsed, in which case just
15051 return; our caller will skip over the body without parsing. */
15052 if (DECL_INITIAL (decl1) != error_mark_node)
15053 return true;
15055 /* Initialize RTL machinery. We cannot do this until
15056 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
15057 even when processing a template; this is how we get
15058 CFUN set up, and our per-function variables initialized.
15059 FIXME factor out the non-RTL stuff. */
15060 bl = current_binding_level;
15061 allocate_struct_function (decl1, processing_template_decl);
15063 /* Initialize the language data structures. Whenever we start
15064 a new function, we destroy temporaries in the usual way. */
15065 cfun->language = ggc_cleared_alloc<language_function> ();
15066 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15067 current_binding_level = bl;
15069 if (!processing_template_decl && type_uses_auto (restype))
15071 FNDECL_USED_AUTO (decl1) = true;
15072 current_function_auto_return_pattern = restype;
15075 /* Start the statement-tree, start the tree now. */
15076 DECL_SAVED_TREE (decl1) = push_stmt_list ();
15078 /* If we are (erroneously) defining a function that we have already
15079 defined before, wipe out what we knew before. */
15080 if (!DECL_PENDING_INLINE_P (decl1))
15081 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
15083 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
15085 /* We know that this was set up by `grokclassfn'. We do not
15086 wait until `store_parm_decls', since evil parse errors may
15087 never get us to that point. Here we keep the consistency
15088 between `current_class_type' and `current_class_ptr'. */
15089 tree t = DECL_ARGUMENTS (decl1);
15091 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
15092 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
15094 cp_function_chain->x_current_class_ref
15095 = cp_build_fold_indirect_ref (t);
15096 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
15097 cp_function_chain->x_current_class_ptr = t;
15099 /* Constructors and destructors need to know whether they're "in
15100 charge" of initializing virtual base classes. */
15101 t = DECL_CHAIN (t);
15102 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15104 current_in_charge_parm = t;
15105 t = DECL_CHAIN (t);
15107 if (DECL_HAS_VTT_PARM_P (decl1))
15109 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15110 current_vtt_parm = t;
15114 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15115 /* Implicitly-defined methods (like the
15116 destructor for a class in which no destructor
15117 is explicitly declared) must not be defined
15118 until their definition is needed. So, we
15119 ignore interface specifications for
15120 compiler-generated functions. */
15121 && !DECL_ARTIFICIAL (decl1));
15123 if (processing_template_decl)
15124 /* Don't mess with interface flags. */;
15125 else if (DECL_INTERFACE_KNOWN (decl1))
15127 tree ctx = decl_function_context (decl1);
15129 if (DECL_NOT_REALLY_EXTERN (decl1))
15130 DECL_EXTERNAL (decl1) = 0;
15132 if (ctx != NULL_TREE && vague_linkage_p (ctx))
15133 /* This is a function in a local class in an extern inline
15134 or template function. */
15135 comdat_linkage (decl1);
15137 /* If this function belongs to an interface, it is public.
15138 If it belongs to someone else's interface, it is also external.
15139 This only affects inlines and template instantiations. */
15140 else if (!finfo->interface_unknown && honor_interface)
15142 if (DECL_DECLARED_INLINE_P (decl1)
15143 || DECL_TEMPLATE_INSTANTIATION (decl1))
15145 DECL_EXTERNAL (decl1)
15146 = (finfo->interface_only
15147 || (DECL_DECLARED_INLINE_P (decl1)
15148 && ! flag_implement_inlines
15149 && !DECL_VINDEX (decl1)));
15151 /* For WIN32 we also want to put these in linkonce sections. */
15152 maybe_make_one_only (decl1);
15154 else
15155 DECL_EXTERNAL (decl1) = 0;
15156 DECL_INTERFACE_KNOWN (decl1) = 1;
15157 /* If this function is in an interface implemented in this file,
15158 make sure that the back end knows to emit this function
15159 here. */
15160 if (!DECL_EXTERNAL (decl1))
15161 mark_needed (decl1);
15163 else if (finfo->interface_unknown && finfo->interface_only
15164 && honor_interface)
15166 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15167 interface, we will have both finfo->interface_unknown and
15168 finfo->interface_only set. In that case, we don't want to
15169 use the normal heuristics because someone will supply a
15170 #pragma implementation elsewhere, and deducing it here would
15171 produce a conflict. */
15172 comdat_linkage (decl1);
15173 DECL_EXTERNAL (decl1) = 0;
15174 DECL_INTERFACE_KNOWN (decl1) = 1;
15175 DECL_DEFER_OUTPUT (decl1) = 1;
15177 else
15179 /* This is a definition, not a reference.
15180 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15181 if (!GNU_INLINE_P (decl1))
15182 DECL_EXTERNAL (decl1) = 0;
15184 if ((DECL_DECLARED_INLINE_P (decl1)
15185 || DECL_TEMPLATE_INSTANTIATION (decl1))
15186 && ! DECL_INTERFACE_KNOWN (decl1))
15187 DECL_DEFER_OUTPUT (decl1) = 1;
15188 else
15189 DECL_INTERFACE_KNOWN (decl1) = 1;
15192 /* Determine the ELF visibility attribute for the function. We must not
15193 do this before calling "pushdecl", as we must allow "duplicate_decls"
15194 to merge any attributes appropriately. We also need to wait until
15195 linkage is set. */
15196 if (!DECL_CLONED_FUNCTION_P (decl1))
15197 determine_visibility (decl1);
15199 if (!processing_template_decl)
15200 maybe_instantiate_noexcept (decl1);
15202 begin_scope (sk_function_parms, decl1);
15204 ++function_depth;
15206 if (DECL_DESTRUCTOR_P (decl1)
15207 || (DECL_CONSTRUCTOR_P (decl1)
15208 && targetm.cxx.cdtor_returns_this ()))
15210 cdtor_label = create_artificial_label (input_location);
15211 LABEL_DECL_CDTOR (cdtor_label) = true;
15214 start_fname_decls ();
15216 store_parm_decls (current_function_parms);
15218 if (!processing_template_decl
15219 && (flag_lifetime_dse > 1)
15220 && DECL_CONSTRUCTOR_P (decl1)
15221 && !DECL_CLONED_FUNCTION_P (decl1)
15222 /* Clobbering an empty base is harmful if it overlays real data. */
15223 && !is_empty_class (current_class_type)
15224 /* We can't clobber safely for an implicitly-defined default constructor
15225 because part of the initialization might happen before we enter the
15226 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15227 && !implicit_default_ctor_p (decl1))
15228 finish_expr_stmt (build_clobber_this ());
15230 if (!processing_template_decl
15231 && DECL_CONSTRUCTOR_P (decl1)
15232 && sanitize_flags_p (SANITIZE_VPTR)
15233 && !DECL_CLONED_FUNCTION_P (decl1)
15234 && !implicit_default_ctor_p (decl1))
15235 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15237 start_lambda_scope (decl1);
15239 return true;
15243 /* Like start_preparsed_function, except that instead of a
15244 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15246 Returns true on success. If the DECLARATOR is not suitable
15247 for a function, we return false, which tells the parser to
15248 skip the entire function. */
15250 bool
15251 start_function (cp_decl_specifier_seq *declspecs,
15252 const cp_declarator *declarator,
15253 tree attrs)
15255 tree decl1;
15257 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15258 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15259 if (decl1 == error_mark_node)
15260 return false;
15261 /* If the declarator is not suitable for a function definition,
15262 cause a syntax error. */
15263 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15265 error ("invalid function declaration");
15266 return false;
15269 if (DECL_MAIN_P (decl1))
15270 /* main must return int. grokfndecl should have corrected it
15271 (and issued a diagnostic) if the user got it wrong. */
15272 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15273 integer_type_node));
15275 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15278 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15279 FN. */
15281 static bool
15282 use_eh_spec_block (tree fn)
15284 return (flag_exceptions && flag_enforce_eh_specs
15285 && !processing_template_decl
15286 && !type_throw_all_p (TREE_TYPE (fn))
15287 /* We insert the EH_SPEC_BLOCK only in the original
15288 function; then, it is copied automatically to the
15289 clones. */
15290 && !DECL_CLONED_FUNCTION_P (fn)
15291 /* Implicitly-generated constructors and destructors have
15292 exception specifications. However, those specifications
15293 are the union of the possible exceptions specified by the
15294 constructors/destructors for bases and members, so no
15295 unallowed exception will ever reach this function. By
15296 not creating the EH_SPEC_BLOCK we save a little memory,
15297 and we avoid spurious warnings about unreachable
15298 code. */
15299 && !DECL_DEFAULTED_FN (fn));
15302 /* Store the parameter declarations into the current function declaration.
15303 This is called after parsing the parameter declarations, before
15304 digesting the body of the function.
15306 Also install to binding contour return value identifier, if any. */
15308 static void
15309 store_parm_decls (tree current_function_parms)
15311 tree fndecl = current_function_decl;
15312 tree parm;
15314 /* This is a chain of any other decls that came in among the parm
15315 declarations. If a parm is declared with enum {foo, bar} x;
15316 then CONST_DECLs for foo and bar are put here. */
15317 tree nonparms = NULL_TREE;
15319 if (current_function_parms)
15321 /* This case is when the function was defined with an ANSI prototype.
15322 The parms already have decls, so we need not do anything here
15323 except record them as in effect
15324 and complain if any redundant old-style parm decls were written. */
15326 tree specparms = current_function_parms;
15327 tree next;
15329 /* Must clear this because it might contain TYPE_DECLs declared
15330 at class level. */
15331 current_binding_level->names = NULL;
15333 /* If we're doing semantic analysis, then we'll call pushdecl
15334 for each of these. We must do them in reverse order so that
15335 they end in the correct forward order. */
15336 specparms = nreverse (specparms);
15338 for (parm = specparms; parm; parm = next)
15340 next = DECL_CHAIN (parm);
15341 if (TREE_CODE (parm) == PARM_DECL)
15342 pushdecl (parm);
15343 else
15345 /* If we find an enum constant or a type tag,
15346 put it aside for the moment. */
15347 TREE_CHAIN (parm) = NULL_TREE;
15348 nonparms = chainon (nonparms, parm);
15352 /* Get the decls in their original chain order and record in the
15353 function. This is all and only the PARM_DECLs that were
15354 pushed into scope by the loop above. */
15355 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15357 else
15358 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15360 /* Now store the final chain of decls for the arguments
15361 as the decl-chain of the current lexical scope.
15362 Put the enumerators in as well, at the front so that
15363 DECL_ARGUMENTS is not modified. */
15364 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15366 if (use_eh_spec_block (current_function_decl))
15367 current_eh_spec_block = begin_eh_spec_block ();
15371 /* We have finished doing semantic analysis on DECL, but have not yet
15372 generated RTL for its body. Save away our current state, so that
15373 when we want to generate RTL later we know what to do. */
15375 static void
15376 save_function_data (tree decl)
15378 struct language_function *f;
15380 /* Save the language-specific per-function data so that we can
15381 get it back when we really expand this function. */
15382 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15384 /* Make a copy. */
15385 f = ggc_alloc<language_function> ();
15386 memcpy (f, cp_function_chain, sizeof (struct language_function));
15387 DECL_SAVED_FUNCTION_DATA (decl) = f;
15389 /* Clear out the bits we don't need. */
15390 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15391 f->bindings = NULL;
15392 f->x_local_names = NULL;
15393 f->base.local_typedefs = NULL;
15397 /* Set the return value of the constructor (if present). */
15399 static void
15400 finish_constructor_body (void)
15402 tree val;
15403 tree exprstmt;
15405 if (targetm.cxx.cdtor_returns_this ())
15407 /* Any return from a constructor will end up here. */
15408 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15410 val = DECL_ARGUMENTS (current_function_decl);
15411 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15412 DECL_RESULT (current_function_decl), val);
15413 /* Return the address of the object. */
15414 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15415 add_stmt (exprstmt);
15419 /* Do all the processing for the beginning of a destructor; set up the
15420 vtable pointers and cleanups for bases and members. */
15422 static void
15423 begin_destructor_body (void)
15425 tree compound_stmt;
15427 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15428 issued an error message. We still want to try to process the
15429 body of the function, but initialize_vtbl_ptrs will crash if
15430 TYPE_BINFO is NULL. */
15431 if (COMPLETE_TYPE_P (current_class_type))
15433 compound_stmt = begin_compound_stmt (0);
15434 /* Make all virtual function table pointers in non-virtual base
15435 classes point to CURRENT_CLASS_TYPE's virtual function
15436 tables. */
15437 initialize_vtbl_ptrs (current_class_ptr);
15438 finish_compound_stmt (compound_stmt);
15440 if (flag_lifetime_dse
15441 /* Clobbering an empty base is harmful if it overlays real data. */
15442 && !is_empty_class (current_class_type))
15444 if (sanitize_flags_p (SANITIZE_VPTR)
15445 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15446 && TYPE_CONTAINS_VPTR_P (current_class_type))
15448 tree binfo = TYPE_BINFO (current_class_type);
15449 tree ref
15450 = cp_build_fold_indirect_ref (current_class_ptr);
15452 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15453 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15454 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15455 NOP_EXPR, vtbl,
15456 tf_warning_or_error);
15457 finish_decl_cleanup (NULL_TREE, stmt);
15459 else
15460 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15463 /* And insert cleanups for our bases and members so that they
15464 will be properly destroyed if we throw. */
15465 push_base_cleanups ();
15469 /* At the end of every destructor we generate code to delete the object if
15470 necessary. Do that now. */
15472 static void
15473 finish_destructor_body (void)
15475 tree exprstmt;
15477 /* Any return from a destructor will end up here; that way all base
15478 and member cleanups will be run when the function returns. */
15479 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15481 if (targetm.cxx.cdtor_returns_this ())
15483 tree val;
15485 val = DECL_ARGUMENTS (current_function_decl);
15486 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15487 DECL_RESULT (current_function_decl), val);
15488 /* Return the address of the object. */
15489 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15490 add_stmt (exprstmt);
15494 /* Do the necessary processing for the beginning of a function body, which
15495 in this case includes member-initializers, but not the catch clauses of
15496 a function-try-block. Currently, this means opening a binding level
15497 for the member-initializers (in a ctor), member cleanups (in a dtor),
15498 and capture proxies (in a lambda operator()). */
15500 tree
15501 begin_function_body (void)
15503 tree stmt;
15505 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15506 return NULL_TREE;
15508 if (processing_template_decl)
15509 /* Do nothing now. */;
15510 else
15511 /* Always keep the BLOCK node associated with the outermost pair of
15512 curly braces of a function. These are needed for correct
15513 operation of dwarfout.c. */
15514 keep_next_level (true);
15516 stmt = begin_compound_stmt (BCS_FN_BODY);
15518 if (processing_template_decl)
15519 /* Do nothing now. */;
15520 else if (DECL_DESTRUCTOR_P (current_function_decl))
15521 begin_destructor_body ();
15523 return stmt;
15526 /* Do the processing for the end of a function body. Currently, this means
15527 closing out the cleanups for fully-constructed bases and members, and in
15528 the case of the destructor, deleting the object if desired. Again, this
15529 is only meaningful for [cd]tors, since they are the only functions where
15530 there is a significant distinction between the main body and any
15531 function catch clauses. Handling, say, main() return semantics here
15532 would be wrong, as flowing off the end of a function catch clause for
15533 main() would also need to return 0. */
15535 void
15536 finish_function_body (tree compstmt)
15538 if (compstmt == NULL_TREE)
15539 return;
15541 /* Close the block. */
15542 finish_compound_stmt (compstmt);
15544 if (processing_template_decl)
15545 /* Do nothing now. */;
15546 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15547 finish_constructor_body ();
15548 else if (DECL_DESTRUCTOR_P (current_function_decl))
15549 finish_destructor_body ();
15552 /* Given a function, returns the BLOCK corresponding to the outermost level
15553 of curly braces, skipping the artificial block created for constructor
15554 initializers. */
15556 tree
15557 outer_curly_brace_block (tree fndecl)
15559 tree block = DECL_INITIAL (fndecl);
15560 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15561 return block;
15562 block = BLOCK_SUBBLOCKS (block);
15563 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15564 return block;
15565 block = BLOCK_SUBBLOCKS (block);
15566 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15567 return block;
15570 /* If FNDECL is a class's key method, add the class to the list of
15571 keyed classes that should be emitted. */
15573 static void
15574 record_key_method_defined (tree fndecl)
15576 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15577 && DECL_VIRTUAL_P (fndecl)
15578 && !processing_template_decl)
15580 tree fnclass = DECL_CONTEXT (fndecl);
15581 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15582 vec_safe_push (keyed_classes, fnclass);
15586 /* Subroutine of finish_function.
15587 Save the body of constexpr functions for possible
15588 future compile time evaluation. */
15590 static void
15591 maybe_save_function_definition (tree fun)
15593 if (!processing_template_decl
15594 && DECL_DECLARED_CONSTEXPR_P (fun)
15595 && !cp_function_chain->invalid_constexpr
15596 && !DECL_CLONED_FUNCTION_P (fun))
15597 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15600 /* Finish up a function declaration and compile that function
15601 all the way to assembler language output. The free the storage
15602 for the function definition. INLINE_P is TRUE if we just
15603 finished processing the body of an in-class inline function
15604 definition. (This processing will have taken place after the
15605 class definition is complete.) */
15607 tree
15608 finish_function (bool inline_p)
15610 tree fndecl = current_function_decl;
15611 tree fntype, ctype = NULL_TREE;
15613 /* When we get some parse errors, we can end up without a
15614 current_function_decl, so cope. */
15615 if (fndecl == NULL_TREE)
15616 return error_mark_node;
15618 finish_lambda_scope ();
15620 if (c_dialect_objc ())
15621 objc_finish_function ();
15623 record_key_method_defined (fndecl);
15625 fntype = TREE_TYPE (fndecl);
15627 /* TREE_READONLY (fndecl) = 1;
15628 This caused &foo to be of type ptr-to-const-function
15629 which then got a warning when stored in a ptr-to-function variable. */
15631 gcc_assert (building_stmt_list_p ());
15632 /* The current function is being defined, so its DECL_INITIAL should
15633 be set, and unless there's a multiple definition, it should be
15634 error_mark_node. */
15635 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15637 /* For a cloned function, we've already got all the code we need;
15638 there's no need to add any extra bits. */
15639 if (!DECL_CLONED_FUNCTION_P (fndecl))
15641 /* Make it so that `main' always returns 0 by default. */
15642 if (DECL_MAIN_P (current_function_decl))
15643 finish_return_stmt (integer_zero_node);
15645 if (use_eh_spec_block (current_function_decl))
15646 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15647 (TREE_TYPE (current_function_decl)),
15648 current_eh_spec_block);
15651 /* If we're saving up tree structure, tie off the function now. */
15652 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15654 finish_fname_decls ();
15656 /* If this function can't throw any exceptions, remember that. */
15657 if (!processing_template_decl
15658 && !cp_function_chain->can_throw
15659 && !flag_non_call_exceptions
15660 && !decl_replaceable_p (fndecl))
15661 TREE_NOTHROW (fndecl) = 1;
15663 /* This must come after expand_function_end because cleanups might
15664 have declarations (from inline functions) that need to go into
15665 this function's blocks. */
15667 /* If the current binding level isn't the outermost binding level
15668 for this function, either there is a bug, or we have experienced
15669 syntax errors and the statement tree is malformed. */
15670 if (current_binding_level->kind != sk_function_parms)
15672 /* Make sure we have already experienced errors. */
15673 gcc_assert (errorcount);
15675 /* Throw away the broken statement tree and extra binding
15676 levels. */
15677 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15679 while (current_binding_level->kind != sk_function_parms)
15681 if (current_binding_level->kind == sk_class)
15682 pop_nested_class ();
15683 else
15684 poplevel (0, 0, 0);
15687 poplevel (1, 0, 1);
15689 /* Statements should always be full-expressions at the outermost set
15690 of curly braces for a function. */
15691 gcc_assert (stmts_are_full_exprs_p ());
15693 /* If there are no return statements in a function with auto return type,
15694 the return type is void. But if the declared type is something like
15695 auto*, this is an error. */
15696 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15697 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15699 if (is_auto (current_function_auto_return_pattern))
15701 apply_deduced_return_type (fndecl, void_type_node);
15702 fntype = TREE_TYPE (fndecl);
15704 else if (!current_function_returns_value
15705 && !current_function_returns_null)
15707 error ("no return statements in function returning %qT",
15708 current_function_auto_return_pattern);
15709 inform (input_location, "only plain %<auto%> return type can be "
15710 "deduced to %<void%>");
15714 // If this is a concept, check that the definition is reasonable.
15715 if (DECL_DECLARED_CONCEPT_P (fndecl))
15716 check_function_concept (fndecl);
15718 /* Lambda closure members are implicitly constexpr if possible. */
15719 if (cxx_dialect >= cxx17
15720 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15721 DECL_DECLARED_CONSTEXPR_P (fndecl)
15722 = ((processing_template_decl
15723 || is_valid_constexpr_fn (fndecl, /*complain*/false))
15724 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15726 /* Save constexpr function body before it gets munged by
15727 the NRV transformation. */
15728 maybe_save_function_definition (fndecl);
15730 /* Invoke the pre-genericize plugin before we start munging things. */
15731 if (!processing_template_decl)
15732 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15734 /* Perform delayed folding before NRV transformation. */
15735 if (!processing_template_decl)
15736 cp_fold_function (fndecl);
15738 /* Set up the named return value optimization, if we can. Candidate
15739 variables are selected in check_return_expr. */
15740 if (current_function_return_value)
15742 tree r = current_function_return_value;
15743 tree outer;
15745 if (r != error_mark_node
15746 /* This is only worth doing for fns that return in memory--and
15747 simpler, since we don't have to worry about promoted modes. */
15748 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15749 /* Only allow this for variables declared in the outer scope of
15750 the function so we know that their lifetime always ends with a
15751 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15752 we were to do this optimization in tree-ssa. */
15753 && (outer = outer_curly_brace_block (fndecl))
15754 && chain_member (r, BLOCK_VARS (outer)))
15755 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15757 current_function_return_value = NULL_TREE;
15760 /* Remember that we were in class scope. */
15761 if (current_class_name)
15762 ctype = current_class_type;
15764 /* Must mark the RESULT_DECL as being in this function. */
15765 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15767 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15768 to the FUNCTION_DECL node itself. */
15769 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15771 /* Save away current state, if appropriate. */
15772 if (!processing_template_decl)
15773 save_function_data (fndecl);
15775 /* Complain if there's just no return statement. */
15776 if (warn_return_type
15777 && !VOID_TYPE_P (TREE_TYPE (fntype))
15778 && !dependent_type_p (TREE_TYPE (fntype))
15779 && !current_function_returns_value && !current_function_returns_null
15780 /* Don't complain if we abort or throw. */
15781 && !current_function_returns_abnormally
15782 /* Don't complain if there's an infinite loop. */
15783 && !current_function_infinite_loop
15784 /* Don't complain if we are declared noreturn. */
15785 && !TREE_THIS_VOLATILE (fndecl)
15786 && !DECL_NAME (DECL_RESULT (fndecl))
15787 && !TREE_NO_WARNING (fndecl)
15788 /* Structor return values (if any) are set by the compiler. */
15789 && !DECL_CONSTRUCTOR_P (fndecl)
15790 && !DECL_DESTRUCTOR_P (fndecl)
15791 && targetm.warn_func_return (fndecl))
15793 warning (OPT_Wreturn_type,
15794 "no return statement in function returning non-void");
15795 TREE_NO_WARNING (fndecl) = 1;
15798 /* Store the end of the function, so that we get good line number
15799 info for the epilogue. */
15800 cfun->function_end_locus = input_location;
15802 /* Complain about parameters that are only set, but never otherwise used. */
15803 if (warn_unused_but_set_parameter
15804 && !processing_template_decl
15805 && errorcount == unused_but_set_errorcount
15806 && !DECL_CLONED_FUNCTION_P (fndecl))
15808 tree decl;
15810 for (decl = DECL_ARGUMENTS (fndecl);
15811 decl;
15812 decl = DECL_CHAIN (decl))
15813 if (TREE_USED (decl)
15814 && TREE_CODE (decl) == PARM_DECL
15815 && !DECL_READ_P (decl)
15816 && DECL_NAME (decl)
15817 && !DECL_ARTIFICIAL (decl)
15818 && !TREE_NO_WARNING (decl)
15819 && !DECL_IN_SYSTEM_HEADER (decl)
15820 && TREE_TYPE (decl) != error_mark_node
15821 && !TYPE_REF_P (TREE_TYPE (decl))
15822 && (!CLASS_TYPE_P (TREE_TYPE (decl))
15823 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15824 warning_at (DECL_SOURCE_LOCATION (decl),
15825 OPT_Wunused_but_set_parameter,
15826 "parameter %qD set but not used", decl);
15827 unused_but_set_errorcount = errorcount;
15830 /* Complain about locally defined typedefs that are not used in this
15831 function. */
15832 maybe_warn_unused_local_typedefs ();
15834 /* Possibly warn about unused parameters. */
15835 if (warn_unused_parameter
15836 && !processing_template_decl
15837 && !DECL_CLONED_FUNCTION_P (fndecl))
15838 do_warn_unused_parameter (fndecl);
15840 /* Genericize before inlining. */
15841 if (!processing_template_decl)
15843 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15844 cp_genericize (fndecl);
15845 /* Clear out the bits we don't need. */
15846 f->x_current_class_ptr = NULL;
15847 f->x_current_class_ref = NULL;
15848 f->x_eh_spec_block = NULL;
15849 f->x_in_charge_parm = NULL;
15850 f->x_vtt_parm = NULL;
15851 f->x_return_value = NULL;
15852 f->bindings = NULL;
15853 f->extern_decl_map = NULL;
15854 f->infinite_loops = NULL;
15856 /* Clear out the bits we don't need. */
15857 local_names = NULL;
15859 /* We're leaving the context of this function, so zap cfun. It's still in
15860 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
15861 set_cfun (NULL);
15862 current_function_decl = NULL;
15864 /* If this is an in-class inline definition, we may have to pop the
15865 bindings for the template parameters that we added in
15866 maybe_begin_member_template_processing when start_function was
15867 called. */
15868 if (inline_p)
15869 maybe_end_member_template_processing ();
15871 /* Leave the scope of the class. */
15872 if (ctype)
15873 pop_nested_class ();
15875 --function_depth;
15877 /* Clean up. */
15878 current_function_decl = NULL_TREE;
15880 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
15881 return fndecl;
15884 /* Create the FUNCTION_DECL for a function definition.
15885 DECLSPECS and DECLARATOR are the parts of the declaration;
15886 they describe the return type and the name of the function,
15887 but twisted together in a fashion that parallels the syntax of C.
15889 This function creates a binding context for the function body
15890 as well as setting up the FUNCTION_DECL in current_function_decl.
15892 Returns a FUNCTION_DECL on success.
15894 If the DECLARATOR is not suitable for a function (it defines a datum
15895 instead), we return 0, which tells yyparse to report a parse error.
15897 May return void_type_node indicating that this method is actually
15898 a friend. See grokfield for more details.
15900 Came here with a `.pushlevel' .
15902 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15903 CHANGES TO CODE IN `grokfield'. */
15905 tree
15906 grokmethod (cp_decl_specifier_seq *declspecs,
15907 const cp_declarator *declarator, tree attrlist)
15909 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
15910 &attrlist);
15912 if (fndecl == error_mark_node)
15913 return error_mark_node;
15915 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
15917 error ("invalid member function declaration");
15918 return error_mark_node;
15921 if (attrlist)
15922 cplus_decl_attributes (&fndecl, attrlist, 0);
15924 /* Pass friends other than inline friend functions back. */
15925 if (fndecl == void_type_node)
15926 return fndecl;
15928 if (DECL_IN_AGGR_P (fndecl))
15930 if (DECL_CLASS_SCOPE_P (fndecl))
15931 error ("%qD is already defined in class %qT", fndecl,
15932 DECL_CONTEXT (fndecl));
15933 return error_mark_node;
15936 check_template_shadow (fndecl);
15938 if (TREE_PUBLIC (fndecl))
15939 DECL_COMDAT (fndecl) = 1;
15940 DECL_DECLARED_INLINE_P (fndecl) = 1;
15941 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
15943 /* We process method specializations in finish_struct_1. */
15944 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
15946 fndecl = push_template_decl (fndecl);
15947 if (fndecl == error_mark_node)
15948 return fndecl;
15951 if (! DECL_FRIEND_P (fndecl))
15953 if (DECL_CHAIN (fndecl))
15955 fndecl = copy_node (fndecl);
15956 TREE_CHAIN (fndecl) = NULL_TREE;
15960 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
15962 DECL_IN_AGGR_P (fndecl) = 1;
15963 return fndecl;
15967 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
15968 we can lay it out later, when and if its type becomes complete.
15970 Also handle constexpr variables where the initializer involves
15971 an unlowered PTRMEM_CST because the class isn't complete yet. */
15973 void
15974 maybe_register_incomplete_var (tree var)
15976 gcc_assert (VAR_P (var));
15978 /* Keep track of variables with incomplete types. */
15979 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
15980 && DECL_EXTERNAL (var))
15982 tree inner_type = TREE_TYPE (var);
15984 while (TREE_CODE (inner_type) == ARRAY_TYPE)
15985 inner_type = TREE_TYPE (inner_type);
15986 inner_type = TYPE_MAIN_VARIANT (inner_type);
15988 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
15989 /* RTTI TD entries are created while defining the type_info. */
15990 || (TYPE_LANG_SPECIFIC (inner_type)
15991 && TYPE_BEING_DEFINED (inner_type)))
15993 incomplete_var iv = {var, inner_type};
15994 vec_safe_push (incomplete_vars, iv);
15996 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
15997 && decl_constant_var_p (var)
15998 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
16000 /* When the outermost open class is complete we can resolve any
16001 pointers-to-members. */
16002 tree context = outermost_open_class ();
16003 incomplete_var iv = {var, context};
16004 vec_safe_push (incomplete_vars, iv);
16009 /* Called when a class type (given by TYPE) is defined. If there are
16010 any existing VAR_DECLs whose type has been completed by this
16011 declaration, update them now. */
16013 void
16014 complete_vars (tree type)
16016 unsigned ix;
16017 incomplete_var *iv;
16019 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
16021 if (same_type_p (type, iv->incomplete_type))
16023 tree var = iv->decl;
16024 tree type = TREE_TYPE (var);
16026 if (type != error_mark_node
16027 && (TYPE_MAIN_VARIANT (strip_array_types (type))
16028 == iv->incomplete_type))
16030 /* Complete the type of the variable. The VAR_DECL itself
16031 will be laid out in expand_expr. */
16032 complete_type (type);
16033 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
16036 /* Remove this entry from the list. */
16037 incomplete_vars->unordered_remove (ix);
16039 else
16040 ix++;
16043 /* Check for pending declarations which may have abstract type. */
16044 complete_type_check_abstract (type);
16047 /* If DECL is of a type which needs a cleanup, build and return an
16048 expression to perform that cleanup here. Return NULL_TREE if no
16049 cleanup need be done. DECL can also be a _REF when called from
16050 split_nonconstant_init_1. */
16052 tree
16053 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
16055 tree type;
16056 tree attr;
16057 tree cleanup;
16059 /* Assume no cleanup is required. */
16060 cleanup = NULL_TREE;
16062 if (error_operand_p (decl))
16063 return cleanup;
16065 /* Handle "__attribute__((cleanup))". We run the cleanup function
16066 before the destructor since the destructor is what actually
16067 terminates the lifetime of the object. */
16068 if (DECL_P (decl))
16069 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
16070 else
16071 attr = NULL_TREE;
16072 if (attr)
16074 tree id;
16075 tree fn;
16076 tree arg;
16078 /* Get the name specified by the user for the cleanup function. */
16079 id = TREE_VALUE (TREE_VALUE (attr));
16080 /* Look up the name to find the cleanup function to call. It is
16081 important to use lookup_name here because that is what is
16082 used in c-common.c:handle_cleanup_attribute when performing
16083 initial checks on the attribute. Note that those checks
16084 include ensuring that the function found is not an overloaded
16085 function, or an object with an overloaded call operator,
16086 etc.; we can rely on the fact that the function found is an
16087 ordinary FUNCTION_DECL. */
16088 fn = lookup_name (id);
16089 arg = build_address (decl);
16090 if (!mark_used (decl, complain) && !(complain & tf_error))
16091 return error_mark_node;
16092 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
16093 if (cleanup == error_mark_node)
16094 return error_mark_node;
16096 /* Handle ordinary C++ destructors. */
16097 type = TREE_TYPE (decl);
16098 if (type_build_dtor_call (type))
16100 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16101 tree addr;
16102 tree call;
16104 if (TREE_CODE (type) == ARRAY_TYPE)
16105 addr = decl;
16106 else
16107 addr = build_address (decl);
16109 call = build_delete (TREE_TYPE (addr), addr,
16110 sfk_complete_destructor, flags, 0, complain);
16111 if (call == error_mark_node)
16112 cleanup = error_mark_node;
16113 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16114 /* Discard the call. */;
16115 else if (cleanup)
16116 cleanup = cp_build_compound_expr (cleanup, call, complain);
16117 else
16118 cleanup = call;
16121 /* build_delete sets the location of the destructor call to the
16122 current location, even though the destructor is going to be
16123 called later, at the end of the current scope. This can lead to
16124 a "jumpy" behavior for users of debuggers when they step around
16125 the end of the block. So let's unset the location of the
16126 destructor call instead. */
16127 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16129 if (cleanup
16130 && DECL_P (decl)
16131 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16132 /* Treat objects with destructors as used; the destructor may do
16133 something substantive. */
16134 && !mark_used (decl, complain) && !(complain & tf_error))
16135 return error_mark_node;
16137 return cleanup;
16141 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16142 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16143 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16145 tree
16146 static_fn_type (tree memfntype)
16148 tree fntype;
16149 tree args;
16151 if (TYPE_PTRMEMFUNC_P (memfntype))
16152 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16153 if (INDIRECT_TYPE_P (memfntype)
16154 || TREE_CODE (memfntype) == FUNCTION_DECL)
16155 memfntype = TREE_TYPE (memfntype);
16156 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16157 return memfntype;
16158 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16159 args = TYPE_ARG_TYPES (memfntype);
16160 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16161 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
16162 fntype = (cp_build_type_attribute_variant
16163 (fntype, TYPE_ATTRIBUTES (memfntype)));
16164 fntype = cxx_copy_lang_qualifiers (fntype, memfntype);
16165 return fntype;
16168 /* DECL was originally constructed as a non-static member function,
16169 but turned out to be static. Update it accordingly. */
16171 void
16172 revert_static_member_fn (tree decl)
16174 tree stype = static_fn_type (decl);
16175 cp_cv_quals quals = type_memfn_quals (stype);
16176 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16178 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16179 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16181 TREE_TYPE (decl) = stype;
16183 if (DECL_ARGUMENTS (decl))
16184 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16185 DECL_STATIC_FUNCTION_P (decl) = 1;
16188 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16189 one of the language-independent trees. */
16191 enum cp_tree_node_structure_enum
16192 cp_tree_node_structure (union lang_tree_node * t)
16194 switch (TREE_CODE (&t->generic))
16196 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16197 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16198 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16199 case OVERLOAD: return TS_CP_OVERLOAD;
16200 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16201 case PTRMEM_CST: return TS_CP_PTRMEM;
16202 case BASELINK: return TS_CP_BASELINK;
16203 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16204 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16205 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16206 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16207 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16208 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16209 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16210 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16211 default: return TS_CP_GENERIC;
16215 /* Build the void_list_node (void_type_node having been created). */
16216 tree
16217 build_void_list_node (void)
16219 tree t = build_tree_list (NULL_TREE, void_type_node);
16220 return t;
16223 bool
16224 cp_missing_noreturn_ok_p (tree decl)
16226 /* A missing noreturn is ok for the `main' function. */
16227 return DECL_MAIN_P (decl);
16230 /* Return the decl used to identify the COMDAT group into which DECL should
16231 be placed. */
16233 tree
16234 cxx_comdat_group (tree decl)
16236 /* Virtual tables, construction virtual tables, and virtual table
16237 tables all go in a single COMDAT group, named after the primary
16238 virtual table. */
16239 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16240 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16241 /* For all other DECLs, the COMDAT group is the mangled name of the
16242 declaration itself. */
16243 else
16245 while (DECL_THUNK_P (decl))
16247 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16248 into the same section as the target function. In that case
16249 we must return target's name. */
16250 tree target = THUNK_TARGET (decl);
16251 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16252 && DECL_SECTION_NAME (target) != NULL
16253 && DECL_ONE_ONLY (target))
16254 decl = target;
16255 else
16256 break;
16260 return decl;
16263 /* Returns the return type for FN as written by the user, which may include
16264 a placeholder for a deduced return type. */
16266 tree
16267 fndecl_declared_return_type (tree fn)
16269 fn = STRIP_TEMPLATE (fn);
16270 if (FNDECL_USED_AUTO (fn))
16272 struct language_function *f = NULL;
16273 if (DECL_STRUCT_FUNCTION (fn))
16274 f = DECL_STRUCT_FUNCTION (fn)->language;
16275 if (f == NULL)
16276 f = DECL_SAVED_FUNCTION_DATA (fn);
16277 return f->x_auto_return_pattern;
16279 return TREE_TYPE (TREE_TYPE (fn));
16282 /* Returns true iff DECL is a variable or function declared with an auto type
16283 that has not yet been deduced to a real type. */
16285 bool
16286 undeduced_auto_decl (tree decl)
16288 if (cxx_dialect < cxx11)
16289 return false;
16290 return ((VAR_OR_FUNCTION_DECL_P (decl)
16291 || TREE_CODE (decl) == TEMPLATE_DECL)
16292 && type_uses_auto (TREE_TYPE (decl)));
16295 /* Complain if DECL has an undeduced return type. */
16297 bool
16298 require_deduced_type (tree decl, tsubst_flags_t complain)
16300 if (undeduced_auto_decl (decl))
16302 if (complain & tf_error)
16303 error ("use of %qD before deduction of %<auto%>", decl);
16304 return false;
16306 return true;
16309 #include "gt-cp-decl.h"