[C++ PATCH] Deprecate -ffriend-injection
[official-gcc.git] / gcc / cp / decl.c
blob15f7f1224627df4a51e118e63cdc38d591ddcea2
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 int leaving_for_scope;
580 scope_kind kind;
581 unsigned ix;
583 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
584 restart:
586 block = NULL_TREE;
588 gcc_assert (current_binding_level->kind != sk_class
589 && current_binding_level->kind != sk_namespace);
591 if (current_binding_level->kind == sk_cleanup)
592 functionbody = 0;
593 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
595 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
597 /* We used to use KEEP == 2 to indicate that the new block should go
598 at the beginning of the list of blocks at this binding level,
599 rather than the end. This hack is no longer used. */
600 gcc_assert (keep == 0 || keep == 1);
602 if (current_binding_level->keep)
603 keep = 1;
605 /* Any uses of undefined labels, and any defined labels, now operate
606 under constraints of next binding contour. */
607 if (cfun && !functionbody && named_labels)
608 named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
609 (current_binding_level);
611 /* Get the decls in the order they were written.
612 Usually current_binding_level->names is in reverse order.
613 But parameter decls were previously put in forward order. */
615 decls = current_binding_level->names;
616 if (reverse)
618 decls = nreverse (decls);
619 current_binding_level->names = decls;
622 /* If there were any declarations or structure tags in that level,
623 or if this level is a function body,
624 create a BLOCK to record them for the life of this function. */
625 block = NULL_TREE;
626 /* Avoid function body block if possible. */
627 if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
628 keep = 0;
629 else if (keep == 1 || functionbody)
630 block = make_node (BLOCK);
631 if (block != NULL_TREE)
633 BLOCK_VARS (block) = decls;
634 BLOCK_SUBBLOCKS (block) = subblocks;
637 /* In each subblock, record that this is its superior. */
638 if (keep >= 0)
639 for (link = subblocks; link; link = BLOCK_CHAIN (link))
640 BLOCK_SUPERCONTEXT (link) = block;
642 /* We still support the old for-scope rules, whereby the variables
643 in a init statement were in scope after the for-statement ended.
644 We only use the new rules if flag_new_for_scope is nonzero. */
645 leaving_for_scope
646 = current_binding_level->kind == sk_for && flag_new_for_scope;
648 /* Before we remove the declarations first check for unused variables. */
649 if ((warn_unused_variable || warn_unused_but_set_variable)
650 && current_binding_level->kind != sk_template_parms
651 && !processing_template_decl)
652 for (tree d = get_local_decls (); d; d = TREE_CHAIN (d))
654 /* There are cases where D itself is a TREE_LIST. See in
655 push_local_binding where the list of decls returned by
656 getdecls is built. */
657 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
659 tree type = TREE_TYPE (decl);
660 if (VAR_P (decl)
661 && (! TREE_USED (decl) || !DECL_READ_P (decl))
662 && ! DECL_IN_SYSTEM_HEADER (decl)
663 /* For structured bindings, consider only real variables, not
664 subobjects. */
665 && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl)
666 : (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)))
667 && type != error_mark_node
668 && (!CLASS_TYPE_P (type)
669 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
670 || lookup_attribute ("warn_unused",
671 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
673 if (! TREE_USED (decl))
675 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
676 warning_at (DECL_SOURCE_LOCATION (decl),
677 OPT_Wunused_variable,
678 "unused structured binding declaration");
679 else
680 warning_at (DECL_SOURCE_LOCATION (decl),
681 OPT_Wunused_variable, "unused variable %qD", decl);
683 else if (DECL_CONTEXT (decl) == current_function_decl
684 // For -Wunused-but-set-variable leave references alone.
685 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
686 && errorcount == unused_but_set_errorcount)
688 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
689 warning_at (DECL_SOURCE_LOCATION (decl),
690 OPT_Wunused_but_set_variable, "structured "
691 "binding declaration set but not used");
692 else
693 warning_at (DECL_SOURCE_LOCATION (decl),
694 OPT_Wunused_but_set_variable,
695 "variable %qD set but not used", decl);
696 unused_but_set_errorcount = errorcount;
701 /* Remove declarations for all the DECLs in this level. */
702 for (link = decls; link; link = TREE_CHAIN (link))
704 decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link;
705 tree name = OVL_NAME (decl);
707 if (leaving_for_scope && VAR_P (decl)
708 /* It's hard to make this ARM compatibility hack play nicely with
709 lambdas, and it really isn't necessary in C++11 mode. */
710 && cxx_dialect < cxx11
711 && name)
713 cxx_binding *ob = outer_binding (name,
714 IDENTIFIER_BINDING (name),
715 /*class_p=*/true);
716 tree ns_binding = NULL_TREE;
717 if (!ob)
718 ns_binding = get_namespace_binding (current_namespace, name);
720 if (ob && ob->scope == current_binding_level->level_chain)
721 /* We have something like:
723 int i;
724 for (int i; ;);
726 and we are leaving the `for' scope. There's no reason to
727 keep the binding of the inner `i' in this case. */
729 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
730 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
731 /* Here, we have something like:
733 typedef int I;
735 void f () {
736 for (int I; ;);
739 We must pop the for-scope binding so we know what's a
740 type and what isn't. */
742 else
744 /* Mark this VAR_DECL as dead so that we can tell we left it
745 there only for backward compatibility. */
746 DECL_DEAD_FOR_LOCAL (link) = 1;
748 /* Keep track of what should have happened when we
749 popped the binding. */
750 if (ob && ob->value)
752 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
753 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
756 /* Add it to the list of dead variables in the next
757 outermost binding to that we can remove these when we
758 leave that binding. */
759 vec_safe_push (
760 current_binding_level->level_chain->dead_vars_from_for,
761 link);
763 /* Although we don't pop the cxx_binding, we do clear
764 its SCOPE since the scope is going away now. */
765 IDENTIFIER_BINDING (name)->scope
766 = current_binding_level->level_chain;
768 /* Don't remove the binding. */
769 name = NULL_TREE;
772 /* Remove the binding. */
773 if (TREE_CODE (decl) == LABEL_DECL)
774 pop_local_label (name, decl);
775 else
776 pop_local_binding (name, decl);
779 /* Remove declarations for any `for' variables from inner scopes
780 that we kept around. */
781 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
782 ix, decl)
783 pop_local_binding (DECL_NAME (decl), decl);
785 /* Restore the IDENTIFIER_TYPE_VALUEs. */
786 for (link = current_binding_level->type_shadowed;
787 link; link = TREE_CHAIN (link))
788 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
790 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
791 list if a `using' declaration put them there. The debugging
792 back ends won't understand OVERLOAD, so we remove them here.
793 Because the BLOCK_VARS are (temporarily) shared with
794 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
795 popped all the bindings. Also remove undeduced 'auto' decls,
796 which LTO doesn't understand, and can't have been used by anything. */
797 if (block)
799 tree* d;
801 for (d = &BLOCK_VARS (block); *d; )
803 if (TREE_CODE (*d) == TREE_LIST
804 || (!processing_template_decl
805 && undeduced_auto_decl (*d)))
806 *d = TREE_CHAIN (*d);
807 else
808 d = &DECL_CHAIN (*d);
812 /* If the level being exited is the top level of a function,
813 check over all the labels. */
814 if (functionbody)
816 if (block)
818 /* Since this is the top level block of a function, the vars are
819 the function's parameters. Don't leave them in the BLOCK
820 because they are found in the FUNCTION_DECL instead. */
821 BLOCK_VARS (block) = 0;
822 pop_labels (block);
824 else
825 pop_labels (subblocks);
828 kind = current_binding_level->kind;
829 if (kind == sk_cleanup)
831 tree stmt;
833 /* If this is a temporary binding created for a cleanup, then we'll
834 have pushed a statement list level. Pop that, create a new
835 BIND_EXPR for the block, and insert it into the stream. */
836 stmt = pop_stmt_list (current_binding_level->statement_list);
837 stmt = c_build_bind_expr (input_location, block, stmt);
838 add_stmt (stmt);
841 leave_scope ();
842 if (functionbody)
844 /* The current function is being defined, so its DECL_INITIAL
845 should be error_mark_node. */
846 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
847 DECL_INITIAL (current_function_decl) = block ? block : subblocks;
848 if (subblocks)
850 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
852 if (BLOCK_SUBBLOCKS (subblocks))
853 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
855 else
856 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
859 else if (block)
860 current_binding_level->blocks
861 = block_chainon (current_binding_level->blocks, block);
863 /* If we did not make a block for the level just exited,
864 any blocks made for inner levels
865 (since they cannot be recorded as subblocks in that level)
866 must be carried forward so they will later become subblocks
867 of something else. */
868 else if (subblocks)
869 current_binding_level->blocks
870 = block_chainon (current_binding_level->blocks, subblocks);
872 /* Each and every BLOCK node created here in `poplevel' is important
873 (e.g. for proper debugging information) so if we created one
874 earlier, mark it as "used". */
875 if (block)
876 TREE_USED (block) = 1;
878 /* All temporary bindings created for cleanups are popped silently. */
879 if (kind == sk_cleanup)
880 goto restart;
882 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
883 return block;
886 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
887 /* Diagnose odr-used extern inline variables without definitions
888 in the current TU. */
891 wrapup_namespace_globals ()
893 if (vec<tree, va_gc> *statics = static_decls)
895 tree decl;
896 unsigned int i;
897 FOR_EACH_VEC_ELT (*statics, i, decl)
899 if (warn_unused_function
900 && TREE_CODE (decl) == FUNCTION_DECL
901 && DECL_INITIAL (decl) == 0
902 && DECL_EXTERNAL (decl)
903 && !TREE_PUBLIC (decl)
904 && !DECL_ARTIFICIAL (decl)
905 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
906 && !TREE_NO_WARNING (decl))
907 warning_at (DECL_SOURCE_LOCATION (decl),
908 OPT_Wunused_function,
909 "%qF declared %<static%> but never defined", decl);
911 if (VAR_P (decl)
912 && DECL_EXTERNAL (decl)
913 && DECL_INLINE_VAR_P (decl)
914 && DECL_ODR_USED (decl))
915 error_at (DECL_SOURCE_LOCATION (decl),
916 "odr-used inline variable %qD is not defined", decl);
919 /* Clear out the list, so we don't rescan next time. */
920 static_decls = NULL;
922 /* Write out any globals that need to be output. */
923 return wrapup_global_declarations (statics->address (),
924 statics->length ());
926 return 0;
929 /* In C++, you don't have to write `struct S' to refer to `S'; you
930 can just use `S'. We accomplish this by creating a TYPE_DECL as
931 if the user had written `typedef struct S S'. Create and return
932 the TYPE_DECL for TYPE. */
934 tree
935 create_implicit_typedef (tree name, tree type)
937 tree decl;
939 decl = build_decl (input_location, TYPE_DECL, name, type);
940 DECL_ARTIFICIAL (decl) = 1;
941 /* There are other implicit type declarations, like the one *within*
942 a class that allows you to write `S::S'. We must distinguish
943 amongst these. */
944 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
945 TYPE_NAME (type) = decl;
946 TYPE_STUB_DECL (type) = decl;
948 return decl;
951 /* Remember a local name for name-mangling purposes. */
953 static void
954 push_local_name (tree decl)
956 size_t i, nelts;
957 tree t, name;
959 timevar_start (TV_NAME_LOOKUP);
961 name = DECL_NAME (decl);
963 nelts = vec_safe_length (local_names);
964 for (i = 0; i < nelts; i++)
966 t = (*local_names)[i];
967 if (DECL_NAME (t) == name)
969 retrofit_lang_decl (decl);
970 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
971 if (DECL_DISCRIMINATOR_SET_P (t))
972 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
973 else
974 DECL_DISCRIMINATOR (decl) = 1;
976 (*local_names)[i] = decl;
977 timevar_stop (TV_NAME_LOOKUP);
978 return;
982 vec_safe_push (local_names, decl);
983 timevar_stop (TV_NAME_LOOKUP);
986 /* Subroutine of duplicate_decls: return truthvalue of whether
987 or not types of these decls match.
989 For C++, we must compare the parameter list so that `int' can match
990 `int&' in a parameter position, but `int&' is not confused with
991 `const int&'. */
994 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
996 int types_match;
998 if (newdecl == olddecl)
999 return 1;
1001 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
1002 /* If the two DECLs are not even the same kind of thing, we're not
1003 interested in their types. */
1004 return 0;
1006 gcc_assert (DECL_P (newdecl));
1008 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1010 tree f1 = TREE_TYPE (newdecl);
1011 tree f2 = TREE_TYPE (olddecl);
1012 tree p1 = TYPE_ARG_TYPES (f1);
1013 tree p2 = TYPE_ARG_TYPES (f2);
1014 tree r2;
1016 /* Specializations of different templates are different functions
1017 even if they have the same type. */
1018 tree t1 = (DECL_USE_TEMPLATE (newdecl)
1019 ? DECL_TI_TEMPLATE (newdecl)
1020 : NULL_TREE);
1021 tree t2 = (DECL_USE_TEMPLATE (olddecl)
1022 ? DECL_TI_TEMPLATE (olddecl)
1023 : NULL_TREE);
1024 if (t1 != t2)
1025 return 0;
1027 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1028 && ! (DECL_EXTERN_C_P (newdecl)
1029 && DECL_EXTERN_C_P (olddecl)))
1030 return 0;
1032 /* A new declaration doesn't match a built-in one unless it
1033 is also extern "C". */
1034 if (DECL_IS_BUILTIN (olddecl)
1035 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1036 return 0;
1038 if (TREE_CODE (f1) != TREE_CODE (f2))
1039 return 0;
1041 /* A declaration with deduced return type should use its pre-deduction
1042 type for declaration matching. */
1043 r2 = fndecl_declared_return_type (olddecl);
1045 if (same_type_p (TREE_TYPE (f1), r2))
1047 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1048 && (DECL_BUILT_IN (olddecl)
1049 #ifndef NO_IMPLICIT_EXTERN_C
1050 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1051 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1052 #endif
1055 types_match = self_promoting_args_p (p1);
1056 if (p1 == void_list_node)
1057 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1059 #ifndef NO_IMPLICIT_EXTERN_C
1060 else if (!prototype_p (f1)
1061 && (DECL_EXTERN_C_P (olddecl)
1062 && DECL_IN_SYSTEM_HEADER (olddecl)
1063 && !DECL_CLASS_SCOPE_P (olddecl))
1064 && (DECL_EXTERN_C_P (newdecl)
1065 && DECL_IN_SYSTEM_HEADER (newdecl)
1066 && !DECL_CLASS_SCOPE_P (newdecl)))
1068 types_match = self_promoting_args_p (p2);
1069 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1071 #endif
1072 else
1073 types_match =
1074 compparms (p1, p2)
1075 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1076 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1077 || comp_type_attributes (TREE_TYPE (newdecl),
1078 TREE_TYPE (olddecl)) != 0);
1080 else
1081 types_match = 0;
1083 /* The decls dont match if they correspond to two different versions
1084 of the same function. Disallow extern "C" functions to be
1085 versions for now. */
1086 if (types_match
1087 && !DECL_EXTERN_C_P (newdecl)
1088 && !DECL_EXTERN_C_P (olddecl)
1089 && record_versions
1090 && maybe_version_functions (newdecl, olddecl,
1091 (!DECL_FUNCTION_VERSIONED (newdecl)
1092 || !DECL_FUNCTION_VERSIONED (olddecl))))
1093 return 0;
1095 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1097 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1098 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1100 if (TREE_CODE (newres) != TREE_CODE (oldres))
1101 return 0;
1103 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1104 DECL_TEMPLATE_PARMS (olddecl)))
1105 return 0;
1107 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1108 types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres))
1109 && equivalently_constrained (olddecl, newdecl));
1110 else
1111 // We don't need to check equivalently_constrained for variable and
1112 // function templates because we check it on the results.
1113 types_match = decls_match (oldres, newres);
1115 else
1117 /* Need to check scope for variable declaration (VAR_DECL).
1118 For typedef (TYPE_DECL), scope is ignored. */
1119 if (VAR_P (newdecl)
1120 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1121 /* [dcl.link]
1122 Two declarations for an object with C language linkage
1123 with the same name (ignoring the namespace that qualify
1124 it) that appear in different namespace scopes refer to
1125 the same object. */
1126 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1127 return 0;
1129 if (TREE_TYPE (newdecl) == error_mark_node)
1130 types_match = TREE_TYPE (olddecl) == error_mark_node;
1131 else if (TREE_TYPE (olddecl) == NULL_TREE)
1132 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1133 else if (TREE_TYPE (newdecl) == NULL_TREE)
1134 types_match = 0;
1135 else
1136 types_match = comptypes (TREE_TYPE (newdecl),
1137 TREE_TYPE (olddecl),
1138 COMPARE_REDECLARATION);
1141 // Normal functions can be constrained, as can variable partial
1142 // specializations.
1143 if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl))
1144 types_match = equivalently_constrained (newdecl, olddecl);
1146 return types_match;
1149 /* NEWDECL and OLDDECL have identical signatures. If they are
1150 different versions adjust them and return true.
1151 If RECORD is set to true, record function versions. */
1153 bool
1154 maybe_version_functions (tree newdecl, tree olddecl, bool record)
1156 if (!targetm.target_option.function_versions (newdecl, olddecl))
1157 return false;
1159 if (!DECL_FUNCTION_VERSIONED (olddecl))
1161 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1162 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1163 mangle_decl (olddecl);
1166 if (!DECL_FUNCTION_VERSIONED (newdecl))
1168 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1169 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1170 mangle_decl (newdecl);
1173 if (record)
1174 cgraph_node::record_function_versions (olddecl, newdecl);
1176 return true;
1179 /* If NEWDECL is `static' and an `extern' was seen previously,
1180 warn about it. OLDDECL is the previous declaration.
1182 Note that this does not apply to the C++ case of declaring
1183 a variable `extern const' and then later `const'.
1185 Don't complain about built-in functions, since they are beyond
1186 the user's control. */
1188 void
1189 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1191 if (TREE_CODE (newdecl) == TYPE_DECL
1192 || TREE_CODE (newdecl) == TEMPLATE_DECL
1193 || TREE_CODE (newdecl) == CONST_DECL
1194 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1195 return;
1197 /* Don't get confused by static member functions; that's a different
1198 use of `static'. */
1199 if (TREE_CODE (newdecl) == FUNCTION_DECL
1200 && DECL_STATIC_FUNCTION_P (newdecl))
1201 return;
1203 /* If the old declaration was `static', or the new one isn't, then
1204 everything is OK. */
1205 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1206 return;
1208 /* It's OK to declare a builtin function as `static'. */
1209 if (TREE_CODE (olddecl) == FUNCTION_DECL
1210 && DECL_ARTIFICIAL (olddecl))
1211 return;
1213 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1214 "%qD was declared %<extern%> and later %<static%>", newdecl))
1215 inform (DECL_SOURCE_LOCATION (olddecl),
1216 "previous declaration of %qD", olddecl);
1219 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1220 function templates. If their exception specifications do not
1221 match, issue a diagnostic. */
1223 static void
1224 check_redeclaration_exception_specification (tree new_decl,
1225 tree old_decl)
1227 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1228 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1230 /* Two default specs are equivalent, don't force evaluation. */
1231 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1232 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1233 return;
1235 maybe_instantiate_noexcept (new_decl);
1236 maybe_instantiate_noexcept (old_decl);
1237 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1238 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1240 /* [except.spec]
1242 If any declaration of a function has an exception-specification,
1243 all declarations, including the definition and an explicit
1244 specialization, of that function shall have an
1245 exception-specification with the same set of type-ids. */
1246 if (! DECL_IS_BUILTIN (old_decl)
1247 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1249 const char *const msg
1250 = G_("declaration of %qF has a different exception specifier");
1251 bool complained = true;
1252 location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1253 if (DECL_IN_SYSTEM_HEADER (old_decl))
1254 complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl);
1255 else if (!flag_exceptions)
1256 /* We used to silently permit mismatched eh specs with
1257 -fno-exceptions, so make them a pedwarn now. */
1258 complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl);
1259 else
1260 error_at (new_loc, msg, new_decl);
1261 if (complained)
1262 inform (DECL_SOURCE_LOCATION (old_decl),
1263 "from previous declaration %qF", old_decl);
1267 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1268 Otherwise issue diagnostics. */
1270 static bool
1271 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1273 old_decl = STRIP_TEMPLATE (old_decl);
1274 new_decl = STRIP_TEMPLATE (new_decl);
1275 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1276 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1277 return true;
1278 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1279 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1280 return true;
1281 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1283 if (DECL_BUILT_IN (old_decl))
1285 /* Hide a built-in declaration. */
1286 DECL_DECLARED_CONSTEXPR_P (old_decl)
1287 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1288 return true;
1290 /* 7.1.5 [dcl.constexpr]
1291 Note: An explicit specialization can differ from the template
1292 declaration with respect to the constexpr specifier. */
1293 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1294 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1295 return true;
1297 error_at (DECL_SOURCE_LOCATION (new_decl),
1298 "redeclaration %qD differs in %<constexpr%> "
1299 "from previous declaration", new_decl);
1300 inform (DECL_SOURCE_LOCATION (old_decl),
1301 "previous declaration %qD", old_decl);
1302 return false;
1304 return true;
1307 // If OLDDECL and NEWDECL are concept declarations with the same type
1308 // (i.e., and template parameters), but different requirements,
1309 // emit diagnostics and return true. Otherwise, return false.
1310 static inline bool
1311 check_concept_refinement (tree olddecl, tree newdecl)
1313 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1314 return false;
1316 tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1317 tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1318 if (TREE_CODE (d1) != TREE_CODE (d2))
1319 return false;
1321 tree t1 = TREE_TYPE (d1);
1322 tree t2 = TREE_TYPE (d2);
1323 if (TREE_CODE (d1) == FUNCTION_DECL)
1325 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1326 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1327 DECL_TEMPLATE_PARMS (newdecl))
1328 && !equivalently_constrained (olddecl, newdecl))
1330 error ("cannot specialize concept %q#D", olddecl);
1331 return true;
1334 return false;
1337 /* DECL is a redeclaration of a function or function template. If
1338 it does have default arguments issue a diagnostic. Note: this
1339 function is used to enforce the requirements in C++11 8.3.6 about
1340 no default arguments in redeclarations. */
1342 static void
1343 check_redeclaration_no_default_args (tree decl)
1345 gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1347 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1348 t && t != void_list_node; t = TREE_CHAIN (t))
1349 if (TREE_PURPOSE (t))
1351 permerror (DECL_SOURCE_LOCATION (decl),
1352 "redeclaration of %q#D may not have default "
1353 "arguments", decl);
1354 return;
1358 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1359 && lookup_attribute ("gnu_inline", \
1360 DECL_ATTRIBUTES (fn)))
1362 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1363 If the redeclaration is invalid, a diagnostic is issued, and the
1364 error_mark_node is returned. Otherwise, OLDDECL is returned.
1366 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1367 returned.
1369 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1371 tree
1372 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1374 unsigned olddecl_uid = DECL_UID (olddecl);
1375 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1376 int new_defines_function = 0;
1377 tree new_template_info;
1379 if (newdecl == olddecl)
1380 return olddecl;
1382 types_match = decls_match (newdecl, olddecl);
1384 /* If either the type of the new decl or the type of the old decl is an
1385 error_mark_node, then that implies that we have already issued an
1386 error (earlier) for some bogus type specification, and in that case,
1387 it is rather pointless to harass the user with yet more error message
1388 about the same declaration, so just pretend the types match here. */
1389 if (TREE_TYPE (newdecl) == error_mark_node
1390 || TREE_TYPE (olddecl) == error_mark_node)
1391 return error_mark_node;
1393 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1394 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1396 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1397 && TREE_CODE (olddecl) != TEMPLATE_DECL
1398 && check_raw_literal_operator (olddecl))
1399 error ("literal operator template %q+D conflicts with"
1400 " raw literal operator %qD", newdecl, olddecl);
1401 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1402 && TREE_CODE (olddecl) == TEMPLATE_DECL
1403 && check_raw_literal_operator (newdecl))
1404 error ("raw literal operator %q+D conflicts with"
1405 " literal operator template %qD", newdecl, olddecl);
1408 if (DECL_P (olddecl)
1409 && TREE_CODE (newdecl) == FUNCTION_DECL
1410 && TREE_CODE (olddecl) == FUNCTION_DECL
1411 && diagnose_mismatched_attributes (olddecl, newdecl))
1413 if (DECL_INITIAL (olddecl))
1414 inform (DECL_SOURCE_LOCATION (olddecl),
1415 "previous definition of %qD was here", olddecl);
1416 else
1417 inform (DECL_SOURCE_LOCATION (olddecl),
1418 "previous declaration of %qD was here", olddecl);
1421 /* Check for redeclaration and other discrepancies. */
1422 if (TREE_CODE (olddecl) == FUNCTION_DECL
1423 && DECL_ARTIFICIAL (olddecl))
1425 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1426 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1428 /* Avoid warnings redeclaring built-ins which have not been
1429 explicitly declared. */
1430 if (DECL_ANTICIPATED (olddecl))
1432 if (TREE_PUBLIC (newdecl)
1433 && CP_DECL_CONTEXT (newdecl) == global_namespace)
1434 warning_at (DECL_SOURCE_LOCATION (newdecl),
1435 OPT_Wbuiltin_declaration_mismatch,
1436 "built-in function %qD declared as non-function",
1437 newdecl);
1438 return NULL_TREE;
1441 /* If you declare a built-in or predefined function name as static,
1442 the old definition is overridden, but optionally warn this was a
1443 bad choice of name. */
1444 if (! TREE_PUBLIC (newdecl))
1446 warning (OPT_Wshadow,
1447 DECL_BUILT_IN (olddecl)
1448 ? G_("shadowing built-in function %q#D")
1449 : G_("shadowing library function %q#D"), olddecl);
1450 /* Discard the old built-in function. */
1451 return NULL_TREE;
1453 /* If the built-in is not ansi, then programs can override
1454 it even globally without an error. */
1455 else if (! DECL_BUILT_IN (olddecl))
1456 warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1457 "library function %q#D redeclared as non-function %q#D",
1458 olddecl, newdecl);
1459 else
1460 error ("declaration of %q+#D conflicts with built-in "
1461 "declaration %q#D", newdecl, olddecl);
1462 return NULL_TREE;
1464 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1466 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1467 error_at (DECL_SOURCE_LOCATION (newdecl),
1468 "redeclaration of %<pragma omp declare reduction%>");
1469 inform (DECL_SOURCE_LOCATION (olddecl),
1470 "previous %<pragma omp declare reduction%> declaration");
1471 return error_mark_node;
1473 else if (!types_match)
1475 /* Avoid warnings redeclaring built-ins which have not been
1476 explicitly declared. */
1477 if (DECL_ANTICIPATED (olddecl))
1479 tree t1, t2;
1481 /* A new declaration doesn't match a built-in one unless it
1482 is also extern "C". */
1483 gcc_assert (DECL_IS_BUILTIN (olddecl));
1484 gcc_assert (DECL_EXTERN_C_P (olddecl));
1485 if (!DECL_EXTERN_C_P (newdecl))
1486 return NULL_TREE;
1488 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1489 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1490 t1 || t2;
1491 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1493 if (!t1 || !t2)
1494 break;
1495 /* FILE, tm types are not known at the time
1496 we create the builtins. */
1497 for (unsigned i = 0;
1498 i < sizeof (builtin_structptr_types)
1499 / sizeof (builtin_structptr_type);
1500 ++i)
1501 if (TREE_VALUE (t2) == builtin_structptr_types[i].node)
1503 tree t = TREE_VALUE (t1);
1505 if (TYPE_PTR_P (t)
1506 && TYPE_IDENTIFIER (TREE_TYPE (t))
1507 == get_identifier (builtin_structptr_types[i].str)
1508 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1510 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1512 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1513 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1514 types_match = decls_match (newdecl, olddecl);
1515 if (types_match)
1516 return duplicate_decls (newdecl, olddecl,
1517 newdecl_is_friend);
1518 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1520 goto next_arg;
1523 if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1524 break;
1525 next_arg:;
1528 warning_at (DECL_SOURCE_LOCATION (newdecl),
1529 OPT_Wbuiltin_declaration_mismatch,
1530 "declaration of %q#D conflicts with built-in "
1531 "declaration %q#D", newdecl, olddecl);
1533 else if ((DECL_EXTERN_C_P (newdecl)
1534 && DECL_EXTERN_C_P (olddecl))
1535 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1536 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1538 /* A near match; override the builtin. */
1540 if (TREE_PUBLIC (newdecl))
1541 warning_at (DECL_SOURCE_LOCATION (newdecl),
1542 OPT_Wbuiltin_declaration_mismatch,
1543 "new declaration %q#D ambiguates built-in "
1544 "declaration %q#D", newdecl, olddecl);
1545 else
1546 warning (OPT_Wshadow,
1547 DECL_BUILT_IN (olddecl)
1548 ? G_("shadowing built-in function %q#D")
1549 : G_("shadowing library function %q#D"), olddecl);
1551 else
1552 /* Discard the old built-in function. */
1553 return NULL_TREE;
1555 /* Replace the old RTL to avoid problems with inlining. */
1556 COPY_DECL_RTL (newdecl, olddecl);
1558 /* Even if the types match, prefer the new declarations type for
1559 built-ins which have not been explicitly declared, for
1560 exception lists, etc... */
1561 else if (DECL_IS_BUILTIN (olddecl))
1563 tree type = TREE_TYPE (newdecl);
1564 tree attribs = (*targetm.merge_type_attributes)
1565 (TREE_TYPE (olddecl), type);
1567 type = cp_build_type_attribute_variant (type, attribs);
1568 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1571 /* If a function is explicitly declared "throw ()", propagate that to
1572 the corresponding builtin. */
1573 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1574 && DECL_ANTICIPATED (olddecl)
1575 && TREE_NOTHROW (newdecl)
1576 && !TREE_NOTHROW (olddecl))
1578 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1579 tree tmpdecl = builtin_decl_explicit (fncode);
1580 if (tmpdecl && tmpdecl != olddecl && types_match)
1581 TREE_NOTHROW (tmpdecl) = 1;
1584 /* Whether or not the builtin can throw exceptions has no
1585 bearing on this declarator. */
1586 TREE_NOTHROW (olddecl) = 0;
1588 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1590 /* If a builtin function is redeclared as `static', merge
1591 the declarations, but make the original one static. */
1592 DECL_THIS_STATIC (olddecl) = 1;
1593 TREE_PUBLIC (olddecl) = 0;
1595 /* Make the old declaration consistent with the new one so
1596 that all remnants of the builtin-ness of this function
1597 will be banished. */
1598 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1599 COPY_DECL_RTL (newdecl, olddecl);
1602 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1604 /* C++ Standard, 3.3, clause 4:
1605 "[Note: a namespace name or a class template name must be unique
1606 in its declarative region (7.3.2, clause 14). ]" */
1607 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1608 && TREE_CODE (newdecl) != NAMESPACE_DECL
1609 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1610 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1611 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1612 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1614 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1615 && TREE_CODE (newdecl) != TYPE_DECL)
1616 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1617 && TREE_CODE (olddecl) != TYPE_DECL))
1619 /* We do nothing special here, because C++ does such nasty
1620 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1621 get shadowed, and know that if we need to find a TYPE_DECL
1622 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1623 slot of the identifier. */
1624 return NULL_TREE;
1627 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1628 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1629 || (TREE_CODE (olddecl) == FUNCTION_DECL
1630 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1631 return NULL_TREE;
1634 error ("%q#D redeclared as different kind of symbol", newdecl);
1635 if (TREE_CODE (olddecl) == TREE_LIST)
1636 olddecl = TREE_VALUE (olddecl);
1637 inform (DECL_SOURCE_LOCATION (olddecl),
1638 "previous declaration %q#D", olddecl);
1640 return error_mark_node;
1642 else if (!types_match)
1644 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1645 /* These are certainly not duplicate declarations; they're
1646 from different scopes. */
1647 return NULL_TREE;
1649 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1651 /* The name of a class template may not be declared to refer to
1652 any other template, class, function, object, namespace, value,
1653 or type in the same scope. */
1654 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1655 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1657 error ("conflicting declaration of template %q+#D", newdecl);
1658 inform (DECL_SOURCE_LOCATION (olddecl),
1659 "previous declaration %q#D", olddecl);
1660 return error_mark_node;
1662 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1663 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1664 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1665 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1666 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1667 DECL_TEMPLATE_PARMS (olddecl))
1668 /* Template functions can be disambiguated by
1669 return type. */
1670 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1671 TREE_TYPE (TREE_TYPE (olddecl)))
1672 // Template functions can also be disambiguated by
1673 // constraints.
1674 && equivalently_constrained (olddecl, newdecl))
1676 error ("ambiguating new declaration %q+#D", newdecl);
1677 inform (DECL_SOURCE_LOCATION (olddecl),
1678 "old declaration %q#D", olddecl);
1680 else if (check_concept_refinement (olddecl, newdecl))
1681 return error_mark_node;
1682 return NULL_TREE;
1684 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1686 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1688 error ("conflicting declaration of C function %q+#D",
1689 newdecl);
1690 inform (DECL_SOURCE_LOCATION (olddecl),
1691 "previous declaration %q#D", olddecl);
1692 return NULL_TREE;
1694 /* For function versions, params and types match, but they
1695 are not ambiguous. */
1696 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1697 && !DECL_FUNCTION_VERSIONED (olddecl))
1698 // The functions have the same parameter types.
1699 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1700 TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1701 // And the same constraints.
1702 && equivalently_constrained (newdecl, olddecl))
1704 error ("ambiguating new declaration of %q+#D", newdecl);
1705 inform (DECL_SOURCE_LOCATION (olddecl),
1706 "old declaration %q#D", olddecl);
1707 return error_mark_node;
1709 else
1710 return NULL_TREE;
1712 else
1714 error ("conflicting declaration %q+#D", newdecl);
1715 inform (DECL_SOURCE_LOCATION (olddecl),
1716 "previous declaration as %q#D", olddecl);
1717 return error_mark_node;
1720 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1721 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1722 && (!DECL_TEMPLATE_INFO (newdecl)
1723 || (DECL_TI_TEMPLATE (newdecl)
1724 != DECL_TI_TEMPLATE (olddecl))))
1725 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1726 && (!DECL_TEMPLATE_INFO (olddecl)
1727 || (DECL_TI_TEMPLATE (olddecl)
1728 != DECL_TI_TEMPLATE (newdecl))))))
1729 /* It's OK to have a template specialization and a non-template
1730 with the same type, or to have specializations of two
1731 different templates with the same type. Note that if one is a
1732 specialization, and the other is an instantiation of the same
1733 template, that we do not exit at this point. That situation
1734 can occur if we instantiate a template class, and then
1735 specialize one of its methods. This situation is valid, but
1736 the declarations must be merged in the usual way. */
1737 return NULL_TREE;
1738 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1739 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1740 && !DECL_USE_TEMPLATE (newdecl))
1741 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1742 && !DECL_USE_TEMPLATE (olddecl))))
1743 /* One of the declarations is a template instantiation, and the
1744 other is not a template at all. That's OK. */
1745 return NULL_TREE;
1746 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1748 /* In [namespace.alias] we have:
1750 In a declarative region, a namespace-alias-definition can be
1751 used to redefine a namespace-alias declared in that declarative
1752 region to refer only to the namespace to which it already
1753 refers.
1755 Therefore, if we encounter a second alias directive for the same
1756 alias, we can just ignore the second directive. */
1757 if (DECL_NAMESPACE_ALIAS (newdecl)
1758 && (DECL_NAMESPACE_ALIAS (newdecl)
1759 == DECL_NAMESPACE_ALIAS (olddecl)))
1760 return olddecl;
1762 /* Leave it to update_binding to merge or report error. */
1763 return NULL_TREE;
1765 else
1767 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1768 if (errmsg)
1770 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1771 if (DECL_NAME (olddecl) != NULL_TREE)
1772 inform (DECL_SOURCE_LOCATION (olddecl),
1773 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1774 ? G_("%q#D previously defined here")
1775 : G_("%q#D previously declared here"), olddecl);
1776 return error_mark_node;
1778 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1779 && DECL_INITIAL (olddecl) != NULL_TREE
1780 && !prototype_p (TREE_TYPE (olddecl))
1781 && prototype_p (TREE_TYPE (newdecl)))
1783 /* Prototype decl follows defn w/o prototype. */
1784 if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1785 "prototype specified for %q#D", newdecl))
1786 inform (DECL_SOURCE_LOCATION (olddecl),
1787 "previous non-prototype definition here");
1789 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1790 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1792 /* [dcl.link]
1793 If two declarations of the same function or object
1794 specify different linkage-specifications ..., the program
1795 is ill-formed.... Except for functions with C++ linkage,
1796 a function declaration without a linkage specification
1797 shall not precede the first linkage specification for
1798 that function. A function can be declared without a
1799 linkage specification after an explicit linkage
1800 specification has been seen; the linkage explicitly
1801 specified in the earlier declaration is not affected by
1802 such a function declaration.
1804 DR 563 raises the question why the restrictions on
1805 functions should not also apply to objects. Older
1806 versions of G++ silently ignore the linkage-specification
1807 for this example:
1809 namespace N {
1810 extern int i;
1811 extern "C" int i;
1814 which is clearly wrong. Therefore, we now treat objects
1815 like functions. */
1816 if (current_lang_depth () == 0)
1818 /* There is no explicit linkage-specification, so we use
1819 the linkage from the previous declaration. */
1820 retrofit_lang_decl (newdecl);
1821 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1823 else
1825 error ("conflicting declaration of %q+#D with %qL linkage",
1826 newdecl, DECL_LANGUAGE (newdecl));
1827 inform (DECL_SOURCE_LOCATION (olddecl),
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 (input_location,
1862 "default argument given for parameter "
1863 "%d of %q#D", i, newdecl))
1864 inform (DECL_SOURCE_LOCATION (olddecl),
1865 "previous specification in %q#D here",
1866 olddecl);
1868 else
1870 error ("default argument given for parameter %d "
1871 "of %q#D", i, newdecl);
1872 inform (DECL_SOURCE_LOCATION (olddecl),
1873 "previous specification in %q#D here",
1874 olddecl);
1881 /* Do not merge an implicit typedef with an explicit one. In:
1883 class A;
1885 typedef class A A __attribute__ ((foo));
1887 the attribute should apply only to the typedef. */
1888 if (TREE_CODE (olddecl) == TYPE_DECL
1889 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1890 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1891 return NULL_TREE;
1893 /* If new decl is `static' and an `extern' was seen previously,
1894 warn about it. */
1895 warn_extern_redeclared_static (newdecl, olddecl);
1897 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1898 return error_mark_node;
1900 /* We have committed to returning 1 at this point. */
1901 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1903 /* Now that functions must hold information normally held
1904 by field decls, there is extra work to do so that
1905 declaration information does not get destroyed during
1906 definition. */
1907 if (DECL_VINDEX (olddecl))
1908 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1909 if (DECL_CONTEXT (olddecl))
1910 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1911 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1912 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1913 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1914 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1915 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1916 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1917 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1918 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1919 if (DECL_OVERLOADED_OPERATOR_P (olddecl))
1920 DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
1921 = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
1922 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1924 /* Optionally warn about more than one declaration for the same
1925 name, but don't warn about a function declaration followed by a
1926 definition. */
1927 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1928 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1929 /* Don't warn about extern decl followed by definition. */
1930 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1931 /* Don't warn about friends, let add_friend take care of it. */
1932 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1933 /* Don't warn about declaration followed by specialization. */
1934 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1935 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1937 if (warning_at (DECL_SOURCE_LOCATION (newdecl),
1938 OPT_Wredundant_decls,
1939 "redundant redeclaration of %qD in same scope",
1940 newdecl))
1941 inform (DECL_SOURCE_LOCATION (olddecl),
1942 "previous declaration of %qD", olddecl);
1945 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1946 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1948 if (DECL_DELETED_FN (newdecl))
1950 error ("deleted definition of %q+D", newdecl);
1951 inform (DECL_SOURCE_LOCATION (olddecl),
1952 "previous declaration of %qD", olddecl);
1954 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1958 /* Deal with C++: must preserve virtual function table size. */
1959 if (TREE_CODE (olddecl) == TYPE_DECL)
1961 tree newtype = TREE_TYPE (newdecl);
1962 tree oldtype = TREE_TYPE (olddecl);
1964 if (newtype != error_mark_node && oldtype != error_mark_node
1965 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1966 CLASSTYPE_FRIEND_CLASSES (newtype)
1967 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1969 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1972 /* Copy all the DECL_... slots specified in the new decl
1973 except for any that we copy here from the old type. */
1974 DECL_ATTRIBUTES (newdecl)
1975 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1977 if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
1979 olddecl_friend = DECL_FRIEND_P (olddecl);
1980 hidden_friend = (DECL_ANTICIPATED (olddecl)
1981 && DECL_HIDDEN_FRIEND_P (olddecl)
1982 && newdecl_is_friend);
1983 if (!hidden_friend)
1985 DECL_ANTICIPATED (olddecl) = 0;
1986 DECL_HIDDEN_FRIEND_P (olddecl) = 0;
1990 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1992 tree old_result;
1993 tree new_result;
1994 old_result = DECL_TEMPLATE_RESULT (olddecl);
1995 new_result = DECL_TEMPLATE_RESULT (newdecl);
1996 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1997 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1998 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1999 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2001 DECL_ATTRIBUTES (old_result)
2002 = (*targetm.merge_decl_attributes) (old_result, new_result);
2004 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2006 /* Per C++11 8.3.6/4, default arguments cannot be added in later
2007 declarations of a function template. */
2008 if (DECL_SOURCE_LOCATION (newdecl)
2009 != DECL_SOURCE_LOCATION (olddecl))
2010 check_redeclaration_no_default_args (newdecl);
2012 check_default_args (newdecl);
2014 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2015 && DECL_INITIAL (new_result))
2017 if (DECL_INITIAL (old_result))
2018 DECL_UNINLINABLE (old_result) = 1;
2019 else
2020 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2021 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2022 DECL_NOT_REALLY_EXTERN (old_result)
2023 = DECL_NOT_REALLY_EXTERN (new_result);
2024 DECL_INTERFACE_KNOWN (old_result)
2025 = DECL_INTERFACE_KNOWN (new_result);
2026 DECL_DECLARED_INLINE_P (old_result)
2027 = DECL_DECLARED_INLINE_P (new_result);
2028 DECL_DISREGARD_INLINE_LIMITS (old_result)
2029 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2032 else
2034 DECL_DECLARED_INLINE_P (old_result)
2035 |= DECL_DECLARED_INLINE_P (new_result);
2036 DECL_DISREGARD_INLINE_LIMITS (old_result)
2037 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2038 check_redeclaration_exception_specification (newdecl, olddecl);
2042 /* If the new declaration is a definition, update the file and
2043 line information on the declaration, and also make
2044 the old declaration the same definition. */
2045 if (DECL_INITIAL (new_result) != NULL_TREE)
2047 DECL_SOURCE_LOCATION (olddecl)
2048 = DECL_SOURCE_LOCATION (old_result)
2049 = DECL_SOURCE_LOCATION (newdecl);
2050 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2051 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2053 tree parm;
2054 DECL_ARGUMENTS (old_result)
2055 = DECL_ARGUMENTS (new_result);
2056 for (parm = DECL_ARGUMENTS (old_result); parm;
2057 parm = DECL_CHAIN (parm))
2058 DECL_CONTEXT (parm) = old_result;
2062 return olddecl;
2065 if (types_match)
2067 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2068 check_redeclaration_exception_specification (newdecl, olddecl);
2070 /* Automatically handles default parameters. */
2071 tree oldtype = TREE_TYPE (olddecl);
2072 tree newtype;
2074 /* For typedefs use the old type, as the new type's DECL_NAME points
2075 at newdecl, which will be ggc_freed. */
2076 if (TREE_CODE (newdecl) == TYPE_DECL)
2078 /* But NEWTYPE might have an attribute, honor that. */
2079 tree tem = TREE_TYPE (newdecl);
2080 newtype = oldtype;
2082 if (TYPE_USER_ALIGN (tem))
2084 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2085 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2086 TYPE_USER_ALIGN (newtype) = true;
2089 /* And remove the new type from the variants list. */
2090 if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2092 tree remove = TREE_TYPE (newdecl);
2093 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2094 t = TYPE_NEXT_VARIANT (t))
2095 if (TYPE_NEXT_VARIANT (t) == remove)
2097 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2098 break;
2102 else
2103 /* Merge the data types specified in the two decls. */
2104 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2106 if (VAR_P (newdecl))
2108 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2109 /* For already initialized vars, TREE_READONLY could have been
2110 cleared in cp_finish_decl, because the var needs runtime
2111 initialization or destruction. Make sure not to set
2112 TREE_READONLY on it again. */
2113 if (DECL_INITIALIZED_P (olddecl)
2114 && !DECL_EXTERNAL (olddecl)
2115 && !TREE_READONLY (olddecl))
2116 TREE_READONLY (newdecl) = 0;
2117 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2118 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2119 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2120 if (DECL_DEPENDENT_INIT_P (olddecl))
2121 SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2122 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2123 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2124 if (DECL_CLASS_SCOPE_P (olddecl))
2125 DECL_DECLARED_CONSTEXPR_P (newdecl)
2126 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2128 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2129 if (DECL_LANG_SPECIFIC (olddecl)
2130 && CP_DECL_THREADPRIVATE_P (olddecl))
2132 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2133 retrofit_lang_decl (newdecl);
2134 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2138 /* An explicit specialization of a function template or of a member
2139 function of a class template can be declared transaction_safe
2140 independently of whether the corresponding template entity is declared
2141 transaction_safe. */
2142 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2143 && DECL_TEMPLATE_INSTANTIATION (olddecl)
2144 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2145 && tx_safe_fn_type_p (newtype)
2146 && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2147 newtype = tx_unsafe_fn_variant (newtype);
2149 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2151 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2152 check_default_args (newdecl);
2154 /* Lay the type out, unless already done. */
2155 if (! same_type_p (newtype, oldtype)
2156 && TREE_TYPE (newdecl) != error_mark_node
2157 && !(processing_template_decl && uses_template_parms (newdecl)))
2158 layout_type (TREE_TYPE (newdecl));
2160 if ((VAR_P (newdecl)
2161 || TREE_CODE (newdecl) == PARM_DECL
2162 || TREE_CODE (newdecl) == RESULT_DECL
2163 || TREE_CODE (newdecl) == FIELD_DECL
2164 || TREE_CODE (newdecl) == TYPE_DECL)
2165 && !(processing_template_decl && uses_template_parms (newdecl)))
2166 layout_decl (newdecl, 0);
2168 /* Merge the type qualifiers. */
2169 if (TREE_READONLY (newdecl))
2170 TREE_READONLY (olddecl) = 1;
2171 if (TREE_THIS_VOLATILE (newdecl))
2172 TREE_THIS_VOLATILE (olddecl) = 1;
2173 if (TREE_NOTHROW (newdecl))
2174 TREE_NOTHROW (olddecl) = 1;
2176 /* Merge deprecatedness. */
2177 if (TREE_DEPRECATED (newdecl))
2178 TREE_DEPRECATED (olddecl) = 1;
2180 /* Preserve function specific target and optimization options */
2181 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2183 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2184 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2185 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2186 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2188 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2189 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2190 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2191 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2194 /* Merge the initialization information. */
2195 if (DECL_INITIAL (newdecl) == NULL_TREE
2196 && DECL_INITIAL (olddecl) != NULL_TREE)
2198 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2199 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2200 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2202 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2203 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2207 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2209 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2210 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2211 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2212 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2213 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2214 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2215 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2216 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2217 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2218 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2219 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2220 /* Keep the old RTL. */
2221 COPY_DECL_RTL (olddecl, newdecl);
2223 else if (VAR_P (newdecl)
2224 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2226 /* Keep the old RTL. We cannot keep the old RTL if the old
2227 declaration was for an incomplete object and the new
2228 declaration is not since many attributes of the RTL will
2229 change. */
2230 COPY_DECL_RTL (olddecl, newdecl);
2233 /* If cannot merge, then use the new type and qualifiers,
2234 and don't preserve the old rtl. */
2235 else
2237 /* Clean out any memory we had of the old declaration. */
2238 tree oldstatic = value_member (olddecl, static_aggregates);
2239 if (oldstatic)
2240 TREE_VALUE (oldstatic) = error_mark_node;
2242 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2243 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2244 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2245 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2246 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2249 /* Merge the storage class information. */
2250 merge_weak (newdecl, olddecl);
2252 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2253 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2254 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2255 if (! DECL_EXTERNAL (olddecl))
2256 DECL_EXTERNAL (newdecl) = 0;
2257 if (! DECL_COMDAT (olddecl))
2258 DECL_COMDAT (newdecl) = 0;
2260 new_template_info = NULL_TREE;
2261 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2263 bool new_redefines_gnu_inline = false;
2265 if (new_defines_function
2266 && ((DECL_INTERFACE_KNOWN (olddecl)
2267 && TREE_CODE (olddecl) == FUNCTION_DECL)
2268 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2269 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2270 == FUNCTION_DECL))))
2272 tree fn = olddecl;
2274 if (TREE_CODE (fn) == TEMPLATE_DECL)
2275 fn = DECL_TEMPLATE_RESULT (olddecl);
2277 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2280 if (!new_redefines_gnu_inline)
2282 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2283 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2284 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2286 DECL_TEMPLATE_INSTANTIATED (newdecl)
2287 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2288 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2290 /* If the OLDDECL is an instantiation and/or specialization,
2291 then the NEWDECL must be too. But, it may not yet be marked
2292 as such if the caller has created NEWDECL, but has not yet
2293 figured out that it is a redeclaration. */
2294 if (!DECL_USE_TEMPLATE (newdecl))
2295 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2297 /* Don't really know how much of the language-specific
2298 values we should copy from old to new. */
2299 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2300 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2301 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2302 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2304 if (LANG_DECL_HAS_MIN (newdecl))
2306 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2307 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2308 if (DECL_TEMPLATE_INFO (newdecl))
2310 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2311 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2312 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2313 /* Remember the presence of explicit specialization args. */
2314 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2315 = TINFO_USED_TEMPLATE_ID (new_template_info);
2317 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2319 /* Only functions have these fields. */
2320 if (DECL_DECLARES_FUNCTION_P (newdecl))
2322 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2323 DECL_BEFRIENDING_CLASSES (newdecl)
2324 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2325 DECL_BEFRIENDING_CLASSES (olddecl));
2326 /* DECL_THUNKS is only valid for virtual functions,
2327 otherwise it is a DECL_FRIEND_CONTEXT. */
2328 if (DECL_VIRTUAL_P (newdecl))
2329 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2331 /* Only variables have this field. */
2332 else if (VAR_P (newdecl)
2333 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2334 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2337 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2339 tree parm;
2341 /* Merge parameter attributes. */
2342 tree oldarg, newarg;
2343 for (oldarg = DECL_ARGUMENTS(olddecl),
2344 newarg = DECL_ARGUMENTS(newdecl);
2345 oldarg && newarg;
2346 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2347 DECL_ATTRIBUTES (newarg)
2348 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2349 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2352 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2353 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2355 /* If newdecl is not a specialization, then it is not a
2356 template-related function at all. And that means that we
2357 should have exited above, returning 0. */
2358 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2360 if (DECL_ODR_USED (olddecl))
2361 /* From [temp.expl.spec]:
2363 If a template, a member template or the member of a class
2364 template is explicitly specialized then that
2365 specialization shall be declared before the first use of
2366 that specialization that would cause an implicit
2367 instantiation to take place, in every translation unit in
2368 which such a use occurs. */
2369 error ("explicit specialization of %qD after first use",
2370 olddecl);
2372 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2373 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2374 && DECL_DECLARED_INLINE_P (newdecl));
2376 /* Don't propagate visibility from the template to the
2377 specialization here. We'll do that in determine_visibility if
2378 appropriate. */
2379 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2381 /* [temp.expl.spec/14] We don't inline explicit specialization
2382 just because the primary template says so. */
2384 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2385 the always_inline attribute. */
2386 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2387 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2389 if (DECL_DECLARED_INLINE_P (newdecl))
2390 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2391 else
2392 DECL_ATTRIBUTES (newdecl)
2393 = remove_attribute ("always_inline",
2394 DECL_ATTRIBUTES (newdecl));
2397 else if (new_defines_function && DECL_INITIAL (olddecl))
2399 /* Never inline re-defined extern inline functions.
2400 FIXME: this could be better handled by keeping both
2401 function as separate declarations. */
2402 DECL_UNINLINABLE (newdecl) = 1;
2404 else
2406 if (DECL_PENDING_INLINE_P (olddecl))
2408 DECL_PENDING_INLINE_P (newdecl) = 1;
2409 DECL_PENDING_INLINE_INFO (newdecl)
2410 = DECL_PENDING_INLINE_INFO (olddecl);
2412 else if (DECL_PENDING_INLINE_P (newdecl))
2414 else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
2415 DECL_SAVED_FUNCTION_DATA (newdecl)
2416 = DECL_SAVED_FUNCTION_DATA (olddecl);
2418 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2420 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2421 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2423 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2424 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2425 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2426 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2429 /* Preserve abstractness on cloned [cd]tors. */
2430 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2432 /* Update newdecl's parms to point at olddecl. */
2433 for (parm = DECL_ARGUMENTS (newdecl); parm;
2434 parm = DECL_CHAIN (parm))
2435 DECL_CONTEXT (parm) = olddecl;
2437 if (! types_match)
2439 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2440 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2441 COPY_DECL_RTL (newdecl, olddecl);
2443 if (! types_match || new_defines_function)
2445 /* These need to be copied so that the names are available.
2446 Note that if the types do match, we'll preserve inline
2447 info and other bits, but if not, we won't. */
2448 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2449 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2451 /* If redeclaring a builtin function, it stays built in
2452 if newdecl is a gnu_inline definition, or if newdecl is just
2453 a declaration. */
2454 if (DECL_BUILT_IN (olddecl)
2455 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2457 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2458 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2459 /* If we're keeping the built-in definition, keep the rtl,
2460 regardless of declaration matches. */
2461 COPY_DECL_RTL (olddecl, newdecl);
2462 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2464 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2465 switch (fncode)
2467 /* If a compatible prototype of these builtin functions
2468 is seen, assume the runtime implements it with the
2469 expected semantics. */
2470 case BUILT_IN_STPCPY:
2471 if (builtin_decl_explicit_p (fncode))
2472 set_builtin_decl_implicit_p (fncode, true);
2473 break;
2474 default:
2475 if (builtin_decl_explicit_p (fncode))
2476 set_builtin_decl_declared_p (fncode, true);
2477 break;
2481 copy_attributes_to_builtin (newdecl);
2483 if (new_defines_function)
2484 /* If defining a function declared with other language
2485 linkage, use the previously declared language linkage. */
2486 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2487 else if (types_match)
2489 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2490 /* Don't clear out the arguments if we're just redeclaring a
2491 function. */
2492 if (DECL_ARGUMENTS (olddecl))
2493 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2496 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2497 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2499 /* Now preserve various other info from the definition. */
2500 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2501 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2502 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2503 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2505 /* Warn about conflicting visibility specifications. */
2506 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2507 && DECL_VISIBILITY_SPECIFIED (newdecl)
2508 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2510 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2511 "%qD: visibility attribute ignored because it "
2512 "conflicts with previous declaration", newdecl))
2513 inform (DECL_SOURCE_LOCATION (olddecl),
2514 "previous declaration of %qD", olddecl);
2516 /* Choose the declaration which specified visibility. */
2517 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2519 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2520 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2522 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2523 so keep this behavior. */
2524 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2526 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2527 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2529 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2530 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2532 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2533 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2535 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2536 if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2537 > DECL_WARN_IF_NOT_ALIGN (newdecl))
2538 SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2539 DECL_WARN_IF_NOT_ALIGN (olddecl));
2540 if (TREE_CODE (newdecl) == FIELD_DECL)
2541 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2543 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2544 with that from NEWDECL below. */
2545 if (DECL_LANG_SPECIFIC (olddecl))
2547 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2548 != DECL_LANG_SPECIFIC (newdecl));
2549 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2552 /* Merge the USED information. */
2553 if (TREE_USED (olddecl))
2554 TREE_USED (newdecl) = 1;
2555 else if (TREE_USED (newdecl))
2556 TREE_USED (olddecl) = 1;
2557 if (VAR_P (newdecl))
2559 if (DECL_READ_P (olddecl))
2560 DECL_READ_P (newdecl) = 1;
2561 else if (DECL_READ_P (newdecl))
2562 DECL_READ_P (olddecl) = 1;
2564 if (DECL_PRESERVE_P (olddecl))
2565 DECL_PRESERVE_P (newdecl) = 1;
2566 else if (DECL_PRESERVE_P (newdecl))
2567 DECL_PRESERVE_P (olddecl) = 1;
2569 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2570 to olddecl and deleted. */
2571 if (TREE_CODE (newdecl) == FUNCTION_DECL
2572 && DECL_FUNCTION_VERSIONED (olddecl))
2574 /* Set the flag for newdecl so that it gets copied to olddecl. */
2575 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2576 /* newdecl will be purged after copying to olddecl and is no longer
2577 a version. */
2578 cgraph_node::delete_function_version_by_decl (newdecl);
2581 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2583 int function_size;
2584 struct symtab_node *snode = symtab_node::get (olddecl);
2586 function_size = sizeof (struct tree_decl_common);
2588 memcpy ((char *) olddecl + sizeof (struct tree_common),
2589 (char *) newdecl + sizeof (struct tree_common),
2590 function_size - sizeof (struct tree_common));
2592 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2593 (char *) newdecl + sizeof (struct tree_decl_common),
2594 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2596 /* Preserve symtab node mapping. */
2597 olddecl->decl_with_vis.symtab_node = snode;
2599 if (new_template_info)
2600 /* If newdecl is a template instantiation, it is possible that
2601 the following sequence of events has occurred:
2603 o A friend function was declared in a class template. The
2604 class template was instantiated.
2606 o The instantiation of the friend declaration was
2607 recorded on the instantiation list, and is newdecl.
2609 o Later, however, instantiate_class_template called pushdecl
2610 on the newdecl to perform name injection. But, pushdecl in
2611 turn called duplicate_decls when it discovered that another
2612 declaration of a global function with the same name already
2613 existed.
2615 o Here, in duplicate_decls, we decided to clobber newdecl.
2617 If we're going to do that, we'd better make sure that
2618 olddecl, and not newdecl, is on the list of
2619 instantiations so that if we try to do the instantiation
2620 again we won't get the clobbered declaration. */
2621 reregister_specialization (newdecl,
2622 new_template_info,
2623 olddecl);
2625 else
2627 size_t size = tree_code_size (TREE_CODE (newdecl));
2629 memcpy ((char *) olddecl + sizeof (struct tree_common),
2630 (char *) newdecl + sizeof (struct tree_common),
2631 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2632 switch (TREE_CODE (newdecl))
2634 case LABEL_DECL:
2635 case VAR_DECL:
2636 case RESULT_DECL:
2637 case PARM_DECL:
2638 case FIELD_DECL:
2639 case TYPE_DECL:
2640 case CONST_DECL:
2642 struct symtab_node *snode = NULL;
2644 if (VAR_P (newdecl)
2645 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2646 || DECL_EXTERNAL (olddecl)))
2647 snode = symtab_node::get (olddecl);
2648 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2649 (char *) newdecl + sizeof (struct tree_decl_common),
2650 size - sizeof (struct tree_decl_common)
2651 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2652 if (VAR_P (newdecl))
2653 olddecl->decl_with_vis.symtab_node = snode;
2655 break;
2656 default:
2657 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2658 (char *) newdecl + sizeof (struct tree_decl_common),
2659 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2660 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2661 break;
2665 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2667 if (DECL_EXTERNAL (olddecl)
2668 || TREE_PUBLIC (olddecl)
2669 || TREE_STATIC (olddecl))
2671 /* Merge the section attribute.
2672 We want to issue an error if the sections conflict but that must be
2673 done later in decl_attributes since we are called before attributes
2674 are assigned. */
2675 if (DECL_SECTION_NAME (newdecl) != NULL)
2676 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2678 if (DECL_ONE_ONLY (newdecl))
2680 struct symtab_node *oldsym, *newsym;
2681 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2682 oldsym = cgraph_node::get_create (olddecl);
2683 else
2684 oldsym = varpool_node::get_create (olddecl);
2685 newsym = symtab_node::get (newdecl);
2686 oldsym->set_comdat_group (newsym->get_comdat_group ());
2690 if (VAR_P (newdecl)
2691 && CP_DECL_THREAD_LOCAL_P (newdecl))
2693 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2694 if (!processing_template_decl)
2695 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2699 DECL_UID (olddecl) = olddecl_uid;
2700 if (olddecl_friend)
2701 DECL_FRIEND_P (olddecl) = 1;
2702 if (hidden_friend)
2704 DECL_ANTICIPATED (olddecl) = 1;
2705 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2708 /* NEWDECL contains the merged attribute lists.
2709 Update OLDDECL to be the same. */
2710 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2712 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2713 so that encode_section_info has a chance to look at the new decl
2714 flags and attributes. */
2715 if (DECL_RTL_SET_P (olddecl)
2716 && (TREE_CODE (olddecl) == FUNCTION_DECL
2717 || (VAR_P (olddecl)
2718 && TREE_STATIC (olddecl))))
2719 make_decl_rtl (olddecl);
2721 /* The NEWDECL will no longer be needed. Because every out-of-class
2722 declaration of a member results in a call to duplicate_decls,
2723 freeing these nodes represents in a significant savings.
2725 Before releasing the node, be sore to remove function from symbol
2726 table that might have been inserted there to record comdat group.
2727 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2728 structure is shared in between newdecl and oldecl. */
2729 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2730 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2731 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2733 struct symtab_node *snode = symtab_node::get (newdecl);
2734 if (snode)
2735 snode->remove ();
2738 /* Remove the associated constraints for newdecl, if any, before
2739 reclaiming memory. */
2740 if (flag_concepts)
2741 remove_constraints (newdecl);
2743 ggc_free (newdecl);
2745 return olddecl;
2748 /* Return zero if the declaration NEWDECL is valid
2749 when the declaration OLDDECL (assumed to be for the same name)
2750 has already been seen.
2751 Otherwise return an error message format string with a %s
2752 where the identifier should go. */
2754 static const char *
2755 redeclaration_error_message (tree newdecl, tree olddecl)
2757 if (TREE_CODE (newdecl) == TYPE_DECL)
2759 /* Because C++ can put things into name space for free,
2760 constructs like "typedef struct foo { ... } foo"
2761 would look like an erroneous redeclaration. */
2762 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2763 return NULL;
2764 else
2765 return G_("redefinition of %q#D");
2767 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2769 /* If this is a pure function, its olddecl will actually be
2770 the original initialization to `0' (which we force to call
2771 abort()). Don't complain about redefinition in this case. */
2772 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2773 && DECL_INITIAL (olddecl) == NULL_TREE)
2774 return NULL;
2776 /* If both functions come from different namespaces, this is not
2777 a redeclaration - this is a conflict with a used function. */
2778 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2779 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2780 && ! decls_match (olddecl, newdecl))
2781 return G_("%qD conflicts with used function");
2783 /* We'll complain about linkage mismatches in
2784 warn_extern_redeclared_static. */
2786 /* Defining the same name twice is no good. */
2787 if (decl_defined_p (olddecl)
2788 && decl_defined_p (newdecl))
2790 if (DECL_NAME (olddecl) == NULL_TREE)
2791 return G_("%q#D not declared in class");
2792 else if (!GNU_INLINE_P (olddecl)
2793 || GNU_INLINE_P (newdecl))
2794 return G_("redefinition of %q#D");
2797 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2799 bool olda = GNU_INLINE_P (olddecl);
2800 bool newa = GNU_INLINE_P (newdecl);
2802 if (olda != newa)
2804 if (newa)
2805 return G_("%q+D redeclared inline with "
2806 "%<gnu_inline%> attribute");
2807 else
2808 return G_("%q+D redeclared inline without "
2809 "%<gnu_inline%> attribute");
2813 check_abi_tag_redeclaration
2814 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2815 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2817 return NULL;
2819 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2821 tree nt, ot;
2823 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2825 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2826 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2827 return G_("redefinition of %q#D");
2828 return NULL;
2831 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2832 || (DECL_TEMPLATE_RESULT (newdecl)
2833 == DECL_TEMPLATE_RESULT (olddecl)))
2834 return NULL;
2836 nt = DECL_TEMPLATE_RESULT (newdecl);
2837 if (DECL_TEMPLATE_INFO (nt))
2838 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2839 ot = DECL_TEMPLATE_RESULT (olddecl);
2840 if (DECL_TEMPLATE_INFO (ot))
2841 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2842 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2843 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2844 return G_("redefinition of %q#D");
2846 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2848 bool olda = GNU_INLINE_P (ot);
2849 bool newa = GNU_INLINE_P (nt);
2851 if (olda != newa)
2853 if (newa)
2854 return G_("%q+D redeclared inline with "
2855 "%<gnu_inline%> attribute");
2856 else
2857 return G_("%q+D redeclared inline without "
2858 "%<gnu_inline%> attribute");
2862 /* Core issue #226 (C++0x):
2864 If a friend function template declaration specifies a
2865 default template-argument, that declaration shall be a
2866 definition and shall be the only declaration of the
2867 function template in the translation unit. */
2868 if ((cxx_dialect != cxx98)
2869 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2870 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2871 /*is_primary=*/true,
2872 /*is_partial=*/false,
2873 /*is_friend_decl=*/2))
2874 return G_("redeclaration of friend %q#D "
2875 "may not have default template arguments");
2877 return NULL;
2879 else if (VAR_P (newdecl)
2880 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2881 && (! DECL_LANG_SPECIFIC (olddecl)
2882 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2883 || CP_DECL_THREAD_LOCAL_P (newdecl)))
2885 /* Only variables can be thread-local, and all declarations must
2886 agree on this property. */
2887 if (CP_DECL_THREAD_LOCAL_P (newdecl))
2888 return G_("thread-local declaration of %q#D follows "
2889 "non-thread-local declaration");
2890 else
2891 return G_("non-thread-local declaration of %q#D follows "
2892 "thread-local declaration");
2894 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2896 /* The objects have been declared at namespace scope. If either
2897 is a member of an anonymous union, then this is an invalid
2898 redeclaration. For example:
2900 int i;
2901 union { int i; };
2903 is invalid. */
2904 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2905 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2906 return G_("redeclaration of %q#D");
2907 /* If at least one declaration is a reference, there is no
2908 conflict. For example:
2910 int i = 3;
2911 extern int i;
2913 is valid. */
2914 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2915 return NULL;
2917 /* Static data member declared outside a class definition
2918 if the variable is defined within the class with constexpr
2919 specifier is declaration rather than definition (and
2920 deprecated). */
2921 if (cxx_dialect >= cxx17
2922 && DECL_CLASS_SCOPE_P (olddecl)
2923 && DECL_DECLARED_CONSTEXPR_P (olddecl)
2924 && !DECL_INITIAL (newdecl))
2926 DECL_EXTERNAL (newdecl) = 1;
2927 /* For now, only warn with explicit -Wdeprecated. */
2928 if (global_options_set.x_warn_deprecated
2929 && warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
2930 "redundant redeclaration of %<constexpr%> static "
2931 "data member %qD", newdecl))
2932 inform (DECL_SOURCE_LOCATION (olddecl),
2933 "previous declaration of %qD", olddecl);
2934 return NULL;
2937 /* Reject two definitions. */
2938 return G_("redefinition of %q#D");
2940 else
2942 /* Objects declared with block scope: */
2943 /* Reject two definitions, and reject a definition
2944 together with an external reference. */
2945 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2946 return G_("redeclaration of %q#D");
2947 return NULL;
2952 /* Hash and equality functions for the named_label table. */
2954 hashval_t
2955 named_label_hash::hash (const value_type entry)
2957 return IDENTIFIER_HASH_VALUE (entry->name);
2960 bool
2961 named_label_hash::equal (const value_type entry, compare_type name)
2963 return name == entry->name;
2966 /* Look for a label named ID in the current function. If one cannot
2967 be found, create one. Return the named_label_entry, or NULL on
2968 failure. */
2970 static named_label_entry *
2971 lookup_label_1 (tree id, bool making_local_p)
2973 /* You can't use labels at global scope. */
2974 if (current_function_decl == NULL_TREE)
2976 error ("label %qE referenced outside of any function", id);
2977 return NULL;
2980 if (!named_labels)
2981 named_labels = hash_table<named_label_hash>::create_ggc (13);
2983 hashval_t hash = IDENTIFIER_HASH_VALUE (id);
2984 named_label_entry **slot
2985 = named_labels->find_slot_with_hash (id, hash, INSERT);
2986 named_label_entry *old = *slot;
2988 if (old && old->label_decl)
2990 if (!making_local_p)
2991 return old;
2993 if (old->binding_level == current_binding_level)
2995 error ("local label %qE conflicts with existing label", id);
2996 inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
2997 return NULL;
3001 /* We are making a new decl, create or reuse the named_label_entry */
3002 named_label_entry *ent = NULL;
3003 if (old && !old->label_decl)
3004 ent = old;
3005 else
3007 ent = ggc_cleared_alloc<named_label_entry> ();
3008 ent->name = id;
3009 ent->outer = old;
3010 *slot = ent;
3013 /* Now create the LABEL_DECL. */
3014 tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3016 DECL_CONTEXT (decl) = current_function_decl;
3017 SET_DECL_MODE (decl, VOIDmode);
3018 if (making_local_p)
3020 C_DECLARED_LABEL_FLAG (decl) = true;
3021 DECL_CHAIN (decl) = current_binding_level->names;
3022 current_binding_level->names = decl;
3025 ent->label_decl = decl;
3027 return ent;
3030 /* Wrapper for lookup_label_1. */
3032 tree
3033 lookup_label (tree id)
3035 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3036 named_label_entry *ent = lookup_label_1 (id, false);
3037 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3038 return ent ? ent->label_decl : NULL_TREE;
3041 tree
3042 declare_local_label (tree id)
3044 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3045 named_label_entry *ent = lookup_label_1 (id, true);
3046 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3047 return ent ? ent->label_decl : NULL_TREE;
3050 /* Returns nonzero if it is ill-formed to jump past the declaration of
3051 DECL. Returns 2 if it's also a real problem. */
3053 static int
3054 decl_jump_unsafe (tree decl)
3056 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3057 with automatic storage duration is not in scope to a point where it is
3058 in scope is ill-formed unless the variable has scalar type, class type
3059 with a trivial default constructor and a trivial destructor, a
3060 cv-qualified version of one of these types, or an array of one of the
3061 preceding types and is declared without an initializer (8.5). */
3062 tree type = TREE_TYPE (decl);
3064 if (!VAR_P (decl) || TREE_STATIC (decl)
3065 || type == error_mark_node)
3066 return 0;
3068 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3069 || variably_modified_type_p (type, NULL_TREE))
3070 return 2;
3072 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3073 return 1;
3075 return 0;
3078 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3079 to the user. */
3081 static bool
3082 identify_goto (tree decl, location_t loc, const location_t *locus,
3083 diagnostic_t diag_kind)
3085 bool complained
3086 = emit_diagnostic (diag_kind, loc, 0,
3087 decl ? N_("jump to label %qD")
3088 : N_("jump to case label"), decl);
3089 if (complained && locus)
3090 inform (*locus, " from here");
3091 return complained;
3094 /* Check that a single previously seen jump to a newly defined label
3095 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3096 the jump context; NAMES are the names in scope in LEVEL at the jump
3097 context; LOCUS is the source position of the jump or 0. Returns
3098 true if all is well. */
3100 static bool
3101 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3102 bool exited_omp, const location_t *locus)
3104 cp_binding_level *b;
3105 bool complained = false;
3106 int identified = 0;
3107 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3109 if (exited_omp)
3111 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3112 if (complained)
3113 inform (input_location, " exits OpenMP structured block");
3114 saw_omp = true;
3115 identified = 2;
3118 for (b = current_binding_level; b ; b = b->level_chain)
3120 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3122 for (new_decls = b->names; new_decls != old_decls;
3123 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3124 : TREE_CHAIN (new_decls)))
3126 int problem = decl_jump_unsafe (new_decls);
3127 if (! problem)
3128 continue;
3130 if (!identified)
3132 complained = identify_goto (decl, input_location, locus,
3133 DK_PERMERROR);
3134 identified = 1;
3136 if (complained)
3138 if (problem > 1)
3139 inform (DECL_SOURCE_LOCATION (new_decls),
3140 " crosses initialization of %q#D", new_decls);
3141 else
3142 inform (DECL_SOURCE_LOCATION (new_decls),
3143 " enters scope of %q#D, which has "
3144 "non-trivial destructor", new_decls);
3148 if (b == level)
3149 break;
3151 const char *inf = NULL;
3152 location_t loc = input_location;
3153 switch (b->kind)
3155 case sk_try:
3156 if (!saw_eh)
3157 inf = N_("enters try block");
3158 saw_eh = true;
3159 break;
3161 case sk_catch:
3162 if (!saw_eh)
3163 inf = N_("enters catch block");
3164 saw_eh = true;
3165 break;
3167 case sk_omp:
3168 if (!saw_omp)
3169 inf = N_("enters OpenMP structured block");
3170 saw_omp = true;
3171 break;
3173 case sk_transaction:
3174 if (!saw_tm)
3175 inf = N_("enters synchronized or atomic statement");
3176 saw_tm = true;
3177 break;
3179 case sk_block:
3180 if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3182 inf = N_("enters constexpr if statement");
3183 loc = EXPR_LOCATION (b->level_chain->this_entity);
3184 saw_cxif = true;
3186 break;
3188 default:
3189 break;
3192 if (inf)
3194 if (identified < 2)
3195 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3196 identified = 2;
3197 if (complained)
3198 inform (loc, " %s", inf);
3202 return !identified;
3205 static void
3206 check_previous_goto (tree decl, struct named_label_use_entry *use)
3208 check_previous_goto_1 (decl, use->binding_level,
3209 use->names_in_scope, use->in_omp_scope,
3210 &use->o_goto_locus);
3213 static bool
3214 check_switch_goto (cp_binding_level* level)
3216 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3219 /* Check that a new jump to a label DECL is OK. Called by
3220 finish_goto_stmt. */
3222 void
3223 check_goto (tree decl)
3225 /* We can't know where a computed goto is jumping.
3226 So we assume that it's OK. */
3227 if (TREE_CODE (decl) != LABEL_DECL)
3228 return;
3230 /* We didn't record any information about this label when we created it,
3231 and there's not much point since it's trivial to analyze as a return. */
3232 if (decl == cdtor_label)
3233 return;
3235 hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3236 named_label_entry **slot
3237 = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3238 named_label_entry *ent = *slot;
3240 /* If the label hasn't been defined yet, defer checking. */
3241 if (! DECL_INITIAL (decl))
3243 /* Don't bother creating another use if the last goto had the
3244 same data, and will therefore create the same set of errors. */
3245 if (ent->uses
3246 && ent->uses->names_in_scope == current_binding_level->names)
3247 return;
3249 named_label_use_entry *new_use
3250 = ggc_alloc<named_label_use_entry> ();
3251 new_use->binding_level = current_binding_level;
3252 new_use->names_in_scope = current_binding_level->names;
3253 new_use->o_goto_locus = input_location;
3254 new_use->in_omp_scope = false;
3256 new_use->next = ent->uses;
3257 ent->uses = new_use;
3258 return;
3261 bool saw_catch = false, complained = false;
3262 int identified = 0;
3263 tree bad;
3264 unsigned ix;
3266 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3267 || ent->in_constexpr_if
3268 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3270 diagnostic_t diag_kind = DK_PERMERROR;
3271 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3272 || ent->in_transaction_scope || ent->in_omp_scope)
3273 diag_kind = DK_ERROR;
3274 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3275 &input_location, diag_kind);
3276 identified = 1 + (diag_kind == DK_ERROR);
3279 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3281 int u = decl_jump_unsafe (bad);
3283 if (u > 1 && DECL_ARTIFICIAL (bad))
3285 /* Can't skip init of __exception_info. */
3286 if (identified == 1)
3288 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3289 &input_location, DK_ERROR);
3290 identified = 2;
3292 if (complained)
3293 inform (DECL_SOURCE_LOCATION (bad), " enters catch block");
3294 saw_catch = true;
3296 else if (complained)
3298 if (u > 1)
3299 inform (DECL_SOURCE_LOCATION (bad),
3300 " skips initialization of %q#D", bad);
3301 else
3302 inform (DECL_SOURCE_LOCATION (bad),
3303 " enters scope of %q#D which has "
3304 "non-trivial destructor", bad);
3308 if (complained)
3310 if (ent->in_try_scope)
3311 inform (input_location, " enters try block");
3312 else if (ent->in_catch_scope && !saw_catch)
3313 inform (input_location, " enters catch block");
3314 else if (ent->in_transaction_scope)
3315 inform (input_location, " enters synchronized or atomic statement");
3316 else if (ent->in_constexpr_if)
3317 inform (input_location, " enters %<constexpr%> if statement");
3320 if (ent->in_omp_scope)
3322 if (complained)
3323 inform (input_location, " enters OpenMP structured block");
3325 else if (flag_openmp)
3326 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3328 if (b == ent->binding_level)
3329 break;
3330 if (b->kind == sk_omp)
3332 if (identified < 2)
3334 complained = identify_goto (decl,
3335 DECL_SOURCE_LOCATION (decl),
3336 &input_location, DK_ERROR);
3337 identified = 2;
3339 if (complained)
3340 inform (input_location, " exits OpenMP structured block");
3341 break;
3346 /* Check that a return is ok wrt OpenMP structured blocks.
3347 Called by finish_return_stmt. Returns true if all is well. */
3349 bool
3350 check_omp_return (void)
3352 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3353 if (b->kind == sk_omp)
3355 error ("invalid exit from OpenMP structured block");
3356 return false;
3358 else if (b->kind == sk_function_parms)
3359 break;
3360 return true;
3363 /* Define a label, specifying the location in the source file.
3364 Return the LABEL_DECL node for the label. */
3366 static tree
3367 define_label_1 (location_t location, tree name)
3369 /* After labels, make any new cleanups in the function go into their
3370 own new (temporary) binding contour. */
3371 for (cp_binding_level *p = current_binding_level;
3372 p->kind != sk_function_parms;
3373 p = p->level_chain)
3374 p->more_cleanups_ok = 0;
3376 named_label_entry *ent = lookup_label_1 (name, false);
3377 tree decl = ent->label_decl;
3379 if (DECL_INITIAL (decl) != NULL_TREE)
3381 error ("duplicate label %qD", decl);
3382 return error_mark_node;
3384 else
3386 /* Mark label as having been defined. */
3387 DECL_INITIAL (decl) = error_mark_node;
3388 /* Say where in the source. */
3389 DECL_SOURCE_LOCATION (decl) = location;
3391 ent->binding_level = current_binding_level;
3392 ent->names_in_scope = current_binding_level->names;
3394 for (named_label_use_entry *use = ent->uses; use; use = use->next)
3395 check_previous_goto (decl, use);
3396 ent->uses = NULL;
3399 return decl;
3402 /* Wrapper for define_label_1. */
3404 tree
3405 define_label (location_t location, tree name)
3407 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3408 tree ret = define_label_1 (location, name);
3409 timevar_cond_stop (TV_NAME_LOOKUP, running);
3410 return ret;
3414 struct cp_switch
3416 cp_binding_level *level;
3417 struct cp_switch *next;
3418 /* The SWITCH_STMT being built. */
3419 tree switch_stmt;
3420 /* A splay-tree mapping the low element of a case range to the high
3421 element, or NULL_TREE if there is no high element. Used to
3422 determine whether or not a new case label duplicates an old case
3423 label. We need a tree, rather than simply a hash table, because
3424 of the GNU case range extension. */
3425 splay_tree cases;
3426 /* Remember whether there was a case value that is outside the
3427 range of the original type of the controlling expression. */
3428 bool outside_range_p;
3429 /* Remember whether a default: case label has been seen. */
3430 bool has_default_p;
3431 /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT. */
3432 bool break_stmt_seen_p;
3433 /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3434 where BREAK_STMT doesn't belong to the SWITCH_STMT. */
3435 bool in_loop_body_p;
3438 /* A stack of the currently active switch statements. The innermost
3439 switch statement is on the top of the stack. There is no need to
3440 mark the stack for garbage collection because it is only active
3441 during the processing of the body of a function, and we never
3442 collect at that point. */
3444 static struct cp_switch *switch_stack;
3446 /* Called right after a switch-statement condition is parsed.
3447 SWITCH_STMT is the switch statement being parsed. */
3449 void
3450 push_switch (tree switch_stmt)
3452 struct cp_switch *p = XNEW (struct cp_switch);
3453 p->level = current_binding_level;
3454 p->next = switch_stack;
3455 p->switch_stmt = switch_stmt;
3456 p->cases = splay_tree_new (case_compare, NULL, NULL);
3457 p->outside_range_p = false;
3458 p->has_default_p = false;
3459 p->break_stmt_seen_p = false;
3460 p->in_loop_body_p = false;
3461 switch_stack = p;
3464 void
3465 pop_switch (void)
3467 struct cp_switch *cs = switch_stack;
3468 location_t switch_location;
3470 /* Emit warnings as needed. */
3471 switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3472 const bool bool_cond_p
3473 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3474 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3475 if (!processing_template_decl)
3476 c_do_switch_warnings (cs->cases, switch_location,
3477 SWITCH_STMT_TYPE (cs->switch_stmt),
3478 SWITCH_STMT_COND (cs->switch_stmt),
3479 bool_cond_p, cs->outside_range_p);
3481 /* For the benefit of block_may_fallthru remember if the switch body
3482 case labels cover all possible values and if there are break; stmts. */
3483 if (cs->has_default_p
3484 || (!processing_template_decl
3485 && c_switch_covers_all_cases_p (cs->cases,
3486 SWITCH_STMT_TYPE (cs->switch_stmt))))
3487 SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3488 if (!cs->break_stmt_seen_p)
3489 SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3490 gcc_assert (!cs->in_loop_body_p);
3491 splay_tree_delete (cs->cases);
3492 switch_stack = switch_stack->next;
3493 free (cs);
3496 /* Note that a BREAK_STMT is about to be added. If it is inside of
3497 a SWITCH_STMT and not inside of a loop body inside of it, note
3498 in switch_stack we've seen a BREAK_STMT. */
3500 void
3501 note_break_stmt (void)
3503 if (switch_stack && !switch_stack->in_loop_body_p)
3504 switch_stack->break_stmt_seen_p = true;
3507 /* Note the start of processing of an iteration statement's body.
3508 The note_break_stmt function will do nothing while processing it.
3509 Return a flag that should be passed to note_iteration_stmt_body_end. */
3511 bool
3512 note_iteration_stmt_body_start (void)
3514 if (!switch_stack)
3515 return false;
3516 bool ret = switch_stack->in_loop_body_p;
3517 switch_stack->in_loop_body_p = true;
3518 return ret;
3521 /* Note the end of processing of an iteration statement's body. */
3523 void
3524 note_iteration_stmt_body_end (bool prev)
3526 if (switch_stack)
3527 switch_stack->in_loop_body_p = prev;
3530 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3531 condition. Note that if TYPE and VALUE are already integral we don't
3532 really do the conversion because the language-independent
3533 warning/optimization code will work better that way. */
3535 static tree
3536 case_conversion (tree type, tree value)
3538 if (value == NULL_TREE)
3539 return value;
3541 value = mark_rvalue_use (value);
3543 if (cxx_dialect >= cxx11
3544 && (SCOPED_ENUM_P (type)
3545 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3547 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3548 type = type_promotes_to (type);
3549 value = (perform_implicit_conversion_flags
3550 (type, value, tf_warning_or_error,
3551 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3553 return cxx_constant_value (value);
3556 /* Note that we've seen a definition of a case label, and complain if this
3557 is a bad place for one. */
3559 tree
3560 finish_case_label (location_t loc, tree low_value, tree high_value)
3562 tree cond, r;
3563 cp_binding_level *p;
3564 tree type;
3566 if (low_value == NULL_TREE && high_value == NULL_TREE)
3567 switch_stack->has_default_p = true;
3569 if (processing_template_decl)
3571 tree label;
3573 /* For templates, just add the case label; we'll do semantic
3574 analysis at instantiation-time. */
3575 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3576 return add_stmt (build_case_label (low_value, high_value, label));
3579 /* Find the condition on which this switch statement depends. */
3580 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3581 if (cond && TREE_CODE (cond) == TREE_LIST)
3582 cond = TREE_VALUE (cond);
3584 if (!check_switch_goto (switch_stack->level))
3585 return error_mark_node;
3587 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3589 low_value = case_conversion (type, low_value);
3590 high_value = case_conversion (type, high_value);
3592 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3593 low_value, high_value,
3594 &switch_stack->outside_range_p);
3596 /* After labels, make any new cleanups in the function go into their
3597 own new (temporary) binding contour. */
3598 for (p = current_binding_level;
3599 p->kind != sk_function_parms;
3600 p = p->level_chain)
3601 p->more_cleanups_ok = 0;
3603 return r;
3606 struct typename_info {
3607 tree scope;
3608 tree name;
3609 tree template_id;
3610 bool enum_p;
3611 bool class_p;
3614 struct typename_hasher : ggc_ptr_hash<tree_node>
3616 typedef typename_info *compare_type;
3618 /* Hash a TYPENAME_TYPE. */
3620 static hashval_t
3621 hash (tree t)
3623 hashval_t hash;
3625 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3626 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3628 return hash;
3631 /* Compare two TYPENAME_TYPEs. */
3633 static bool
3634 equal (tree t1, const typename_info *t2)
3636 return (TYPE_IDENTIFIER (t1) == t2->name
3637 && TYPE_CONTEXT (t1) == t2->scope
3638 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3639 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3640 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3644 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3645 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3647 Returns the new TYPENAME_TYPE. */
3649 static GTY (()) hash_table<typename_hasher> *typename_htab;
3651 tree
3652 build_typename_type (tree context, tree name, tree fullname,
3653 enum tag_types tag_type)
3655 tree t;
3656 tree d;
3657 typename_info ti;
3658 tree *e;
3659 hashval_t hash;
3661 if (typename_htab == NULL)
3662 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3664 ti.scope = FROB_CONTEXT (context);
3665 ti.name = name;
3666 ti.template_id = fullname;
3667 ti.enum_p = tag_type == enum_type;
3668 ti.class_p = (tag_type == class_type
3669 || tag_type == record_type
3670 || tag_type == union_type);
3671 hash = (htab_hash_pointer (ti.scope)
3672 ^ htab_hash_pointer (ti.name));
3674 /* See if we already have this type. */
3675 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3676 if (*e)
3677 t = *e;
3678 else
3680 /* Build the TYPENAME_TYPE. */
3681 t = cxx_make_type (TYPENAME_TYPE);
3682 TYPE_CONTEXT (t) = ti.scope;
3683 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3684 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3685 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3687 /* Build the corresponding TYPE_DECL. */
3688 d = build_decl (input_location, TYPE_DECL, name, t);
3689 TYPE_NAME (TREE_TYPE (d)) = d;
3690 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3691 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3692 DECL_ARTIFICIAL (d) = 1;
3694 /* Store it in the hash table. */
3695 *e = t;
3697 /* TYPENAME_TYPEs must always be compared structurally, because
3698 they may or may not resolve down to another type depending on
3699 the currently open classes. */
3700 SET_TYPE_STRUCTURAL_EQUALITY (t);
3703 return t;
3706 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3707 provided to name the type. Returns an appropriate type, unless an
3708 error occurs, in which case error_mark_node is returned. If we
3709 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3710 return that, rather than the _TYPE it corresponds to, in other
3711 cases we look through the type decl. If TF_ERROR is set, complain
3712 about errors, otherwise be quiet. */
3714 tree
3715 make_typename_type (tree context, tree name, enum tag_types tag_type,
3716 tsubst_flags_t complain)
3718 tree fullname;
3719 tree t;
3720 bool want_template;
3722 if (name == error_mark_node
3723 || context == NULL_TREE
3724 || context == error_mark_node)
3725 return error_mark_node;
3727 if (TYPE_P (name))
3729 if (!(TYPE_LANG_SPECIFIC (name)
3730 && (CLASSTYPE_IS_TEMPLATE (name)
3731 || CLASSTYPE_USE_TEMPLATE (name))))
3732 name = TYPE_IDENTIFIER (name);
3733 else
3734 /* Create a TEMPLATE_ID_EXPR for the type. */
3735 name = build_nt (TEMPLATE_ID_EXPR,
3736 CLASSTYPE_TI_TEMPLATE (name),
3737 CLASSTYPE_TI_ARGS (name));
3739 else if (TREE_CODE (name) == TYPE_DECL)
3740 name = DECL_NAME (name);
3742 fullname = name;
3744 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3746 name = TREE_OPERAND (name, 0);
3747 if (DECL_TYPE_TEMPLATE_P (name))
3748 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3749 if (TREE_CODE (name) != IDENTIFIER_NODE)
3751 if (complain & tf_error)
3752 error ("%qD is not a type", name);
3753 return error_mark_node;
3756 if (TREE_CODE (name) == TEMPLATE_DECL)
3758 if (complain & tf_error)
3759 error ("%qD used without template parameters", name);
3760 return error_mark_node;
3762 gcc_assert (identifier_p (name));
3763 gcc_assert (TYPE_P (context));
3765 if (!MAYBE_CLASS_TYPE_P (context))
3767 if (complain & tf_error)
3768 error ("%q#T is not a class", context);
3769 return error_mark_node;
3772 /* When the CONTEXT is a dependent type, NAME could refer to a
3773 dependent base class of CONTEXT. But look inside it anyway
3774 if CONTEXT is a currently open scope, in case it refers to a
3775 member of the current instantiation or a non-dependent base;
3776 lookup will stop when we hit a dependent base. */
3777 if (!dependent_scope_p (context))
3778 /* We should only set WANT_TYPE when we're a nested typename type.
3779 Then we can give better diagnostics if we find a non-type. */
3780 t = lookup_field (context, name, 2, /*want_type=*/true);
3781 else
3782 t = NULL_TREE;
3784 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3785 return build_typename_type (context, name, fullname, tag_type);
3787 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3789 if (!t)
3791 if (complain & tf_error)
3793 if (!COMPLETE_TYPE_P (context))
3794 cxx_incomplete_type_error (NULL_TREE, context);
3795 else
3796 error (want_template ? G_("no class template named %q#T in %q#T")
3797 : G_("no type named %q#T in %q#T"), name, context);
3799 return error_mark_node;
3802 /* Pull out the template from an injected-class-name (or multiple). */
3803 if (want_template)
3804 t = maybe_get_template_decl_from_type_decl (t);
3806 if (TREE_CODE (t) == TREE_LIST)
3808 if (complain & tf_error)
3810 error ("lookup of %qT in %qT is ambiguous", name, context);
3811 print_candidates (t);
3813 return error_mark_node;
3816 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3818 if (complain & tf_error)
3819 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3820 context, name, t);
3821 return error_mark_node;
3823 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3825 if (complain & tf_error)
3826 error ("%<typename %T::%D%> names %q#T, which is not a type",
3827 context, name, t);
3828 return error_mark_node;
3831 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3832 return error_mark_node;
3834 /* If we are currently parsing a template and if T is a typedef accessed
3835 through CONTEXT then we need to remember and check access of T at
3836 template instantiation time. */
3837 add_typedef_to_current_template_for_access_check (t, context, input_location);
3839 if (want_template)
3840 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3841 NULL_TREE, context,
3842 /*entering_scope=*/0,
3843 complain | tf_user);
3845 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3846 t = TREE_TYPE (t);
3848 maybe_record_typedef_use (t);
3850 return t;
3853 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3854 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3855 in which case error_mark_node is returned.
3857 If PARM_LIST is non-NULL, also make sure that the template parameter
3858 list of TEMPLATE_DECL matches.
3860 If COMPLAIN zero, don't complain about any errors that occur. */
3862 tree
3863 make_unbound_class_template (tree context, tree name, tree parm_list,
3864 tsubst_flags_t complain)
3866 tree t;
3867 tree d;
3869 if (TYPE_P (name))
3870 name = TYPE_IDENTIFIER (name);
3871 else if (DECL_P (name))
3872 name = DECL_NAME (name);
3873 gcc_assert (identifier_p (name));
3875 if (!dependent_type_p (context)
3876 || currently_open_class (context))
3878 tree tmpl = NULL_TREE;
3880 if (MAYBE_CLASS_TYPE_P (context))
3881 tmpl = lookup_field (context, name, 0, false);
3883 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3884 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3886 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3888 if (complain & tf_error)
3889 error ("no class template named %q#T in %q#T", name, context);
3890 return error_mark_node;
3893 if (parm_list
3894 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3896 if (complain & tf_error)
3898 error ("template parameters do not match template %qD", tmpl);
3899 inform (DECL_SOURCE_LOCATION (tmpl),
3900 "%qD declared here", tmpl);
3902 return error_mark_node;
3905 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3906 complain))
3907 return error_mark_node;
3909 return tmpl;
3912 /* Build the UNBOUND_CLASS_TEMPLATE. */
3913 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3914 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3915 TREE_TYPE (t) = NULL_TREE;
3916 SET_TYPE_STRUCTURAL_EQUALITY (t);
3918 /* Build the corresponding TEMPLATE_DECL. */
3919 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3920 TYPE_NAME (TREE_TYPE (d)) = d;
3921 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3922 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3923 DECL_ARTIFICIAL (d) = 1;
3924 DECL_TEMPLATE_PARMS (d) = parm_list;
3926 return t;
3931 /* Push the declarations of builtin types into the global namespace.
3932 RID_INDEX is the index of the builtin type in the array
3933 RID_POINTERS. NAME is the name used when looking up the builtin
3934 type. TYPE is the _TYPE node for the builtin type.
3936 The calls to set_global_binding below should be
3937 eliminated. Built-in types should not be looked up name; their
3938 names are keywords that the parser can recognize. However, there
3939 is code in c-common.c that uses identifier_global_value to look up
3940 built-in types by name. */
3942 void
3943 record_builtin_type (enum rid rid_index,
3944 const char* name,
3945 tree type)
3947 tree decl = NULL_TREE;
3949 if (name)
3951 tree tname = get_identifier (name);
3952 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3953 DECL_ARTIFICIAL (tdecl) = 1;
3954 set_global_binding (tdecl);
3955 decl = tdecl;
3958 if ((int) rid_index < (int) RID_MAX)
3959 if (tree rname = ridpointers[(int) rid_index])
3960 if (!decl || DECL_NAME (decl) != rname)
3962 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3963 DECL_ARTIFICIAL (rdecl) = 1;
3964 set_global_binding (rdecl);
3965 if (!decl)
3966 decl = rdecl;
3969 if (decl)
3971 if (!TYPE_NAME (type))
3972 TYPE_NAME (type) = decl;
3973 debug_hooks->type_decl (decl, 0);
3977 /* Push a type into the namespace so that the back ends ignore it. */
3979 static void
3980 record_unknown_type (tree type, const char* name)
3982 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3983 TYPE_DECL, get_identifier (name), type));
3984 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3985 DECL_IGNORED_P (decl) = 1;
3986 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3987 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3988 SET_TYPE_ALIGN (type, 1);
3989 TYPE_USER_ALIGN (type) = 0;
3990 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3993 /* Create all the predefined identifiers. */
3995 static void
3996 initialize_predefined_identifiers (void)
3998 struct predefined_identifier
4000 const char *name; /* Name. */
4001 tree *node; /* Node to store it in. */
4002 cp_identifier_kind kind; /* Kind of identifier. */
4005 /* A table of identifiers to create at startup. */
4006 static const predefined_identifier predefined_identifiers[] = {
4007 {"C++", &lang_name_cplusplus, cik_normal},
4008 {"C", &lang_name_c, cik_normal},
4009 /* Some of these names have a trailing space so that it is
4010 impossible for them to conflict with names written by users. */
4011 {"__ct ", &ctor_identifier, cik_ctor},
4012 {"__ct_base ", &base_ctor_identifier, cik_ctor},
4013 {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4014 {"__dt ", &dtor_identifier, cik_dtor},
4015 {"__dt_base ", &base_dtor_identifier, cik_dtor},
4016 {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4017 {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4018 {"__conv_op ", &conv_op_identifier, cik_conv_op},
4019 {"__in_chrg", &in_charge_identifier, cik_normal},
4020 {"this", &this_identifier, cik_normal},
4021 {"__delta", &delta_identifier, cik_normal},
4022 {"__pfn", &pfn_identifier, cik_normal},
4023 {"_vptr", &vptr_identifier, cik_normal},
4024 {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4025 {"::", &global_identifier, cik_normal},
4026 {"std", &std_identifier, cik_normal},
4027 /* The demangler expects anonymous namespaces to be called
4028 something starting with '_GLOBAL__N_'. It no longer needs
4029 to be unique to the TU. */
4030 {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4031 {"auto", &auto_identifier, cik_normal},
4032 {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4033 {"initializer_list", &init_list_identifier, cik_normal},
4034 {NULL, NULL, cik_normal}
4037 for (const predefined_identifier *pid = predefined_identifiers;
4038 pid->name; ++pid)
4040 *pid->node = get_identifier (pid->name);
4041 /* Some of these identifiers already have a special kind. */
4042 if (pid->kind != cik_normal)
4043 set_identifier_kind (*pid->node, pid->kind);
4047 /* Create the predefined scalar types of C,
4048 and some nodes representing standard constants (0, 1, (void *)0).
4049 Initialize the global binding level.
4050 Make definitions for built-in primitive functions. */
4052 void
4053 cxx_init_decl_processing (void)
4055 tree void_ftype;
4056 tree void_ftype_ptr;
4058 /* Create all the identifiers we need. */
4059 initialize_predefined_identifiers ();
4061 /* Create the global variables. */
4062 push_to_top_level ();
4064 current_function_decl = NULL_TREE;
4065 current_binding_level = NULL;
4066 /* Enter the global namespace. */
4067 gcc_assert (global_namespace == NULL_TREE);
4068 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4069 void_type_node);
4070 TREE_PUBLIC (global_namespace) = 1;
4071 DECL_CONTEXT (global_namespace)
4072 = build_translation_unit_decl (get_identifier (main_input_filename));
4073 /* Remember whether we want the empty class passing ABI change warning
4074 in this TU. */
4075 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4076 = warn_abi && abi_version_crosses (12);
4077 debug_hooks->register_main_translation_unit
4078 (DECL_CONTEXT (global_namespace));
4079 begin_scope (sk_namespace, global_namespace);
4080 current_namespace = global_namespace;
4082 if (flag_visibility_ms_compat)
4083 default_visibility = VISIBILITY_HIDDEN;
4085 /* Initially, C. */
4086 current_lang_name = lang_name_c;
4088 /* Create the `std' namespace. */
4089 push_namespace (std_identifier);
4090 std_node = current_namespace;
4091 pop_namespace ();
4093 flag_noexcept_type = (cxx_dialect >= cxx17);
4094 /* There's no fixed location for <command-line>, the current
4095 location is <builtins>, which is somewhat confusing. */
4096 if (!flag_new_for_scope)
4097 warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
4098 "%<-fno-for-scope%> is deprecated");
4099 if (flag_friend_injection)
4100 warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
4101 "%<-ffriend-injection%> is deprecated");
4103 c_common_nodes_and_builtins ();
4105 integer_two_node = build_int_cst (NULL_TREE, 2);
4107 /* Guess at the initial static decls size. */
4108 vec_alloc (static_decls, 500);
4110 /* ... and keyed classes. */
4111 vec_alloc (keyed_classes, 100);
4113 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4114 truthvalue_type_node = boolean_type_node;
4115 truthvalue_false_node = boolean_false_node;
4116 truthvalue_true_node = boolean_true_node;
4118 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4119 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4120 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4121 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4122 NULL_TREE);
4124 #if 0
4125 record_builtin_type (RID_MAX, NULL, string_type_node);
4126 #endif
4128 delta_type_node = ptrdiff_type_node;
4129 vtable_index_type = ptrdiff_type_node;
4131 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4132 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4133 void_ftype_ptr = build_function_type_list (void_type_node,
4134 ptr_type_node, NULL_TREE);
4135 void_ftype_ptr
4136 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4138 /* Create the conversion operator marker. This operator's DECL_NAME
4139 is in the identifier table, so we can use identifier equality to
4140 find it. */
4141 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4142 void_ftype);
4144 /* C++ extensions */
4146 unknown_type_node = make_node (LANG_TYPE);
4147 record_unknown_type (unknown_type_node, "unknown type");
4149 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4150 TREE_TYPE (unknown_type_node) = unknown_type_node;
4152 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4153 result. */
4154 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4155 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4157 init_list_type_node = make_node (LANG_TYPE);
4158 record_unknown_type (init_list_type_node, "init list");
4161 /* Make sure we get a unique function type, so we can give
4162 its pointer type a name. (This wins for gdb.) */
4163 tree vfunc_type = make_node (FUNCTION_TYPE);
4164 TREE_TYPE (vfunc_type) = integer_type_node;
4165 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4166 layout_type (vfunc_type);
4168 vtable_entry_type = build_pointer_type (vfunc_type);
4170 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4172 vtbl_type_node
4173 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4174 layout_type (vtbl_type_node);
4175 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4176 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4177 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4178 layout_type (vtbl_ptr_type_node);
4179 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4181 push_namespace (get_identifier ("__cxxabiv1"));
4182 abi_node = current_namespace;
4183 pop_namespace ();
4185 global_type_node = make_node (LANG_TYPE);
4186 record_unknown_type (global_type_node, "global type");
4188 any_targ_node = make_node (LANG_TYPE);
4189 record_unknown_type (any_targ_node, "any type");
4191 /* Now, C++. */
4192 current_lang_name = lang_name_cplusplus;
4194 if (aligned_new_threshold > 1
4195 && !pow2p_hwi (aligned_new_threshold))
4197 error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4198 aligned_new_threshold = 1;
4200 if (aligned_new_threshold == -1)
4201 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4202 if (aligned_new_threshold == 1)
4203 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4206 tree newattrs, extvisattr;
4207 tree newtype, deltype;
4208 tree ptr_ftype_sizetype;
4209 tree new_eh_spec;
4211 ptr_ftype_sizetype
4212 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4213 if (cxx_dialect == cxx98)
4215 tree bad_alloc_id;
4216 tree bad_alloc_type_node;
4217 tree bad_alloc_decl;
4219 push_namespace (std_identifier);
4220 bad_alloc_id = get_identifier ("bad_alloc");
4221 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4222 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4223 bad_alloc_decl
4224 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4225 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4226 pop_namespace ();
4228 new_eh_spec
4229 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4231 else
4232 new_eh_spec = noexcept_false_spec;
4234 /* Ensure attribs.c is initialized. */
4235 init_attributes ();
4237 /* Ensure constraint.cc is initialized. */
4238 init_constraint_processing ();
4240 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4241 NULL_TREE);
4242 newattrs = tree_cons (get_identifier ("alloc_size"),
4243 build_tree_list (NULL_TREE, integer_one_node),
4244 extvisattr);
4245 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4246 newtype = build_exception_variant (newtype, new_eh_spec);
4247 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4248 deltype = build_exception_variant (deltype, empty_except_spec);
4249 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4250 DECL_IS_MALLOC (opnew) = 1;
4251 DECL_IS_OPERATOR_NEW (opnew) = 1;
4252 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4253 DECL_IS_MALLOC (opnew) = 1;
4254 DECL_IS_OPERATOR_NEW (opnew) = 1;
4255 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4256 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4257 if (flag_sized_deallocation)
4259 /* Also push the sized deallocation variants:
4260 void operator delete(void*, std::size_t) throw();
4261 void operator delete[](void*, std::size_t) throw(); */
4262 tree void_ftype_ptr_size
4263 = build_function_type_list (void_type_node, ptr_type_node,
4264 size_type_node, NULL_TREE);
4265 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4266 extvisattr);
4267 deltype = build_exception_variant (deltype, empty_except_spec);
4268 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4269 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4272 if (aligned_new_threshold)
4274 push_namespace (std_identifier);
4275 tree align_id = get_identifier ("align_val_t");
4276 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4277 NULL_TREE, /*scoped*/true, NULL);
4278 pop_namespace ();
4280 /* operator new (size_t, align_val_t); */
4281 newtype = build_function_type_list (ptr_type_node, size_type_node,
4282 align_type_node, NULL_TREE);
4283 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4284 newtype = build_exception_variant (newtype, new_eh_spec);
4285 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4286 DECL_IS_MALLOC (opnew) = 1;
4287 DECL_IS_OPERATOR_NEW (opnew) = 1;
4288 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4289 DECL_IS_MALLOC (opnew) = 1;
4290 DECL_IS_OPERATOR_NEW (opnew) = 1;
4292 /* operator delete (void *, align_val_t); */
4293 deltype = build_function_type_list (void_type_node, ptr_type_node,
4294 align_type_node, NULL_TREE);
4295 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4296 deltype = build_exception_variant (deltype, empty_except_spec);
4297 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4298 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4300 if (flag_sized_deallocation)
4302 /* operator delete (void *, size_t, align_val_t); */
4303 deltype = build_function_type_list (void_type_node, ptr_type_node,
4304 size_type_node, align_type_node,
4305 NULL_TREE);
4306 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4307 deltype = build_exception_variant (deltype, empty_except_spec);
4308 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4309 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4313 nullptr_type_node = make_node (NULLPTR_TYPE);
4314 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4315 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4316 TYPE_UNSIGNED (nullptr_type_node) = 1;
4317 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4318 if (abi_version_at_least (9))
4319 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4320 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4321 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4322 nullptr_node = build_int_cst (nullptr_type_node, 0);
4325 abort_fndecl
4326 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4327 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4329 /* Perform other language dependent initializations. */
4330 init_class_processing ();
4331 init_rtti_processing ();
4332 init_template_processing ();
4334 if (flag_exceptions)
4335 init_exception_processing ();
4337 if (! supports_one_only ())
4338 flag_weak = 0;
4340 make_fname_decl = cp_make_fname_decl;
4341 start_fname_decls ();
4343 /* Show we use EH for cleanups. */
4344 if (flag_exceptions)
4345 using_eh_for_cleanups ();
4348 /* Generate an initializer for a function naming variable from
4349 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4350 filled in with the type of the init. */
4352 tree
4353 cp_fname_init (const char* name, tree *type_p)
4355 tree domain = NULL_TREE;
4356 tree type;
4357 tree init = NULL_TREE;
4358 size_t length = 0;
4360 if (name)
4362 length = strlen (name);
4363 domain = build_index_type (size_int (length));
4364 init = build_string (length + 1, name);
4367 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4368 type = build_cplus_array_type (type, domain);
4370 *type_p = type;
4372 if (init)
4373 TREE_TYPE (init) = type;
4374 else
4375 init = error_mark_node;
4377 return init;
4380 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4381 the decl, LOC is the location to give the decl, NAME is the
4382 initialization string and TYPE_DEP indicates whether NAME depended
4383 on the type of the function. We make use of that to detect
4384 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4385 at the point of first use, so we mustn't push the decl now. */
4387 static tree
4388 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4390 const char *const name = (type_dep && processing_template_decl
4391 ? NULL : fname_as_string (type_dep));
4392 tree type;
4393 tree init = cp_fname_init (name, &type);
4394 tree decl = build_decl (loc, VAR_DECL, id, type);
4396 if (name)
4397 free (CONST_CAST (char *, name));
4399 TREE_STATIC (decl) = 1;
4400 TREE_READONLY (decl) = 1;
4401 DECL_ARTIFICIAL (decl) = 1;
4403 TREE_USED (decl) = 1;
4405 if (current_function_decl)
4407 DECL_CONTEXT (decl) = current_function_decl;
4408 decl = pushdecl_outermost_localscope (decl);
4409 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4410 LOOKUP_ONLYCONVERTING);
4412 else
4414 DECL_THIS_STATIC (decl) = true;
4415 pushdecl_top_level_and_finish (decl, init);
4418 return decl;
4421 static tree
4422 builtin_function_1 (tree decl, tree context, bool is_global)
4424 tree id = DECL_NAME (decl);
4425 const char *name = IDENTIFIER_POINTER (id);
4427 retrofit_lang_decl (decl);
4429 DECL_ARTIFICIAL (decl) = 1;
4430 SET_DECL_LANGUAGE (decl, lang_c);
4431 /* Runtime library routines are, by definition, available in an
4432 external shared object. */
4433 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4434 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4436 DECL_CONTEXT (decl) = context;
4438 /* A function in the user's namespace should have an explicit
4439 declaration before it is used. Mark the built-in function as
4440 anticipated but not actually declared. */
4441 if (name[0] != '_' || name[1] != '_')
4442 DECL_ANTICIPATED (decl) = 1;
4443 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4445 size_t len = strlen (name);
4447 /* Treat __*_chk fortification functions as anticipated as well,
4448 unless they are __builtin_*. */
4449 if (len > strlen ("___chk")
4450 && memcmp (name + len - strlen ("_chk"),
4451 "_chk", strlen ("_chk") + 1) == 0)
4452 DECL_ANTICIPATED (decl) = 1;
4455 if (is_global)
4456 pushdecl_top_level (decl);
4457 else
4458 pushdecl (decl);
4460 return decl;
4463 tree
4464 cxx_builtin_function (tree decl)
4466 tree id = DECL_NAME (decl);
4467 const char *name = IDENTIFIER_POINTER (id);
4468 /* All builtins that don't begin with an '_' should additionally
4469 go in the 'std' namespace. */
4470 if (name[0] != '_')
4472 tree decl2 = copy_node(decl);
4473 push_namespace (std_identifier);
4474 builtin_function_1 (decl2, std_node, false);
4475 pop_namespace ();
4478 return builtin_function_1 (decl, NULL_TREE, false);
4481 /* Like cxx_builtin_function, but guarantee the function is added to the global
4482 scope. This is to allow function specific options to add new machine
4483 dependent builtins when the target ISA changes via attribute((target(...)))
4484 which saves space on program startup if the program does not use non-generic
4485 ISAs. */
4487 tree
4488 cxx_builtin_function_ext_scope (tree decl)
4491 tree id = DECL_NAME (decl);
4492 const char *name = IDENTIFIER_POINTER (id);
4493 /* All builtins that don't begin with an '_' should additionally
4494 go in the 'std' namespace. */
4495 if (name[0] != '_')
4497 tree decl2 = copy_node(decl);
4498 push_namespace (std_identifier);
4499 builtin_function_1 (decl2, std_node, true);
4500 pop_namespace ();
4503 return builtin_function_1 (decl, NULL_TREE, true);
4506 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4507 function. Not called directly. */
4509 static tree
4510 build_library_fn (tree name, enum tree_code operator_code, tree type,
4511 int ecf_flags)
4513 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4514 DECL_EXTERNAL (fn) = 1;
4515 TREE_PUBLIC (fn) = 1;
4516 DECL_ARTIFICIAL (fn) = 1;
4517 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4518 = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4519 SET_DECL_LANGUAGE (fn, lang_c);
4520 /* Runtime library routines are, by definition, available in an
4521 external shared object. */
4522 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4523 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4524 set_call_expr_flags (fn, ecf_flags);
4525 return fn;
4528 /* Returns the _DECL for a library function with C++ linkage. */
4530 static tree
4531 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4532 int ecf_flags)
4534 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4535 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4536 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4537 return fn;
4540 /* Like build_library_fn, but takes a C string instead of an
4541 IDENTIFIER_NODE. */
4543 tree
4544 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4546 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4549 /* Like build_cp_library_fn, but takes a C string instead of an
4550 IDENTIFIER_NODE. */
4552 tree
4553 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4555 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4556 ecf_flags);
4559 /* Like build_library_fn, but also pushes the function so that we will
4560 be able to find it via get_global_binding. Also, the function
4561 may throw exceptions listed in RAISES. */
4563 tree
4564 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4566 tree fn;
4568 if (raises)
4569 type = build_exception_variant (type, raises);
4571 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4572 pushdecl_top_level (fn);
4573 return fn;
4576 /* Like build_cp_library_fn, but also pushes the function so that it
4577 will be found by normal lookup. */
4579 static tree
4580 push_cp_library_fn (enum tree_code operator_code, tree type,
4581 int ecf_flags)
4583 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4584 operator_code, type, ecf_flags);
4585 pushdecl (fn);
4586 if (flag_tm)
4587 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4588 return fn;
4591 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4592 a FUNCTION_TYPE. */
4594 tree
4595 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4597 tree type = build_function_type (void_type_node, parmtypes);
4598 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4601 /* Like push_library_fn, but also note that this function throws
4602 and does not return. Used for __throw_foo and the like. */
4604 tree
4605 push_throw_library_fn (tree name, tree type)
4607 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4608 return fn;
4611 /* When we call finish_struct for an anonymous union, we create
4612 default copy constructors and such. But, an anonymous union
4613 shouldn't have such things; this function undoes the damage to the
4614 anonymous union type T.
4616 (The reason that we create the synthesized methods is that we don't
4617 distinguish `union { int i; }' from `typedef union { int i; } U'.
4618 The first is an anonymous union; the second is just an ordinary
4619 union type.) */
4621 void
4622 fixup_anonymous_aggr (tree t)
4624 /* Wipe out memory of synthesized methods. */
4625 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4626 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4627 TYPE_HAS_COPY_CTOR (t) = 0;
4628 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4629 TYPE_HAS_COPY_ASSIGN (t) = 0;
4630 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4632 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4633 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4634 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4635 *prev_p = DECL_CHAIN (probe);
4636 else
4637 prev_p = &DECL_CHAIN (probe);
4639 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4640 assignment operators (because they cannot have these methods themselves).
4641 For anonymous unions this is already checked because they are not allowed
4642 in any union, otherwise we have to check it. */
4643 if (TREE_CODE (t) != UNION_TYPE)
4645 tree field, type;
4647 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4648 if (TREE_CODE (field) == FIELD_DECL)
4650 type = TREE_TYPE (field);
4651 if (CLASS_TYPE_P (type))
4653 if (TYPE_NEEDS_CONSTRUCTING (type))
4654 error ("member %q+#D with constructor not allowed "
4655 "in anonymous aggregate", field);
4656 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4657 error ("member %q+#D with destructor not allowed "
4658 "in anonymous aggregate", field);
4659 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4660 error ("member %q+#D with copy assignment operator "
4661 "not allowed in anonymous aggregate", field);
4667 /* Warn for an attribute located at LOCATION that appertains to the
4668 class type CLASS_TYPE that has not been properly placed after its
4669 class-key, in it class-specifier. */
4671 void
4672 warn_misplaced_attr_for_class_type (source_location location,
4673 tree class_type)
4675 gcc_assert (OVERLOAD_TYPE_P (class_type));
4677 if (warning_at (location, OPT_Wattributes,
4678 "attribute ignored in declaration "
4679 "of %q#T", class_type))
4680 inform (location,
4681 "attribute for %q#T must follow the %qs keyword",
4682 class_type, class_key_or_enum_as_string (class_type));
4685 /* Make sure that a declaration with no declarator is well-formed, i.e.
4686 just declares a tagged type or anonymous union.
4688 Returns the type declared; or NULL_TREE if none. */
4690 tree
4691 check_tag_decl (cp_decl_specifier_seq *declspecs,
4692 bool explicit_type_instantiation_p)
4694 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4695 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4696 /* If a class, struct, or enum type is declared by the DECLSPECS
4697 (i.e, if a class-specifier, enum-specifier, or non-typename
4698 elaborated-type-specifier appears in the DECLSPECS),
4699 DECLARED_TYPE is set to the corresponding type. */
4700 tree declared_type = NULL_TREE;
4701 bool error_p = false;
4703 if (declspecs->multiple_types_p)
4704 error ("multiple types in one declaration");
4705 else if (declspecs->redefined_builtin_type)
4707 if (!in_system_header_at (input_location))
4708 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4709 "redeclaration of C++ built-in type %qT",
4710 declspecs->redefined_builtin_type);
4711 return NULL_TREE;
4714 if (declspecs->type
4715 && TYPE_P (declspecs->type)
4716 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4717 && MAYBE_CLASS_TYPE_P (declspecs->type))
4718 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4719 declared_type = declspecs->type;
4720 else if (declspecs->type == error_mark_node)
4721 error_p = true;
4722 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4723 permerror (input_location, "declaration does not declare anything");
4724 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4726 error_at (declspecs->locations[ds_type_spec],
4727 "%<auto%> can only be specified for variables "
4728 "or function declarations");
4729 return error_mark_node;
4731 /* Check for an anonymous union. */
4732 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4733 && TYPE_UNNAMED_P (declared_type))
4735 /* 7/3 In a simple-declaration, the optional init-declarator-list
4736 can be omitted only when declaring a class (clause 9) or
4737 enumeration (7.2), that is, when the decl-specifier-seq contains
4738 either a class-specifier, an elaborated-type-specifier with
4739 a class-key (9.1), or an enum-specifier. In these cases and
4740 whenever a class-specifier or enum-specifier is present in the
4741 decl-specifier-seq, the identifiers in these specifiers are among
4742 the names being declared by the declaration (as class-name,
4743 enum-names, or enumerators, depending on the syntax). In such
4744 cases, and except for the declaration of an unnamed bit-field (9.6),
4745 the decl-specifier-seq shall introduce one or more names into the
4746 program, or shall redeclare a name introduced by a previous
4747 declaration. [Example:
4748 enum { }; // ill-formed
4749 typedef class { }; // ill-formed
4750 --end example] */
4751 if (saw_typedef)
4753 error ("missing type-name in typedef-declaration");
4754 return NULL_TREE;
4756 /* Anonymous unions are objects, so they can have specifiers. */;
4757 SET_ANON_AGGR_TYPE_P (declared_type);
4759 if (TREE_CODE (declared_type) != UNION_TYPE
4760 && !in_system_header_at (input_location))
4761 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4764 else
4766 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4767 error_at (declspecs->locations[ds_inline],
4768 "%<inline%> can only be specified for functions");
4769 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4770 error_at (declspecs->locations[ds_virtual],
4771 "%<virtual%> can only be specified for functions");
4772 else if (saw_friend
4773 && (!current_class_type
4774 || current_scope () != current_class_type))
4775 error_at (declspecs->locations[ds_friend],
4776 "%<friend%> can only be specified inside a class");
4777 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4778 error_at (declspecs->locations[ds_explicit],
4779 "%<explicit%> can only be specified for constructors");
4780 else if (declspecs->storage_class)
4781 error_at (declspecs->locations[ds_storage_class],
4782 "a storage class can only be specified for objects "
4783 "and functions");
4784 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4785 error_at (declspecs->locations[ds_const],
4786 "%<const%> can only be specified for objects and "
4787 "functions");
4788 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4789 error_at (declspecs->locations[ds_volatile],
4790 "%<volatile%> can only be specified for objects and "
4791 "functions");
4792 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4793 error_at (declspecs->locations[ds_restrict],
4794 "%<__restrict%> can only be specified for objects and "
4795 "functions");
4796 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4797 error_at (declspecs->locations[ds_thread],
4798 "%<__thread%> can only be specified for objects "
4799 "and functions");
4800 else if (saw_typedef)
4801 warning_at (declspecs->locations[ds_typedef], 0,
4802 "%<typedef%> was ignored in this declaration");
4803 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4804 error_at (declspecs->locations[ds_constexpr],
4805 "%<constexpr%> cannot be used for type declarations");
4808 if (declspecs->attributes && warn_attributes && declared_type)
4810 location_t loc;
4811 if (!CLASS_TYPE_P (declared_type)
4812 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4813 /* For a non-template class, use the name location. */
4814 loc = location_of (declared_type);
4815 else
4816 /* For a template class (an explicit instantiation), use the
4817 current location. */
4818 loc = input_location;
4820 if (explicit_type_instantiation_p)
4821 /* [dcl.attr.grammar]/4:
4823 No attribute-specifier-seq shall appertain to an explicit
4824 instantiation. */
4826 if (warning_at (loc, OPT_Wattributes,
4827 "attribute ignored in explicit instantiation %q#T",
4828 declared_type))
4829 inform (loc,
4830 "no attribute can be applied to "
4831 "an explicit instantiation");
4833 else
4834 warn_misplaced_attr_for_class_type (loc, declared_type);
4837 return declared_type;
4840 /* Called when a declaration is seen that contains no names to declare.
4841 If its type is a reference to a structure, union or enum inherited
4842 from a containing scope, shadow that tag name for the current scope
4843 with a forward reference.
4844 If its type defines a new named structure or union
4845 or defines an enum, it is valid but we need not do anything here.
4846 Otherwise, it is an error.
4848 C++: may have to grok the declspecs to learn about static,
4849 complain for anonymous unions.
4851 Returns the TYPE declared -- or NULL_TREE if none. */
4853 tree
4854 shadow_tag (cp_decl_specifier_seq *declspecs)
4856 tree t = check_tag_decl (declspecs,
4857 /*explicit_type_instantiation_p=*/false);
4859 if (!t)
4860 return NULL_TREE;
4862 if (maybe_process_partial_specialization (t) == error_mark_node)
4863 return NULL_TREE;
4865 /* This is where the variables in an anonymous union are
4866 declared. An anonymous union declaration looks like:
4867 union { ... } ;
4868 because there is no declarator after the union, the parser
4869 sends that declaration here. */
4870 if (ANON_AGGR_TYPE_P (t))
4872 fixup_anonymous_aggr (t);
4874 if (TYPE_FIELDS (t))
4876 tree decl = grokdeclarator (/*declarator=*/NULL,
4877 declspecs, NORMAL, 0, NULL);
4878 finish_anon_union (decl);
4882 return t;
4885 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4887 tree
4888 groktypename (cp_decl_specifier_seq *type_specifiers,
4889 const cp_declarator *declarator,
4890 bool is_template_arg)
4892 tree attrs;
4893 tree type;
4894 enum decl_context context
4895 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4896 attrs = type_specifiers->attributes;
4897 type_specifiers->attributes = NULL_TREE;
4898 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4899 if (attrs && type != error_mark_node)
4901 if (CLASS_TYPE_P (type))
4902 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4903 "outside of definition", type);
4904 else if (MAYBE_CLASS_TYPE_P (type))
4905 /* A template type parameter or other dependent type. */
4906 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4907 "type %qT without an associated declaration", type);
4908 else
4909 cplus_decl_attributes (&type, attrs, 0);
4911 return type;
4914 /* Process a DECLARATOR for a function-scope variable declaration,
4915 namespace-scope variable declaration, or function declaration.
4916 (Function definitions go through start_function; class member
4917 declarations appearing in the body of the class go through
4918 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4919 If an error occurs, the error_mark_node is returned instead.
4921 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4922 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4923 for an explicitly defaulted function, or SD_DELETED for an explicitly
4924 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4925 implicitly initialized via a default constructor. ATTRIBUTES and
4926 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4928 The scope represented by the context of the returned DECL is pushed
4929 (if it is not the global namespace) and is assigned to
4930 *PUSHED_SCOPE_P. The caller is then responsible for calling
4931 pop_scope on *PUSHED_SCOPE_P if it is set. */
4933 tree
4934 start_decl (const cp_declarator *declarator,
4935 cp_decl_specifier_seq *declspecs,
4936 int initialized,
4937 tree attributes,
4938 tree prefix_attributes,
4939 tree *pushed_scope_p)
4941 tree decl;
4942 tree context;
4943 bool was_public;
4944 int flags;
4945 bool alias;
4947 *pushed_scope_p = NULL_TREE;
4949 /* An object declared as __attribute__((deprecated)) suppresses
4950 warnings of uses of other deprecated items. */
4951 if (lookup_attribute ("deprecated", attributes))
4952 deprecated_state = DEPRECATED_SUPPRESS;
4954 attributes = chainon (attributes, prefix_attributes);
4956 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4957 &attributes);
4959 deprecated_state = DEPRECATED_NORMAL;
4961 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4962 || decl == error_mark_node)
4963 return error_mark_node;
4965 context = CP_DECL_CONTEXT (decl);
4966 if (context != global_namespace)
4967 *pushed_scope_p = push_scope (context);
4969 /* Is it valid for this decl to have an initializer at all?
4970 If not, set INITIALIZED to zero, which will indirectly
4971 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4972 if (initialized
4973 && TREE_CODE (decl) == TYPE_DECL)
4975 error ("typedef %qD is initialized (use decltype instead)", decl);
4976 return error_mark_node;
4979 if (initialized)
4981 if (! toplevel_bindings_p ()
4982 && DECL_EXTERNAL (decl))
4983 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4984 decl);
4985 DECL_EXTERNAL (decl) = 0;
4986 if (toplevel_bindings_p ())
4987 TREE_STATIC (decl) = 1;
4989 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4991 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4992 record_key_method_defined (decl);
4994 /* If this is a typedef that names the class for linkage purposes
4995 (7.1.3p8), apply any attributes directly to the type. */
4996 if (TREE_CODE (decl) == TYPE_DECL
4997 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4998 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4999 flags = ATTR_FLAG_TYPE_IN_PLACE;
5000 else
5001 flags = 0;
5003 /* Set attributes here so if duplicate decl, will have proper attributes. */
5004 cplus_decl_attributes (&decl, attributes, flags);
5006 /* Dllimported symbols cannot be defined. Static data members (which
5007 can be initialized in-class and dllimported) go through grokfield,
5008 not here, so we don't need to exclude those decls when checking for
5009 a definition. */
5010 if (initialized && DECL_DLLIMPORT_P (decl))
5012 error ("definition of %q#D is marked %<dllimport%>", decl);
5013 DECL_DLLIMPORT_P (decl) = 0;
5016 /* If #pragma weak was used, mark the decl weak now. */
5017 if (!processing_template_decl)
5018 maybe_apply_pragma_weak (decl);
5020 if (TREE_CODE (decl) == FUNCTION_DECL
5021 && DECL_DECLARED_INLINE_P (decl)
5022 && DECL_UNINLINABLE (decl)
5023 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5024 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5025 "inline function %qD given attribute noinline", decl);
5027 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5029 bool this_tmpl = (processing_template_decl
5030 > template_class_depth (context));
5031 if (VAR_P (decl))
5033 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5034 if (field == NULL_TREE
5035 || !(VAR_P (field) || variable_template_p (field)))
5036 error ("%q+#D is not a static data member of %q#T", decl, context);
5037 else if (variable_template_p (field) && !this_tmpl)
5039 if (DECL_LANG_SPECIFIC (decl)
5040 && DECL_TEMPLATE_SPECIALIZATION (decl))
5041 /* OK, specialization was already checked. */;
5042 else
5044 error_at (DECL_SOURCE_LOCATION (decl),
5045 "non-member-template declaration of %qD", decl);
5046 inform (DECL_SOURCE_LOCATION (field), "does not match "
5047 "member template declaration here");
5048 return error_mark_node;
5051 else
5053 if (variable_template_p (field))
5054 field = DECL_TEMPLATE_RESULT (field);
5056 if (DECL_CONTEXT (field) != context)
5058 if (!same_type_p (DECL_CONTEXT (field), context))
5059 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5060 "to be defined as %<%T::%D%>",
5061 DECL_CONTEXT (field), DECL_NAME (decl),
5062 context, DECL_NAME (decl));
5063 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5065 /* Static data member are tricky; an in-class initialization
5066 still doesn't provide a definition, so the in-class
5067 declaration will have DECL_EXTERNAL set, but will have an
5068 initialization. Thus, duplicate_decls won't warn
5069 about this situation, and so we check here. */
5070 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5071 error ("duplicate initialization of %qD", decl);
5072 field = duplicate_decls (decl, field,
5073 /*newdecl_is_friend=*/false);
5074 if (field == error_mark_node)
5075 return error_mark_node;
5076 else if (field)
5077 decl = field;
5080 else
5082 tree field = check_classfn (context, decl,
5083 this_tmpl
5084 ? current_template_parms
5085 : NULL_TREE);
5086 if (field && field != error_mark_node
5087 && duplicate_decls (decl, field,
5088 /*newdecl_is_friend=*/false))
5089 decl = field;
5092 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5093 DECL_IN_AGGR_P (decl) = 0;
5094 /* Do not mark DECL as an explicit specialization if it was not
5095 already marked as an instantiation; a declaration should
5096 never be marked as a specialization unless we know what
5097 template is being specialized. */
5098 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5100 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5101 if (TREE_CODE (decl) == FUNCTION_DECL)
5102 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5103 && DECL_DECLARED_INLINE_P (decl));
5104 else
5105 DECL_COMDAT (decl) = false;
5107 /* [temp.expl.spec] An explicit specialization of a static data
5108 member of a template is a definition if the declaration
5109 includes an initializer; otherwise, it is a declaration.
5111 We check for processing_specialization so this only applies
5112 to the new specialization syntax. */
5113 if (!initialized && processing_specialization)
5114 DECL_EXTERNAL (decl) = 1;
5117 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5118 /* Aliases are definitions. */
5119 && !alias)
5120 permerror (input_location, "declaration of %q#D outside of class is not definition",
5121 decl);
5124 was_public = TREE_PUBLIC (decl);
5126 /* Enter this declaration into the symbol table. Don't push the plain
5127 VAR_DECL for a variable template. */
5128 if (!template_parm_scope_p ()
5129 || !VAR_P (decl))
5130 decl = maybe_push_decl (decl);
5132 if (processing_template_decl)
5133 decl = push_template_decl (decl);
5134 if (decl == error_mark_node)
5135 return error_mark_node;
5137 if (VAR_P (decl)
5138 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5139 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5141 /* This is a const variable with implicit 'static'. Set
5142 DECL_THIS_STATIC so we can tell it from variables that are
5143 !TREE_PUBLIC because of the anonymous namespace. */
5144 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5145 DECL_THIS_STATIC (decl) = 1;
5148 if (current_function_decl && VAR_P (decl)
5149 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5151 bool ok = false;
5152 if (CP_DECL_THREAD_LOCAL_P (decl))
5153 error ("%qD declared %<thread_local%> in %<constexpr%> function",
5154 decl);
5155 else if (TREE_STATIC (decl))
5156 error ("%qD declared %<static%> in %<constexpr%> function", decl);
5157 else
5158 ok = true;
5159 if (!ok)
5160 cp_function_chain->invalid_constexpr = true;
5163 if (!processing_template_decl && VAR_P (decl))
5164 start_decl_1 (decl, initialized);
5166 return decl;
5169 /* Process the declaration of a variable DECL. INITIALIZED is true
5170 iff DECL is explicitly initialized. (INITIALIZED is false if the
5171 variable is initialized via an implicitly-called constructor.)
5172 This function must be called for ordinary variables (including, for
5173 example, implicit instantiations of templates), but must not be
5174 called for template declarations. */
5176 void
5177 start_decl_1 (tree decl, bool initialized)
5179 tree type;
5180 bool complete_p;
5181 bool aggregate_definition_p;
5183 gcc_assert (!processing_template_decl);
5185 if (error_operand_p (decl))
5186 return;
5188 gcc_assert (VAR_P (decl));
5190 type = TREE_TYPE (decl);
5191 complete_p = COMPLETE_TYPE_P (type);
5192 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5194 /* If an explicit initializer is present, or if this is a definition
5195 of an aggregate, then we need a complete type at this point.
5196 (Scalars are always complete types, so there is nothing to
5197 check.) This code just sets COMPLETE_P; errors (if necessary)
5198 are issued below. */
5199 if ((initialized || aggregate_definition_p)
5200 && !complete_p
5201 && COMPLETE_TYPE_P (complete_type (type)))
5203 complete_p = true;
5204 /* We will not yet have set TREE_READONLY on DECL if the type
5205 was "const", but incomplete, before this point. But, now, we
5206 have a complete type, so we can try again. */
5207 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5210 if (initialized)
5211 /* Is it valid for this decl to have an initializer at all? */
5213 /* Don't allow initializations for incomplete types except for
5214 arrays which might be completed by the initialization. */
5215 if (complete_p)
5216 ; /* A complete type is ok. */
5217 else if (type_uses_auto (type))
5218 ; /* An auto type is ok. */
5219 else if (TREE_CODE (type) != ARRAY_TYPE)
5221 error ("variable %q#D has initializer but incomplete type", decl);
5222 type = TREE_TYPE (decl) = error_mark_node;
5224 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5226 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5227 error ("elements of array %q#D have incomplete type", decl);
5228 /* else we already gave an error in start_decl. */
5231 else if (aggregate_definition_p && !complete_p)
5233 if (type_uses_auto (type))
5234 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5235 else
5237 error ("aggregate %q#D has incomplete type and cannot be defined",
5238 decl);
5239 /* Change the type so that assemble_variable will give
5240 DECL an rtl we can live with: (mem (const_int 0)). */
5241 type = TREE_TYPE (decl) = error_mark_node;
5245 /* Create a new scope to hold this declaration if necessary.
5246 Whether or not a new scope is necessary cannot be determined
5247 until after the type has been completed; if the type is a
5248 specialization of a class template it is not until after
5249 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5250 will be set correctly. */
5251 maybe_push_cleanup_level (type);
5254 /* Handle initialization of references. DECL, TYPE, and INIT have the
5255 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5256 but will be set to a new CLEANUP_STMT if a temporary is created
5257 that must be destroyed subsequently.
5259 Returns an initializer expression to use to initialize DECL, or
5260 NULL if the initialization can be performed statically.
5262 Quotes on semantics can be found in ARM 8.4.3. */
5264 static tree
5265 grok_reference_init (tree decl, tree type, tree init, int flags)
5267 if (init == NULL_TREE)
5269 if ((DECL_LANG_SPECIFIC (decl) == 0
5270 || DECL_IN_AGGR_P (decl) == 0)
5271 && ! DECL_THIS_EXTERN (decl))
5272 error ("%qD declared as reference but not initialized", decl);
5273 return NULL_TREE;
5276 if (TREE_CODE (init) == TREE_LIST)
5277 init = build_x_compound_expr_from_list (init, ELK_INIT,
5278 tf_warning_or_error);
5280 tree ttype = TREE_TYPE (type);
5281 if (TREE_CODE (ttype) != ARRAY_TYPE
5282 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5283 /* Note: default conversion is only called in very special cases. */
5284 init = decay_conversion (init, tf_warning_or_error);
5286 /* check_initializer handles this for non-reference variables, but for
5287 references we need to do it here or the initializer will get the
5288 incomplete array type and confuse later calls to
5289 cp_complete_array_type. */
5290 if (TREE_CODE (ttype) == ARRAY_TYPE
5291 && TYPE_DOMAIN (ttype) == NULL_TREE
5292 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5293 || TREE_CODE (init) == STRING_CST))
5295 cp_complete_array_type (&ttype, init, false);
5296 if (ttype != TREE_TYPE (type))
5297 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5300 /* Convert INIT to the reference type TYPE. This may involve the
5301 creation of a temporary, whose lifetime must be the same as that
5302 of the reference. If so, a DECL_EXPR for the temporary will be
5303 added just after the DECL_EXPR for DECL. That's why we don't set
5304 DECL_INITIAL for local references (instead assigning to them
5305 explicitly); we need to allow the temporary to be initialized
5306 first. */
5307 return initialize_reference (type, init, flags,
5308 tf_warning_or_error);
5311 /* Designated initializers in arrays are not supported in GNU C++.
5312 The parser cannot detect this error since it does not know whether
5313 a given brace-enclosed initializer is for a class type or for an
5314 array. This function checks that CE does not use a designated
5315 initializer. If it does, an error is issued. Returns true if CE
5316 is valid, i.e., does not have a designated initializer. */
5318 bool
5319 check_array_designated_initializer (constructor_elt *ce,
5320 unsigned HOST_WIDE_INT index)
5322 /* Designated initializers for array elements are not supported. */
5323 if (ce->index)
5325 /* The parser only allows identifiers as designated
5326 initializers. */
5327 if (ce->index == error_mark_node)
5329 error ("name used in a GNU-style designated "
5330 "initializer for an array");
5331 return false;
5333 else if (identifier_p (ce->index))
5335 error ("name %qD used in a GNU-style designated "
5336 "initializer for an array", ce->index);
5337 return false;
5340 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5341 ce->index, true);
5342 if (ce_index
5343 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5344 && (TREE_CODE (ce_index = maybe_constant_value (ce_index))
5345 == INTEGER_CST))
5347 /* A C99 designator is OK if it matches the current index. */
5348 if (wi::to_wide (ce_index) == index)
5349 return true;
5350 else
5351 sorry ("non-trivial designated initializers not supported");
5353 else
5354 error ("C99 designator %qE is not an integral constant-expression",
5355 ce->index);
5357 return false;
5360 return true;
5363 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5364 array until we finish parsing the initializer. If that's the
5365 situation we're in, update DECL accordingly. */
5367 static void
5368 maybe_deduce_size_from_array_init (tree decl, tree init)
5370 tree type = TREE_TYPE (decl);
5372 if (TREE_CODE (type) == ARRAY_TYPE
5373 && TYPE_DOMAIN (type) == NULL_TREE
5374 && TREE_CODE (decl) != TYPE_DECL)
5376 /* do_default is really a C-ism to deal with tentative definitions.
5377 But let's leave it here to ease the eventual merge. */
5378 int do_default = !DECL_EXTERNAL (decl);
5379 tree initializer = init ? init : DECL_INITIAL (decl);
5380 int failure = 0;
5382 /* Check that there are no designated initializers in INIT, as
5383 those are not supported in GNU C++, and as the middle-end
5384 will crash if presented with a non-numeric designated
5385 initializer. */
5386 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5388 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5389 constructor_elt *ce;
5390 HOST_WIDE_INT i;
5391 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5392 if (!check_array_designated_initializer (ce, i))
5393 failure = 1;
5396 if (!failure)
5398 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5399 do_default);
5400 if (failure == 1)
5402 error_at (EXPR_LOC_OR_LOC (initializer,
5403 DECL_SOURCE_LOCATION (decl)),
5404 "initializer fails to determine size of %qD", decl);
5406 else if (failure == 2)
5408 if (do_default)
5410 error_at (DECL_SOURCE_LOCATION (decl),
5411 "array size missing in %qD", decl);
5413 /* If a `static' var's size isn't known, make it extern as
5414 well as static, so it does not get allocated. If it's not
5415 `static', then don't mark it extern; finish_incomplete_decl
5416 will give it a default size and it will get allocated. */
5417 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5418 DECL_EXTERNAL (decl) = 1;
5420 else if (failure == 3)
5422 error_at (DECL_SOURCE_LOCATION (decl),
5423 "zero-size array %qD", decl);
5427 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5429 relayout_decl (decl);
5433 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5434 any appropriate error messages regarding the layout. */
5436 static void
5437 layout_var_decl (tree decl)
5439 tree type;
5441 type = TREE_TYPE (decl);
5442 if (type == error_mark_node)
5443 return;
5445 /* If we haven't already laid out this declaration, do so now.
5446 Note that we must not call complete type for an external object
5447 because it's type might involve templates that we are not
5448 supposed to instantiate yet. (And it's perfectly valid to say
5449 `extern X x' for some incomplete type `X'.) */
5450 if (!DECL_EXTERNAL (decl))
5451 complete_type (type);
5452 if (!DECL_SIZE (decl)
5453 && TREE_TYPE (decl) != error_mark_node
5454 && complete_or_array_type_p (type))
5455 layout_decl (decl, 0);
5457 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5459 /* An automatic variable with an incomplete type: that is an error.
5460 Don't talk about array types here, since we took care of that
5461 message in grokdeclarator. */
5462 error_at (DECL_SOURCE_LOCATION (decl),
5463 "storage size of %qD isn%'t known", decl);
5464 TREE_TYPE (decl) = error_mark_node;
5466 #if 0
5467 /* Keep this code around in case we later want to control debug info
5468 based on whether a type is "used". (jason 1999-11-11) */
5470 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5471 /* Let debugger know it should output info for this type. */
5472 note_debug_info_needed (ttype);
5474 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5475 note_debug_info_needed (DECL_CONTEXT (decl));
5476 #endif
5478 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5479 && DECL_SIZE (decl) != NULL_TREE
5480 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5482 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5483 constant_expression_warning (DECL_SIZE (decl));
5484 else
5486 error_at (DECL_SOURCE_LOCATION (decl),
5487 "storage size of %qD isn%'t constant", decl);
5488 TREE_TYPE (decl) = error_mark_node;
5493 /* If a local static variable is declared in an inline function, or if
5494 we have a weak definition, we must endeavor to create only one
5495 instance of the variable at link-time. */
5497 void
5498 maybe_commonize_var (tree decl)
5500 /* Static data in a function with comdat linkage also has comdat
5501 linkage. */
5502 if ((TREE_STATIC (decl)
5503 /* Don't mess with __FUNCTION__. */
5504 && ! DECL_ARTIFICIAL (decl)
5505 && DECL_FUNCTION_SCOPE_P (decl)
5506 && vague_linkage_p (DECL_CONTEXT (decl)))
5507 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5509 if (flag_weak)
5511 /* With weak symbols, we simply make the variable COMDAT;
5512 that will cause copies in multiple translations units to
5513 be merged. */
5514 comdat_linkage (decl);
5516 else
5518 if (DECL_INITIAL (decl) == NULL_TREE
5519 || DECL_INITIAL (decl) == error_mark_node)
5521 /* Without weak symbols, we can use COMMON to merge
5522 uninitialized variables. */
5523 TREE_PUBLIC (decl) = 1;
5524 DECL_COMMON (decl) = 1;
5526 else
5528 /* While for initialized variables, we must use internal
5529 linkage -- which means that multiple copies will not
5530 be merged. */
5531 TREE_PUBLIC (decl) = 0;
5532 DECL_COMMON (decl) = 0;
5533 const char *msg;
5534 if (DECL_INLINE_VAR_P (decl))
5535 msg = G_("sorry: semantics of inline variable "
5536 "%q#D are wrong (you%'ll wind up with "
5537 "multiple copies)");
5538 else
5539 msg = G_("sorry: semantics of inline function "
5540 "static data %q#D are wrong (you%'ll wind "
5541 "up with multiple copies)");
5542 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5543 msg, decl))
5544 inform (DECL_SOURCE_LOCATION (decl),
5545 "you can work around this by removing the initializer");
5551 /* Issue an error message if DECL is an uninitialized const variable.
5552 CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr
5553 context from potential_constant_expression. Returns true if all is well,
5554 false otherwise. */
5556 bool
5557 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p,
5558 tsubst_flags_t complain)
5560 tree type = strip_array_types (TREE_TYPE (decl));
5562 /* ``Unless explicitly declared extern, a const object does not have
5563 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5564 7.1.6 */
5565 if (VAR_P (decl)
5566 && TREE_CODE (type) != REFERENCE_TYPE
5567 && (constexpr_context_p
5568 || CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5569 && !DECL_NONTRIVIALLY_INITIALIZED_P (decl))
5571 tree field = default_init_uninitialized_part (type);
5572 if (!field)
5573 return true;
5575 if (!constexpr_context_p)
5577 if (CP_TYPE_CONST_P (type))
5579 if (complain & tf_error)
5580 permerror (DECL_SOURCE_LOCATION (decl),
5581 "uninitialized const %qD", decl);
5583 else
5585 if (!is_instantiation_of_constexpr (current_function_decl)
5586 && (complain & tf_error))
5587 error_at (DECL_SOURCE_LOCATION (decl),
5588 "uninitialized variable %qD in %<constexpr%> "
5589 "function", decl);
5590 cp_function_chain->invalid_constexpr = true;
5593 else if (complain & tf_error)
5594 error_at (DECL_SOURCE_LOCATION (decl),
5595 "uninitialized variable %qD in %<constexpr%> context",
5596 decl);
5598 if (CLASS_TYPE_P (type) && (complain & tf_error))
5600 tree defaulted_ctor;
5602 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5603 "%q#T has no user-provided default constructor", type);
5604 defaulted_ctor = in_class_defaulted_default_constructor (type);
5605 if (defaulted_ctor)
5606 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5607 "constructor is not user-provided because it is "
5608 "explicitly defaulted in the class body");
5609 inform (DECL_SOURCE_LOCATION (field),
5610 "and the implicitly-defined constructor does not "
5611 "initialize %q#D", field);
5614 return false;
5617 return true;
5620 /* Structure holding the current initializer being processed by reshape_init.
5621 CUR is a pointer to the current element being processed, END is a pointer
5622 after the last element present in the initializer. */
5623 struct reshape_iter
5625 constructor_elt *cur;
5626 constructor_elt *end;
5629 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5631 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5632 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5633 initialized. If there are no more such fields, the return value
5634 will be NULL. */
5636 tree
5637 next_initializable_field (tree field)
5639 while (field
5640 && (TREE_CODE (field) != FIELD_DECL
5641 || DECL_UNNAMED_BIT_FIELD (field)
5642 || (DECL_ARTIFICIAL (field)
5643 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5644 field = DECL_CHAIN (field);
5646 return field;
5649 /* Return true for [dcl.init.list] direct-list-initialization from
5650 single element of enumeration with a fixed underlying type. */
5652 bool
5653 is_direct_enum_init (tree type, tree init)
5655 if (cxx_dialect >= cxx17
5656 && TREE_CODE (type) == ENUMERAL_TYPE
5657 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5658 && TREE_CODE (init) == CONSTRUCTOR
5659 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5660 && CONSTRUCTOR_NELTS (init) == 1)
5661 return true;
5662 return false;
5665 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5666 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5667 INTEGER_CST representing the size of the array minus one (the maximum index),
5668 or NULL_TREE if the array was declared without specifying the size. D is
5669 the iterator within the constructor. */
5671 static tree
5672 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5673 tsubst_flags_t complain)
5675 tree new_init;
5676 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5677 unsigned HOST_WIDE_INT max_index_cst = 0;
5678 unsigned HOST_WIDE_INT index;
5680 /* The initializer for an array is always a CONSTRUCTOR. */
5681 new_init = build_constructor (init_list_type_node, NULL);
5683 if (sized_array_p)
5685 /* Minus 1 is used for zero sized arrays. */
5686 if (integer_all_onesp (max_index))
5687 return new_init;
5689 if (tree_fits_uhwi_p (max_index))
5690 max_index_cst = tree_to_uhwi (max_index);
5691 /* sizetype is sign extended, not zero extended. */
5692 else
5693 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5696 /* Loop until there are no more initializers. */
5697 for (index = 0;
5698 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5699 ++index)
5701 tree elt_init;
5702 constructor_elt *old_cur = d->cur;
5704 check_array_designated_initializer (d->cur, index);
5705 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5706 complain);
5707 if (elt_init == error_mark_node)
5708 return error_mark_node;
5709 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5710 size_int (index), elt_init);
5711 if (!TREE_CONSTANT (elt_init))
5712 TREE_CONSTANT (new_init) = false;
5714 /* This can happen with an invalid initializer (c++/54501). */
5715 if (d->cur == old_cur && !sized_array_p)
5716 break;
5719 return new_init;
5722 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5723 Parameters are the same of reshape_init_r. */
5725 static tree
5726 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5728 tree max_index = NULL_TREE;
5730 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5732 if (TYPE_DOMAIN (type))
5733 max_index = array_type_nelts (type);
5735 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5738 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5739 Parameters are the same of reshape_init_r. */
5741 static tree
5742 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5744 tree max_index = NULL_TREE;
5746 gcc_assert (VECTOR_TYPE_P (type));
5748 if (COMPOUND_LITERAL_P (d->cur->value))
5750 tree value = d->cur->value;
5751 if (!same_type_p (TREE_TYPE (value), type))
5753 if (complain & tf_error)
5754 error ("invalid type %qT as initializer for a vector of type %qT",
5755 TREE_TYPE (d->cur->value), type);
5756 value = error_mark_node;
5758 ++d->cur;
5759 return value;
5762 /* For a vector, we initialize it as an array of the appropriate size. */
5763 if (VECTOR_TYPE_P (type))
5764 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5766 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5769 /* Subroutine of reshape_init_r, processes the initializers for classes
5770 or union. Parameters are the same of reshape_init_r. */
5772 static tree
5773 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5774 tsubst_flags_t complain)
5776 tree field;
5777 tree new_init;
5779 gcc_assert (CLASS_TYPE_P (type));
5781 /* The initializer for a class is always a CONSTRUCTOR. */
5782 new_init = build_constructor (init_list_type_node, NULL);
5783 field = next_initializable_field (TYPE_FIELDS (type));
5785 if (!field)
5787 /* [dcl.init.aggr]
5789 An initializer for an aggregate member that is an
5790 empty class shall have the form of an empty
5791 initializer-list {}. */
5792 if (!first_initializer_p)
5794 if (complain & tf_error)
5795 error ("initializer for %qT must be brace-enclosed", type);
5796 return error_mark_node;
5798 return new_init;
5801 /* Loop through the initializable fields, gathering initializers. */
5802 while (d->cur != d->end)
5804 tree field_init;
5805 constructor_elt *old_cur = d->cur;
5807 /* Handle designated initializers, as an extension. */
5808 if (d->cur->index)
5810 if (d->cur->index == error_mark_node)
5811 return error_mark_node;
5813 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5814 /* We already reshaped this. */
5815 gcc_assert (d->cur->index == field);
5816 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5817 field = get_class_binding (type, d->cur->index, false);
5818 else
5820 if (complain & tf_error)
5821 error ("%<[%E] =%> used in a GNU-style designated initializer"
5822 " for class %qT", d->cur->index, type);
5823 return error_mark_node;
5826 if (!field || TREE_CODE (field) != FIELD_DECL)
5828 if (complain & tf_error)
5829 error ("%qT has no non-static data member named %qD", type,
5830 d->cur->index);
5831 return error_mark_node;
5835 /* If we processed all the member of the class, we are done. */
5836 if (!field)
5837 break;
5839 field_init = reshape_init_r (TREE_TYPE (field), d,
5840 /*first_initializer_p=*/false, complain);
5841 if (field_init == error_mark_node)
5842 return error_mark_node;
5844 if (d->cur == old_cur && d->cur->index)
5846 /* This can happen with an invalid initializer for a flexible
5847 array member (c++/54441). */
5848 if (complain & tf_error)
5849 error ("invalid initializer for %q#D", field);
5850 return error_mark_node;
5853 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5855 /* [dcl.init.aggr]
5857 When a union is initialized with a brace-enclosed
5858 initializer, the braces shall only contain an
5859 initializer for the first member of the union. */
5860 if (TREE_CODE (type) == UNION_TYPE)
5861 break;
5863 field = next_initializable_field (DECL_CHAIN (field));
5866 return new_init;
5869 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5870 designators are not valid; either complain or return true to indicate
5871 that reshape_init_r should return error_mark_node. */
5873 static bool
5874 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5876 if (d->cur->index)
5878 if (complain & tf_error)
5879 error ("C99 designator %qE outside aggregate initializer",
5880 d->cur->index);
5881 else
5882 return true;
5884 return false;
5887 /* Subroutine of reshape_init, which processes a single initializer (part of
5888 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5889 iterator within the CONSTRUCTOR which points to the initializer to process.
5890 FIRST_INITIALIZER_P is true if this is the first initializer of the
5891 outermost CONSTRUCTOR node. */
5893 static tree
5894 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5895 tsubst_flags_t complain)
5897 tree init = d->cur->value;
5899 if (error_operand_p (init))
5900 return error_mark_node;
5902 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5903 && has_designator_problem (d, complain))
5904 return error_mark_node;
5906 if (TREE_CODE (type) == COMPLEX_TYPE)
5908 /* A complex type can be initialized from one or two initializers,
5909 but braces are not elided. */
5910 d->cur++;
5911 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5913 if (CONSTRUCTOR_NELTS (init) > 2)
5915 if (complain & tf_error)
5916 error ("too many initializers for %qT", type);
5917 else
5918 return error_mark_node;
5921 else if (first_initializer_p && d->cur != d->end)
5923 vec<constructor_elt, va_gc> *v = 0;
5924 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5925 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5926 if (has_designator_problem (d, complain))
5927 return error_mark_node;
5928 d->cur++;
5929 init = build_constructor (init_list_type_node, v);
5931 return init;
5934 /* A non-aggregate type is always initialized with a single
5935 initializer. */
5936 if (!CP_AGGREGATE_TYPE_P (type))
5938 /* It is invalid to initialize a non-aggregate type with a
5939 brace-enclosed initializer before C++0x.
5940 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5941 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5942 a CONSTRUCTOR (with a record type). */
5943 if (TREE_CODE (init) == CONSTRUCTOR
5944 /* Don't complain about a capture-init. */
5945 && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5946 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5948 if (SCALAR_TYPE_P (type))
5950 if (cxx_dialect < cxx11
5951 /* Isn't value-initialization. */
5952 || CONSTRUCTOR_NELTS (init) > 0)
5954 if (complain & tf_error)
5955 error ("braces around scalar initializer for type %qT",
5956 type);
5957 init = error_mark_node;
5960 else
5961 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5964 d->cur++;
5965 return init;
5968 /* "If T is a class type and the initializer list has a single element of
5969 type cv U, where U is T or a class derived from T, the object is
5970 initialized from that element." Even if T is an aggregate. */
5971 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5972 && first_initializer_p
5973 && d->end - d->cur == 1
5974 && reference_related_p (type, TREE_TYPE (init)))
5976 d->cur++;
5977 return init;
5980 /* [dcl.init.aggr]
5982 All implicit type conversions (clause _conv_) are considered when
5983 initializing the aggregate member with an initializer from an
5984 initializer-list. If the initializer can initialize a member,
5985 the member is initialized. Otherwise, if the member is itself a
5986 non-empty subaggregate, brace elision is assumed and the
5987 initializer is considered for the initialization of the first
5988 member of the subaggregate. */
5989 if (TREE_CODE (init) != CONSTRUCTOR
5990 /* But don't try this for the first initializer, since that would be
5991 looking through the outermost braces; A a2 = { a1 }; is not a
5992 valid aggregate initialization. */
5993 && !first_initializer_p
5994 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5995 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5996 complain)))
5998 d->cur++;
5999 return init;
6002 /* [dcl.init.string]
6004 A char array (whether plain char, signed char, or unsigned char)
6005 can be initialized by a string-literal (optionally enclosed in
6006 braces); a wchar_t array can be initialized by a wide
6007 string-literal (optionally enclosed in braces). */
6008 if (TREE_CODE (type) == ARRAY_TYPE
6009 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
6011 tree str_init = init;
6013 /* Strip one level of braces if and only if they enclose a single
6014 element (as allowed by [dcl.init.string]). */
6015 if (!first_initializer_p
6016 && TREE_CODE (str_init) == CONSTRUCTOR
6017 && CONSTRUCTOR_NELTS (str_init) == 1)
6019 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
6022 /* If it's a string literal, then it's the initializer for the array
6023 as a whole. Otherwise, continue with normal initialization for
6024 array types (one value per array element). */
6025 if (TREE_CODE (str_init) == STRING_CST)
6027 if (has_designator_problem (d, complain))
6028 return error_mark_node;
6029 d->cur++;
6030 return str_init;
6034 /* The following cases are about aggregates. If we are not within a full
6035 initializer already, and there is not a CONSTRUCTOR, it means that there
6036 is a missing set of braces (that is, we are processing the case for
6037 which reshape_init exists). */
6038 if (!first_initializer_p)
6040 if (TREE_CODE (init) == CONSTRUCTOR)
6042 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
6043 /* There is no need to reshape pointer-to-member function
6044 initializers, as they are always constructed correctly
6045 by the front end. */
6047 else if (COMPOUND_LITERAL_P (init))
6048 /* For a nested compound literal, there is no need to reshape since
6049 brace elision is not allowed. Even if we decided to allow it,
6050 we should add a call to reshape_init in finish_compound_literal,
6051 before calling digest_init, so changing this code would still
6052 not be necessary. */
6053 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
6054 else
6056 ++d->cur;
6057 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6058 return reshape_init (type, init, complain);
6062 if (complain & tf_warning)
6063 warning (OPT_Wmissing_braces,
6064 "missing braces around initializer for %qT",
6065 type);
6068 /* Dispatch to specialized routines. */
6069 if (CLASS_TYPE_P (type))
6070 return reshape_init_class (type, d, first_initializer_p, complain);
6071 else if (TREE_CODE (type) == ARRAY_TYPE)
6072 return reshape_init_array (type, d, complain);
6073 else if (VECTOR_TYPE_P (type))
6074 return reshape_init_vector (type, d, complain);
6075 else
6076 gcc_unreachable();
6079 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6080 brace-enclosed aggregate initializer.
6082 INIT is the CONSTRUCTOR containing the list of initializers describing
6083 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6084 It may not presently match the shape of the TYPE; for example:
6086 struct S { int a; int b; };
6087 struct S a[] = { 1, 2, 3, 4 };
6089 Here INIT will hold a vector of four elements, rather than a
6090 vector of two elements, each itself a vector of two elements. This
6091 routine transforms INIT from the former form into the latter. The
6092 revised CONSTRUCTOR node is returned. */
6094 tree
6095 reshape_init (tree type, tree init, tsubst_flags_t complain)
6097 vec<constructor_elt, va_gc> *v;
6098 reshape_iter d;
6099 tree new_init;
6101 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6103 v = CONSTRUCTOR_ELTS (init);
6105 /* An empty constructor does not need reshaping, and it is always a valid
6106 initializer. */
6107 if (vec_safe_is_empty (v))
6108 return init;
6110 /* Handle [dcl.init.list] direct-list-initialization from
6111 single element of enumeration with a fixed underlying type. */
6112 if (is_direct_enum_init (type, init))
6114 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6115 type = cv_unqualified (type);
6116 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6118 warning_sentinel w (warn_useless_cast);
6119 warning_sentinel w2 (warn_ignored_qualifiers);
6120 return cp_build_c_cast (type, elt, tf_warning_or_error);
6122 else
6123 return error_mark_node;
6126 /* Recurse on this CONSTRUCTOR. */
6127 d.cur = &(*v)[0];
6128 d.end = d.cur + v->length ();
6130 new_init = reshape_init_r (type, &d, true, complain);
6131 if (new_init == error_mark_node)
6132 return error_mark_node;
6134 /* Make sure all the element of the constructor were used. Otherwise,
6135 issue an error about exceeding initializers. */
6136 if (d.cur != d.end)
6138 if (complain & tf_error)
6139 error ("too many initializers for %qT", type);
6140 return error_mark_node;
6143 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6144 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6145 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6147 return new_init;
6150 /* Verify array initializer. Returns true if errors have been reported. */
6152 bool
6153 check_array_initializer (tree decl, tree type, tree init)
6155 tree element_type = TREE_TYPE (type);
6157 /* The array type itself need not be complete, because the
6158 initializer may tell us how many elements are in the array.
6159 But, the elements of the array must be complete. */
6160 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6162 if (decl)
6163 error_at (DECL_SOURCE_LOCATION (decl),
6164 "elements of array %q#D have incomplete type", decl);
6165 else
6166 error ("elements of array %q#T have incomplete type", type);
6167 return true;
6169 /* A compound literal can't have variable size. */
6170 if (init && !decl
6171 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6172 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6174 error ("variable-sized compound literal");
6175 return true;
6177 return false;
6180 /* Subroutine of check_initializer; args are passed down from that function.
6181 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6183 static tree
6184 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6187 gcc_assert (stmts_are_full_exprs_p ());
6188 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6191 /* Verify INIT (the initializer for DECL), and record the
6192 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6193 grok_reference_init.
6195 If the return value is non-NULL, it is an expression that must be
6196 evaluated dynamically to initialize DECL. */
6198 static tree
6199 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6201 tree type = TREE_TYPE (decl);
6202 tree init_code = NULL;
6203 tree core_type;
6205 /* Things that are going to be initialized need to have complete
6206 type. */
6207 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6209 if (DECL_HAS_VALUE_EXPR_P (decl))
6211 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6212 it doesn't have storage to be initialized. */
6213 gcc_assert (init == NULL_TREE);
6214 return NULL_TREE;
6217 if (type == error_mark_node)
6218 /* We will have already complained. */
6219 return NULL_TREE;
6221 if (TREE_CODE (type) == ARRAY_TYPE)
6223 if (check_array_initializer (decl, type, init))
6224 return NULL_TREE;
6226 else if (!COMPLETE_TYPE_P (type))
6228 error_at (DECL_SOURCE_LOCATION (decl),
6229 "%q#D has incomplete type", decl);
6230 TREE_TYPE (decl) = error_mark_node;
6231 return NULL_TREE;
6233 else
6234 /* There is no way to make a variable-sized class type in GNU C++. */
6235 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6237 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6239 int init_len = CONSTRUCTOR_NELTS (init);
6240 if (SCALAR_TYPE_P (type))
6242 if (init_len == 0)
6244 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6245 init = build_zero_init (type, NULL_TREE, false);
6247 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6249 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6250 "scalar object %qD requires one element in "
6251 "initializer", decl);
6252 TREE_TYPE (decl) = error_mark_node;
6253 return NULL_TREE;
6258 if (TREE_CODE (decl) == CONST_DECL)
6260 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
6262 DECL_INITIAL (decl) = init;
6264 gcc_assert (init != NULL_TREE);
6265 init = NULL_TREE;
6267 else if (!init && DECL_REALLY_EXTERN (decl))
6269 else if (init || type_build_ctor_call (type)
6270 || TREE_CODE (type) == REFERENCE_TYPE)
6272 if (TREE_CODE (type) == REFERENCE_TYPE)
6274 init = grok_reference_init (decl, type, init, flags);
6275 flags |= LOOKUP_ALREADY_DIGESTED;
6277 else if (!init)
6278 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6279 tf_warning_or_error);
6280 /* Do not reshape constructors of vectors (they don't need to be
6281 reshaped. */
6282 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6284 if (is_std_init_list (type))
6286 init = perform_implicit_conversion (type, init,
6287 tf_warning_or_error);
6288 flags |= LOOKUP_ALREADY_DIGESTED;
6290 else if (TYPE_NON_AGGREGATE_CLASS (type))
6292 /* Don't reshape if the class has constructors. */
6293 if (cxx_dialect == cxx98)
6294 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6295 "in C++98 %qD must be initialized by "
6296 "constructor, not by %<{...}%>",
6297 decl);
6299 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6301 error ("opaque vector types cannot be initialized");
6302 init = error_mark_node;
6304 else
6306 init = reshape_init (type, init, tf_warning_or_error);
6307 flags |= LOOKUP_NO_NARROWING;
6310 else if (TREE_CODE (init) == TREE_LIST
6311 && TREE_TYPE (init) != unknown_type_node
6312 && !MAYBE_CLASS_TYPE_P (type))
6314 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6316 /* We get here with code like `int a (2);' */
6317 init = build_x_compound_expr_from_list (init, ELK_INIT,
6318 tf_warning_or_error);
6321 /* If DECL has an array type without a specific bound, deduce the
6322 array size from the initializer. */
6323 maybe_deduce_size_from_array_init (decl, init);
6324 type = TREE_TYPE (decl);
6325 if (type == error_mark_node)
6326 return NULL_TREE;
6328 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6329 && !(flags & LOOKUP_ALREADY_DIGESTED)
6330 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6331 && CP_AGGREGATE_TYPE_P (type)
6332 && (CLASS_TYPE_P (type)
6333 || !TYPE_NEEDS_CONSTRUCTING (type)
6334 || type_has_extended_temps (type))))
6335 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6337 init_code = build_aggr_init_full_exprs (decl, init, flags);
6339 /* A constructor call is a non-trivial initializer even if
6340 it isn't explicitly written. */
6341 if (TREE_SIDE_EFFECTS (init_code))
6342 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6344 /* If this is a constexpr initializer, expand_default_init will
6345 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6346 case, pull the initializer back out and pass it down into
6347 store_init_value. */
6348 while (TREE_CODE (init_code) == EXPR_STMT
6349 || TREE_CODE (init_code) == CONVERT_EXPR)
6350 init_code = TREE_OPERAND (init_code, 0);
6351 if (TREE_CODE (init_code) == INIT_EXPR)
6353 init = TREE_OPERAND (init_code, 1);
6354 init_code = NULL_TREE;
6355 /* Don't call digest_init; it's unnecessary and will complain
6356 about aggregate initialization of non-aggregate classes. */
6357 flags |= LOOKUP_ALREADY_DIGESTED;
6359 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6361 /* Declared constexpr, but no suitable initializer; massage
6362 init appropriately so we can pass it into store_init_value
6363 for the error. */
6364 if (CLASS_TYPE_P (type)
6365 && (!init || TREE_CODE (init) == TREE_LIST))
6367 init = build_functional_cast (type, init, tf_none);
6368 if (TREE_CODE (init) == TARGET_EXPR)
6369 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6371 init_code = NULL_TREE;
6373 else
6374 init = NULL_TREE;
6377 if (init && TREE_CODE (init) != TREE_VEC)
6379 /* In aggregate initialization of a variable, each element
6380 initialization is a full-expression because there is no
6381 enclosing expression. */
6382 gcc_assert (stmts_are_full_exprs_p ());
6384 init_code = store_init_value (decl, init, cleanups, flags);
6386 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6387 && DECL_INITIAL (decl)
6388 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6389 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6390 warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl),
6391 DECL_SOURCE_LOCATION (decl)),
6392 0, "array %qD initialized by parenthesized "
6393 "string literal %qE",
6394 decl, DECL_INITIAL (decl));
6395 init = NULL;
6398 else
6400 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6401 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6402 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6403 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6404 /*complain=*/true);
6406 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6407 tf_warning_or_error);
6410 if (init && init != error_mark_node)
6411 init_code = build2 (INIT_EXPR, type, decl, init);
6413 if (init_code)
6415 /* We might have set these in cp_finish_decl. */
6416 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6417 TREE_CONSTANT (decl) = false;
6420 if (init_code
6421 && (DECL_IN_AGGR_P (decl) && !DECL_VAR_DECLARED_INLINE_P (decl)))
6423 static int explained = 0;
6425 if (cxx_dialect < cxx11)
6426 error ("initializer invalid for static member with constructor");
6427 else if (cxx_dialect < cxx17)
6428 error ("non-constant in-class initialization invalid for static "
6429 "member %qD", decl);
6430 else
6431 error ("non-constant in-class initialization invalid for non-inline "
6432 "static member %qD", decl);
6433 if (!explained)
6435 inform (input_location,
6436 "(an out of class initialization is required)");
6437 explained = 1;
6439 return NULL_TREE;
6442 return init_code;
6445 /* If DECL is not a local variable, give it RTL. */
6447 static void
6448 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6450 int toplev = toplevel_bindings_p ();
6451 int defer_p;
6453 /* Set the DECL_ASSEMBLER_NAME for the object. */
6454 if (asmspec)
6456 /* The `register' keyword, when used together with an
6457 asm-specification, indicates that the variable should be
6458 placed in a particular register. */
6459 if (VAR_P (decl) && DECL_REGISTER (decl))
6461 set_user_assembler_name (decl, asmspec);
6462 DECL_HARD_REGISTER (decl) = 1;
6464 else
6466 if (TREE_CODE (decl) == FUNCTION_DECL
6467 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6468 set_builtin_user_assembler_name (decl, asmspec);
6469 set_user_assembler_name (decl, asmspec);
6473 /* Handle non-variables up front. */
6474 if (!VAR_P (decl))
6476 rest_of_decl_compilation (decl, toplev, at_eof);
6477 return;
6480 /* If we see a class member here, it should be a static data
6481 member. */
6482 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6484 gcc_assert (TREE_STATIC (decl));
6485 /* An in-class declaration of a static data member should be
6486 external; it is only a declaration, and not a definition. */
6487 if (init == NULL_TREE)
6488 gcc_assert (DECL_EXTERNAL (decl)
6489 || !TREE_PUBLIC (decl)
6490 || DECL_INLINE_VAR_P (decl));
6493 /* We don't create any RTL for local variables. */
6494 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6495 return;
6497 /* We defer emission of local statics until the corresponding
6498 DECL_EXPR is expanded. But with constexpr its function might never
6499 be expanded, so go ahead and tell cgraph about the variable now. */
6500 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6501 && !var_in_maybe_constexpr_fn (decl))
6502 || DECL_VIRTUAL_P (decl));
6504 /* Defer template instantiations. */
6505 if (DECL_LANG_SPECIFIC (decl)
6506 && DECL_IMPLICIT_INSTANTIATION (decl))
6507 defer_p = 1;
6509 /* If we're not deferring, go ahead and assemble the variable. */
6510 if (!defer_p)
6511 rest_of_decl_compilation (decl, toplev, at_eof);
6514 /* walk_tree helper for wrap_temporary_cleanups, below. */
6516 static tree
6517 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6519 /* Stop at types or full-expression boundaries. */
6520 if (TYPE_P (*stmt_p)
6521 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6523 *walk_subtrees = 0;
6524 return NULL_TREE;
6527 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6529 tree guard = (tree)data;
6530 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6532 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6533 /* Tell honor_protect_cleanup_actions to handle this as a separate
6534 cleanup. */
6535 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6537 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6540 return NULL_TREE;
6543 /* We're initializing a local variable which has a cleanup GUARD. If there
6544 are any temporaries used in the initializer INIT of this variable, we
6545 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6546 variable will be cleaned up properly if one of them throws.
6548 Unfortunately, there's no way to express this properly in terms of
6549 nesting, as the regions for the temporaries overlap the region for the
6550 variable itself; if there are two temporaries, the variable needs to be
6551 the first thing destroyed if either of them throws. However, we only
6552 want to run the variable's cleanup if it actually got constructed. So
6553 we need to guard the temporary cleanups with the variable's cleanup if
6554 they are run on the normal path, but not if they are run on the
6555 exceptional path. We implement this by telling
6556 honor_protect_cleanup_actions to strip the variable cleanup from the
6557 exceptional path. */
6559 static void
6560 wrap_temporary_cleanups (tree init, tree guard)
6562 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6565 /* Generate code to initialize DECL (a local variable). */
6567 static void
6568 initialize_local_var (tree decl, tree init)
6570 tree type = TREE_TYPE (decl);
6571 tree cleanup;
6572 int already_used;
6574 gcc_assert (VAR_P (decl)
6575 || TREE_CODE (decl) == RESULT_DECL);
6576 gcc_assert (!TREE_STATIC (decl));
6578 if (DECL_SIZE (decl) == NULL_TREE)
6580 /* If we used it already as memory, it must stay in memory. */
6581 DECL_INITIAL (decl) = NULL_TREE;
6582 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6583 return;
6586 if (type == error_mark_node)
6587 return;
6589 /* Compute and store the initial value. */
6590 already_used = TREE_USED (decl) || TREE_USED (type);
6591 if (TREE_USED (type))
6592 DECL_READ_P (decl) = 1;
6594 /* Generate a cleanup, if necessary. */
6595 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6597 /* Perform the initialization. */
6598 if (init)
6600 tree rinit = (TREE_CODE (init) == INIT_EXPR
6601 ? TREE_OPERAND (init, 1) : NULL_TREE);
6602 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6604 /* Stick simple initializers in DECL_INITIAL so that
6605 -Wno-init-self works (c++/34772). */
6606 gcc_assert (TREE_OPERAND (init, 0) == decl);
6607 DECL_INITIAL (decl) = rinit;
6609 if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6611 STRIP_NOPS (rinit);
6612 if (rinit == decl)
6613 warning_at (DECL_SOURCE_LOCATION (decl),
6614 OPT_Winit_self,
6615 "reference %qD is initialized with itself", decl);
6618 else
6620 int saved_stmts_are_full_exprs_p;
6622 /* If we're only initializing a single object, guard the
6623 destructors of any temporaries used in its initializer with
6624 its destructor. This isn't right for arrays because each
6625 element initialization is a full-expression. */
6626 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6627 wrap_temporary_cleanups (init, cleanup);
6629 gcc_assert (building_stmt_list_p ());
6630 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6631 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6632 finish_expr_stmt (init);
6633 current_stmt_tree ()->stmts_are_full_exprs_p =
6634 saved_stmts_are_full_exprs_p;
6638 /* Set this to 0 so we can tell whether an aggregate which was
6639 initialized was ever used. Don't do this if it has a
6640 destructor, so we don't complain about the 'resource
6641 allocation is initialization' idiom. Now set
6642 attribute((unused)) on types so decls of that type will be
6643 marked used. (see TREE_USED, above.) */
6644 if (TYPE_NEEDS_CONSTRUCTING (type)
6645 && ! already_used
6646 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6647 && DECL_NAME (decl))
6648 TREE_USED (decl) = 0;
6649 else if (already_used)
6650 TREE_USED (decl) = 1;
6652 if (cleanup)
6653 finish_decl_cleanup (decl, cleanup);
6656 /* DECL is a VAR_DECL for a compiler-generated variable with static
6657 storage duration (like a virtual table) whose initializer is a
6658 compile-time constant. Initialize the variable and provide it to the
6659 back end. */
6661 void
6662 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6664 tree init;
6665 gcc_assert (DECL_ARTIFICIAL (decl));
6666 init = build_constructor (TREE_TYPE (decl), v);
6667 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6668 DECL_INITIAL (decl) = init;
6669 DECL_INITIALIZED_P (decl) = 1;
6670 determine_visibility (decl);
6671 layout_var_decl (decl);
6672 maybe_commonize_var (decl);
6673 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6676 /* INIT is the initializer for a variable, as represented by the
6677 parser. Returns true iff INIT is value-dependent. */
6679 static bool
6680 value_dependent_init_p (tree init)
6682 if (TREE_CODE (init) == TREE_LIST)
6683 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6684 return any_value_dependent_elements_p (init);
6685 else if (TREE_CODE (init) == CONSTRUCTOR)
6686 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6688 if (dependent_type_p (TREE_TYPE (init)))
6689 return true;
6691 vec<constructor_elt, va_gc> *elts;
6692 size_t nelts;
6693 size_t i;
6695 elts = CONSTRUCTOR_ELTS (init);
6696 nelts = vec_safe_length (elts);
6697 for (i = 0; i < nelts; ++i)
6698 if (value_dependent_init_p ((*elts)[i].value))
6699 return true;
6701 else
6702 /* It must be a simple expression, e.g., int i = 3; */
6703 return value_dependent_expression_p (init);
6705 return false;
6708 // Returns true if a DECL is VAR_DECL with the concept specifier.
6709 static inline bool
6710 is_concept_var (tree decl)
6712 return (VAR_P (decl)
6713 // Not all variables have DECL_LANG_SPECIFIC.
6714 && DECL_LANG_SPECIFIC (decl)
6715 && DECL_DECLARED_CONCEPT_P (decl));
6718 /* A helper function to be called via walk_tree. If any label exists
6719 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6721 static tree
6722 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6724 if (TYPE_P (*tp))
6725 *walk_subtrees = 0;
6726 if (TREE_CODE (*tp) == LABEL_DECL)
6727 cfun->has_forced_label_in_static = 1;
6728 return NULL_TREE;
6731 /* Finish processing of a declaration;
6732 install its line number and initial value.
6733 If the length of an array type is not known before,
6734 it must be determined now, from the initial value, or it is an error.
6736 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6737 true, then INIT is an integral constant expression.
6739 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6740 if the (init) syntax was used. */
6742 void
6743 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6744 tree asmspec_tree, int flags)
6746 tree type;
6747 vec<tree, va_gc> *cleanups = NULL;
6748 const char *asmspec = NULL;
6749 int was_readonly = 0;
6750 bool var_definition_p = false;
6751 tree auto_node;
6753 if (decl == error_mark_node)
6754 return;
6755 else if (! decl)
6757 if (init)
6758 error ("assignment (not initialization) in declaration");
6759 return;
6762 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6763 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6764 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6766 type = TREE_TYPE (decl);
6767 if (type == error_mark_node)
6768 return;
6770 /* Warn about register storage specifiers except when in GNU global
6771 or local register variable extension. */
6772 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6774 if (cxx_dialect >= cxx17)
6775 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6776 "ISO C++17 does not allow %<register%> storage "
6777 "class specifier");
6778 else
6779 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6780 "%<register%> storage class specifier used");
6783 /* If a name was specified, get the string. */
6784 if (at_namespace_scope_p ())
6785 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6786 if (asmspec_tree && asmspec_tree != error_mark_node)
6787 asmspec = TREE_STRING_POINTER (asmspec_tree);
6789 if (current_class_type
6790 && CP_DECL_CONTEXT (decl) == current_class_type
6791 && TYPE_BEING_DEFINED (current_class_type)
6792 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6793 && (DECL_INITIAL (decl) || init))
6794 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6796 if (TREE_CODE (decl) != FUNCTION_DECL
6797 && (auto_node = type_uses_auto (type)))
6799 tree d_init;
6800 if (init == NULL_TREE)
6802 if (DECL_LANG_SPECIFIC (decl)
6803 && DECL_TEMPLATE_INSTANTIATION (decl)
6804 && !DECL_TEMPLATE_INSTANTIATED (decl))
6806 /* init is null because we're deferring instantiating the
6807 initializer until we need it. Well, we need it now. */
6808 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6809 return;
6812 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6814 d_init = init;
6815 if (d_init)
6817 if (TREE_CODE (d_init) == TREE_LIST
6818 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6819 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6820 tf_warning_or_error);
6821 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6823 enum auto_deduction_context adc = adc_variable_type;
6824 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6825 adc = adc_decomp_type;
6826 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6827 tf_warning_or_error, adc,
6828 NULL_TREE, flags);
6829 if (type == error_mark_node)
6830 return;
6831 if (TREE_CODE (type) == FUNCTION_TYPE)
6833 error ("initializer for %<decltype(auto) %D%> has function type "
6834 "(did you forget the %<()%> ?)", decl);
6835 TREE_TYPE (decl) = error_mark_node;
6836 return;
6838 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6841 if (ensure_literal_type_for_constexpr_object (decl)
6842 == error_mark_node)
6844 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6845 return;
6848 if (VAR_P (decl)
6849 && DECL_CLASS_SCOPE_P (decl)
6850 && DECL_INITIALIZED_IN_CLASS_P (decl))
6851 check_static_variable_definition (decl, type);
6853 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6855 tree clone;
6856 if (init == ridpointers[(int)RID_DELETE])
6858 /* FIXME check this is 1st decl. */
6859 DECL_DELETED_FN (decl) = 1;
6860 DECL_DECLARED_INLINE_P (decl) = 1;
6861 DECL_INITIAL (decl) = error_mark_node;
6862 FOR_EACH_CLONE (clone, decl)
6864 DECL_DELETED_FN (clone) = 1;
6865 DECL_DECLARED_INLINE_P (clone) = 1;
6866 DECL_INITIAL (clone) = error_mark_node;
6868 init = NULL_TREE;
6870 else if (init == ridpointers[(int)RID_DEFAULT])
6872 if (defaultable_fn_check (decl))
6873 DECL_DEFAULTED_FN (decl) = 1;
6874 else
6875 DECL_INITIAL (decl) = NULL_TREE;
6879 if (init && VAR_P (decl))
6881 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6882 /* If DECL is a reference, then we want to know whether init is a
6883 reference constant; init_const_expr_p as passed tells us whether
6884 it's an rvalue constant. */
6885 if (TREE_CODE (type) == REFERENCE_TYPE)
6886 init_const_expr_p = potential_constant_expression (init);
6887 if (init_const_expr_p)
6889 /* Set these flags now for templates. We'll update the flags in
6890 store_init_value for instantiations. */
6891 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6892 if (decl_maybe_constant_var_p (decl)
6893 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
6894 && TREE_CODE (type) != REFERENCE_TYPE)
6895 TREE_CONSTANT (decl) = 1;
6899 if (processing_template_decl)
6901 bool type_dependent_p;
6903 /* Add this declaration to the statement-tree. */
6904 if (at_function_scope_p ())
6905 add_decl_expr (decl);
6907 type_dependent_p = dependent_type_p (type);
6909 if (check_for_bare_parameter_packs (init))
6911 init = NULL_TREE;
6912 DECL_INITIAL (decl) = NULL_TREE;
6915 /* Generally, initializers in templates are expanded when the
6916 template is instantiated. But, if DECL is a variable constant
6917 then it can be used in future constant expressions, so its value
6918 must be available. */
6920 bool dep_init = false;
6922 if (!VAR_P (decl) || type_dependent_p)
6923 /* We can't do anything if the decl has dependent type. */;
6924 else if (!init && is_concept_var (decl))
6925 error ("variable concept has no initializer");
6926 else if (init
6927 && init_const_expr_p
6928 && TREE_CODE (type) != REFERENCE_TYPE
6929 && decl_maybe_constant_var_p (decl)
6930 && !(dep_init = value_dependent_init_p (init)))
6932 /* This variable seems to be a non-dependent constant, so process
6933 its initializer. If check_initializer returns non-null the
6934 initialization wasn't constant after all. */
6935 tree init_code;
6936 cleanups = make_tree_vector ();
6937 init_code = check_initializer (decl, init, flags, &cleanups);
6938 if (init_code == NULL_TREE)
6939 init = NULL_TREE;
6940 release_tree_vector (cleanups);
6942 else if (!DECL_PRETTY_FUNCTION_P (decl))
6944 /* Deduce array size even if the initializer is dependent. */
6945 maybe_deduce_size_from_array_init (decl, init);
6946 /* And complain about multiple initializers. */
6947 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6948 && !MAYBE_CLASS_TYPE_P (type))
6949 init = build_x_compound_expr_from_list (init, ELK_INIT,
6950 tf_warning_or_error);
6953 if (init)
6954 DECL_INITIAL (decl) = init;
6955 if (dep_init)
6957 retrofit_lang_decl (decl);
6958 SET_DECL_DEPENDENT_INIT_P (decl, true);
6960 return;
6963 /* Just store non-static data member initializers for later. */
6964 if (init && TREE_CODE (decl) == FIELD_DECL)
6965 DECL_INITIAL (decl) = init;
6967 /* Take care of TYPE_DECLs up front. */
6968 if (TREE_CODE (decl) == TYPE_DECL)
6970 if (type != error_mark_node
6971 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6973 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6974 warning (0, "shadowing previous type declaration of %q#D", decl);
6975 set_identifier_type_value (DECL_NAME (decl), decl);
6978 /* If we have installed this as the canonical typedef for this
6979 type, and that type has not been defined yet, delay emitting
6980 the debug information for it, as we will emit it later. */
6981 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6982 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6983 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6985 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6986 at_eof);
6987 return;
6990 /* A reference will be modified here, as it is initialized. */
6991 if (! DECL_EXTERNAL (decl)
6992 && TREE_READONLY (decl)
6993 && TREE_CODE (type) == REFERENCE_TYPE)
6995 was_readonly = 1;
6996 TREE_READONLY (decl) = 0;
6999 if (VAR_P (decl))
7001 /* If this is a local variable that will need a mangled name,
7002 register it now. We must do this before processing the
7003 initializer for the variable, since the initialization might
7004 require a guard variable, and since the mangled name of the
7005 guard variable will depend on the mangled name of this
7006 variable. */
7007 if (DECL_FUNCTION_SCOPE_P (decl)
7008 && TREE_STATIC (decl)
7009 && !DECL_ARTIFICIAL (decl))
7011 push_local_name (decl);
7012 /* Normally has_forced_label_in_static is set during GIMPLE
7013 lowering, but [cd]tors are never actually compiled directly.
7014 We need to set this early so we can deal with the label
7015 address extension. */
7016 if ((DECL_CONSTRUCTOR_P (current_function_decl)
7017 || DECL_DESTRUCTOR_P (current_function_decl))
7018 && init)
7020 walk_tree (&init, notice_forced_label_r, NULL, NULL);
7021 add_local_decl (cfun, decl);
7023 /* And make sure it's in the symbol table for
7024 c_parse_final_cleanups to find. */
7025 varpool_node::get_create (decl);
7028 /* Convert the initializer to the type of DECL, if we have not
7029 already initialized DECL. */
7030 if (!DECL_INITIALIZED_P (decl)
7031 /* If !DECL_EXTERNAL then DECL is being defined. In the
7032 case of a static data member initialized inside the
7033 class-specifier, there can be an initializer even if DECL
7034 is *not* defined. */
7035 && (!DECL_EXTERNAL (decl) || init))
7037 cleanups = make_tree_vector ();
7038 init = check_initializer (decl, init, flags, &cleanups);
7040 /* Handle:
7042 [dcl.init]
7044 The memory occupied by any object of static storage
7045 duration is zero-initialized at program startup before
7046 any other initialization takes place.
7048 We cannot create an appropriate initializer until after
7049 the type of DECL is finalized. If DECL_INITIAL is set,
7050 then the DECL is statically initialized, and any
7051 necessary zero-initialization has already been performed. */
7052 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7053 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7054 /*nelts=*/NULL_TREE,
7055 /*static_storage_p=*/true);
7056 /* Remember that the initialization for this variable has
7057 taken place. */
7058 DECL_INITIALIZED_P (decl) = 1;
7059 /* This declaration is the definition of this variable,
7060 unless we are initializing a static data member within
7061 the class specifier. */
7062 if (!DECL_EXTERNAL (decl))
7063 var_definition_p = true;
7065 /* If the variable has an array type, lay out the type, even if
7066 there is no initializer. It is valid to index through the
7067 array, and we must get TYPE_ALIGN set correctly on the array
7068 type. */
7069 else if (TREE_CODE (type) == ARRAY_TYPE)
7070 layout_type (type);
7072 if (TREE_STATIC (decl)
7073 && !at_function_scope_p ()
7074 && current_function_decl == NULL)
7075 /* So decl is a global variable or a static member of a
7076 non local class. Record the types it uses
7077 so that we can decide later to emit debug info for them. */
7078 record_types_used_by_current_var_decl (decl);
7081 /* Add this declaration to the statement-tree. This needs to happen
7082 after the call to check_initializer so that the DECL_EXPR for a
7083 reference temp is added before the DECL_EXPR for the reference itself. */
7084 if (DECL_FUNCTION_SCOPE_P (decl))
7086 /* If we're building a variable sized type, and we might be
7087 reachable other than via the top of the current binding
7088 level, then create a new BIND_EXPR so that we deallocate
7089 the object at the right time. */
7090 if (VAR_P (decl)
7091 && DECL_SIZE (decl)
7092 && !TREE_CONSTANT (DECL_SIZE (decl))
7093 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7095 tree bind;
7096 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7097 TREE_SIDE_EFFECTS (bind) = 1;
7098 add_stmt (bind);
7099 BIND_EXPR_BODY (bind) = push_stmt_list ();
7101 add_decl_expr (decl);
7104 /* Let the middle end know about variables and functions -- but not
7105 static data members in uninstantiated class templates. */
7106 if (VAR_OR_FUNCTION_DECL_P (decl))
7108 if (VAR_P (decl))
7110 layout_var_decl (decl);
7111 maybe_commonize_var (decl);
7114 /* This needs to happen after the linkage is set. */
7115 determine_visibility (decl);
7117 if (var_definition_p && TREE_STATIC (decl))
7119 /* If a TREE_READONLY variable needs initialization
7120 at runtime, it is no longer readonly and we need to
7121 avoid MEM_READONLY_P being set on RTL created for it. */
7122 if (init)
7124 if (TREE_READONLY (decl))
7125 TREE_READONLY (decl) = 0;
7126 was_readonly = 0;
7128 else if (was_readonly)
7129 TREE_READONLY (decl) = 1;
7131 /* Likewise if it needs destruction. */
7132 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7133 TREE_READONLY (decl) = 0;
7136 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7138 /* Check for abstractness of the type. Notice that there is no
7139 need to strip array types here since the check for those types
7140 is already done within create_array_type_for_decl. */
7141 abstract_virtuals_error (decl, type);
7143 if (TREE_TYPE (decl) == error_mark_node)
7144 /* No initialization required. */
7146 else if (TREE_CODE (decl) == FUNCTION_DECL)
7148 if (init)
7150 if (init == ridpointers[(int)RID_DEFAULT])
7152 /* An out-of-class default definition is defined at
7153 the point where it is explicitly defaulted. */
7154 if (DECL_DELETED_FN (decl))
7155 maybe_explain_implicit_delete (decl);
7156 else if (DECL_INITIAL (decl) == error_mark_node)
7157 synthesize_method (decl);
7159 else
7160 error ("function %q#D is initialized like a variable", decl);
7162 /* else no initialization required. */
7164 else if (DECL_EXTERNAL (decl)
7165 && ! (DECL_LANG_SPECIFIC (decl)
7166 && DECL_NOT_REALLY_EXTERN (decl)))
7168 if (init)
7169 DECL_INITIAL (decl) = init;
7171 /* A variable definition. */
7172 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7173 /* Initialize the local variable. */
7174 initialize_local_var (decl, init);
7176 /* If a variable is defined, and then a subsequent
7177 definition with external linkage is encountered, we will
7178 get here twice for the same variable. We want to avoid
7179 calling expand_static_init more than once. For variables
7180 that are not static data members, we can call
7181 expand_static_init only when we actually process the
7182 initializer. It is not legal to redeclare a static data
7183 member, so this issue does not arise in that case. */
7184 else if (var_definition_p && TREE_STATIC (decl))
7185 expand_static_init (decl, init);
7188 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7189 reference, insert it in the statement-tree now. */
7190 if (cleanups)
7192 unsigned i; tree t;
7193 FOR_EACH_VEC_ELT (*cleanups, i, t)
7194 push_cleanup (decl, t, false);
7195 release_tree_vector (cleanups);
7198 if (was_readonly)
7199 TREE_READONLY (decl) = 1;
7201 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7204 /* For class TYPE return itself or some its bases that contain
7205 any direct non-static data members. Return error_mark_node if an
7206 error has been diagnosed. */
7208 static tree
7209 find_decomp_class_base (location_t loc, tree type, tree ret)
7211 bool member_seen = false;
7212 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7213 if (TREE_CODE (field) != FIELD_DECL
7214 || DECL_ARTIFICIAL (field)
7215 || DECL_UNNAMED_BIT_FIELD (field))
7216 continue;
7217 else if (ret)
7218 return type;
7219 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7221 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7222 error_at (loc, "cannot decompose class type %qT because it has an "
7223 "anonymous struct member", type);
7224 else
7225 error_at (loc, "cannot decompose class type %qT because it has an "
7226 "anonymous union member", type);
7227 inform (DECL_SOURCE_LOCATION (field), "declared here");
7228 return error_mark_node;
7230 else if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
7232 error_at (loc, "cannot decompose non-public member %qD of %qT",
7233 field, type);
7234 inform (DECL_SOURCE_LOCATION (field),
7235 TREE_PRIVATE (field)
7236 ? G_("declared private here")
7237 : G_("declared protected here"));
7238 return error_mark_node;
7240 else
7241 member_seen = true;
7243 tree base_binfo, binfo;
7244 tree orig_ret = ret;
7245 int i;
7246 if (member_seen)
7247 ret = type;
7248 for (binfo = TYPE_BINFO (type), i = 0;
7249 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7251 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7252 if (t == error_mark_node)
7253 return error_mark_node;
7254 if (t != NULL_TREE && t != ret)
7256 if (ret == type)
7258 error_at (loc, "cannot decompose class type %qT: both it and "
7259 "its base class %qT have non-static data members",
7260 type, t);
7261 return error_mark_node;
7263 else if (orig_ret != NULL_TREE)
7264 return t;
7265 else if (ret != NULL_TREE)
7267 error_at (loc, "cannot decompose class type %qT: its base "
7268 "classes %qT and %qT have non-static data "
7269 "members", type, ret, t);
7270 return error_mark_node;
7272 else
7273 ret = t;
7276 return ret;
7279 /* Return std::tuple_size<TYPE>::value. */
7281 static tree
7282 get_tuple_size (tree type)
7284 tree args = make_tree_vec (1);
7285 TREE_VEC_ELT (args, 0) = type;
7286 tree inst = lookup_template_class (get_identifier ("tuple_size"), args,
7287 /*in_decl*/NULL_TREE,
7288 /*context*/std_node,
7289 /*entering_scope*/false, tf_none);
7290 inst = complete_type (inst);
7291 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7292 return NULL_TREE;
7293 tree val = lookup_qualified_name (inst, get_identifier ("value"),
7294 /*type*/false, /*complain*/false);
7295 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7296 val = maybe_constant_value (val);
7297 if (TREE_CODE (val) == INTEGER_CST)
7298 return val;
7299 else
7300 return error_mark_node;
7303 /* Return std::tuple_element<I,TYPE>::type. */
7305 static tree
7306 get_tuple_element_type (tree type, unsigned i)
7308 tree args = make_tree_vec (2);
7309 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7310 TREE_VEC_ELT (args, 1) = type;
7311 tree inst = lookup_template_class (get_identifier ("tuple_element"), args,
7312 /*in_decl*/NULL_TREE,
7313 /*context*/std_node,
7314 /*entering_scope*/false,
7315 tf_warning_or_error);
7316 return make_typename_type (inst, get_identifier ("type"),
7317 none_type, tf_warning_or_error);
7320 /* Return e.get<i>() or get<i>(e). */
7322 static tree
7323 get_tuple_decomp_init (tree decl, unsigned i)
7325 tree get_id = get_identifier ("get");
7326 tree targs = make_tree_vec (1);
7327 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7329 tree etype = TREE_TYPE (decl);
7330 tree e = convert_from_reference (decl);
7332 /* [The id-expression] e is an lvalue if the type of the entity e is an
7333 lvalue reference and an xvalue otherwise. */
7334 if (TREE_CODE (etype) != REFERENCE_TYPE
7335 || TYPE_REF_IS_RVALUE (etype))
7336 e = move (e);
7338 tree fns = lookup_qualified_name (TREE_TYPE (e), get_id,
7339 /*type*/false, /*complain*/false);
7340 if (fns != error_mark_node)
7342 fns = lookup_template_function (fns, targs);
7343 return build_new_method_call (e, fns, /*args*/NULL,
7344 /*path*/NULL_TREE, LOOKUP_NORMAL,
7345 /*fn_p*/NULL, tf_warning_or_error);
7347 else
7349 vec<tree,va_gc> *args = make_tree_vector_single (e);
7350 fns = lookup_template_function (get_id, targs);
7351 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7352 return finish_call_expr (fns, &args, /*novirt*/false,
7353 /*koenig*/true, tf_warning_or_error);
7357 /* It's impossible to recover the decltype of a tuple decomposition variable
7358 based on the actual type of the variable, so store it in a hash table. */
7360 static GTY((cache)) tree_cache_map *decomp_type_table;
7361 static void
7362 store_decomp_type (tree v, tree t)
7364 if (!decomp_type_table)
7365 decomp_type_table = tree_cache_map::create_ggc (13);
7366 decomp_type_table->put (v, t);
7369 tree
7370 lookup_decomp_type (tree v)
7372 return *decomp_type_table->get (v);
7375 /* Mangle a decomposition declaration if needed. Arguments like
7376 in cp_finish_decomp. */
7378 void
7379 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7381 if (!processing_template_decl
7382 && !error_operand_p (decl)
7383 && DECL_NAMESPACE_SCOPE_P (decl))
7385 auto_vec<tree, 16> v;
7386 v.safe_grow (count);
7387 tree d = first;
7388 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7389 v[count - i - 1] = d;
7390 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7394 /* Finish a decomposition declaration. DECL is the underlying declaration
7395 "e", FIRST is the head of a chain of decls for the individual identifiers
7396 chained through DECL_CHAIN in reverse order and COUNT is the number of
7397 those decls. */
7399 void
7400 cp_finish_decomp (tree decl, tree first, unsigned int count)
7402 if (error_operand_p (decl))
7404 error_out:
7405 while (count--)
7407 TREE_TYPE (first) = error_mark_node;
7408 if (DECL_HAS_VALUE_EXPR_P (first))
7410 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7411 DECL_HAS_VALUE_EXPR_P (first) = 0;
7413 first = DECL_CHAIN (first);
7415 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7416 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7417 return;
7420 location_t loc = DECL_SOURCE_LOCATION (decl);
7421 if (type_dependent_expression_p (decl)
7422 /* This happens for range for when not in templates.
7423 Still add the DECL_VALUE_EXPRs for later processing. */
7424 || (!processing_template_decl
7425 && type_uses_auto (TREE_TYPE (decl))))
7427 for (unsigned int i = 0; i < count; i++)
7429 if (!DECL_HAS_VALUE_EXPR_P (first))
7431 tree v = build_nt (ARRAY_REF, decl,
7432 size_int (count - i - 1),
7433 NULL_TREE, NULL_TREE);
7434 SET_DECL_VALUE_EXPR (first, v);
7435 DECL_HAS_VALUE_EXPR_P (first) = 1;
7437 if (processing_template_decl)
7438 fit_decomposition_lang_decl (first, decl);
7439 first = DECL_CHAIN (first);
7441 return;
7444 auto_vec<tree, 16> v;
7445 v.safe_grow (count);
7446 tree d = first;
7447 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7449 v[count - i - 1] = d;
7450 fit_decomposition_lang_decl (d, decl);
7453 tree type = TREE_TYPE (decl);
7454 tree dexp = decl;
7456 if (TREE_CODE (type) == REFERENCE_TYPE)
7458 dexp = convert_from_reference (dexp);
7459 type = complete_type (TREE_TYPE (type));
7460 if (type == error_mark_node)
7461 goto error_out;
7462 if (!COMPLETE_TYPE_P (type))
7464 error_at (loc, "structured binding refers to incomplete type %qT",
7465 type);
7466 goto error_out;
7470 tree eltype = NULL_TREE;
7471 unsigned HOST_WIDE_INT eltscnt = 0;
7472 if (TREE_CODE (type) == ARRAY_TYPE)
7474 tree nelts;
7475 nelts = array_type_nelts_top (type);
7476 if (nelts == error_mark_node)
7477 goto error_out;
7478 if (!tree_fits_uhwi_p (nelts))
7480 error_at (loc, "cannot decompose variable length array %qT", type);
7481 goto error_out;
7483 eltscnt = tree_to_uhwi (nelts);
7484 if (count != eltscnt)
7486 cnt_mismatch:
7487 if (count > eltscnt)
7488 error_n (loc, count,
7489 "%u name provided for structured binding",
7490 "%u names provided for structured binding", count);
7491 else
7492 error_n (loc, count,
7493 "only %u name provided for structured binding",
7494 "only %u names provided for structured binding", count);
7495 /* Some languages have special plural rules even for large values,
7496 but it is periodic with period of 10, 100, 1000 etc. */
7497 inform_n (loc, eltscnt > INT_MAX
7498 ? (eltscnt % 1000000) + 1000000 : eltscnt,
7499 "while %qT decomposes into %wu element",
7500 "while %qT decomposes into %wu elements",
7501 type, eltscnt);
7502 goto error_out;
7504 eltype = TREE_TYPE (type);
7505 for (unsigned int i = 0; i < count; i++)
7507 TREE_TYPE (v[i]) = eltype;
7508 layout_decl (v[i], 0);
7509 if (processing_template_decl)
7510 continue;
7511 tree t = unshare_expr (dexp);
7512 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7513 eltype, t, size_int (i), NULL_TREE,
7514 NULL_TREE);
7515 SET_DECL_VALUE_EXPR (v[i], t);
7516 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7519 /* 2 GNU extensions. */
7520 else if (TREE_CODE (type) == COMPLEX_TYPE)
7522 eltscnt = 2;
7523 if (count != eltscnt)
7524 goto cnt_mismatch;
7525 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7526 for (unsigned int i = 0; i < count; i++)
7528 TREE_TYPE (v[i]) = eltype;
7529 layout_decl (v[i], 0);
7530 if (processing_template_decl)
7531 continue;
7532 tree t = unshare_expr (dexp);
7533 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7534 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7536 SET_DECL_VALUE_EXPR (v[i], t);
7537 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7540 else if (TREE_CODE (type) == VECTOR_TYPE)
7542 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7544 error_at (loc, "cannot decompose variable length vector %qT", type);
7545 goto error_out;
7547 if (count != eltscnt)
7548 goto cnt_mismatch;
7549 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7550 for (unsigned int i = 0; i < count; i++)
7552 TREE_TYPE (v[i]) = eltype;
7553 layout_decl (v[i], 0);
7554 if (processing_template_decl)
7555 continue;
7556 tree t = unshare_expr (dexp);
7557 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7558 &t, size_int (i));
7559 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7560 eltype, t, size_int (i), NULL_TREE,
7561 NULL_TREE);
7562 SET_DECL_VALUE_EXPR (v[i], t);
7563 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7566 else if (tree tsize = get_tuple_size (type))
7568 if (tsize == error_mark_node)
7570 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7571 "constant expression", type);
7572 goto error_out;
7574 if (!tree_fits_uhwi_p (tsize))
7576 error_n (loc, count,
7577 "%u name provided for structured binding",
7578 "%u names provided for structured binding", count);
7579 inform (loc, "while %qT decomposes into %E elements",
7580 type, tsize);
7581 goto error_out;
7583 eltscnt = tree_to_uhwi (tsize);
7584 if (count != eltscnt)
7585 goto cnt_mismatch;
7586 int save_read = DECL_READ_P (decl);
7587 for (unsigned i = 0; i < count; ++i)
7589 location_t sloc = input_location;
7590 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7592 input_location = dloc;
7593 tree init = get_tuple_decomp_init (decl, i);
7594 tree eltype = (init == error_mark_node ? error_mark_node
7595 : get_tuple_element_type (type, i));
7596 input_location = sloc;
7598 if (init == error_mark_node || eltype == error_mark_node)
7600 inform (dloc, "in initialization of structured binding "
7601 "variable %qD", v[i]);
7602 goto error_out;
7604 /* Save the decltype away before reference collapse. */
7605 store_decomp_type (v[i], eltype);
7606 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7607 TREE_TYPE (v[i]) = eltype;
7608 layout_decl (v[i], 0);
7609 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7611 /* In this case the names are variables, not just proxies. */
7612 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7613 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7615 if (!processing_template_decl)
7616 cp_finish_decl (v[i], init, /*constexpr*/false,
7617 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7619 /* Ignore reads from the underlying decl performed during initialization
7620 of the individual variables. If those will be read, we'll mark
7621 the underlying decl as read at that point. */
7622 DECL_READ_P (decl) = save_read;
7624 else if (TREE_CODE (type) == UNION_TYPE)
7626 error_at (loc, "cannot decompose union type %qT", type);
7627 goto error_out;
7629 else if (!CLASS_TYPE_P (type))
7631 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7632 goto error_out;
7634 else if (LAMBDA_TYPE_P (type))
7636 error_at (loc, "cannot decompose lambda closure type %qT", type);
7637 goto error_out;
7639 else
7641 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7642 if (btype == error_mark_node)
7643 goto error_out;
7644 else if (btype == NULL_TREE)
7646 error_at (loc, "cannot decompose class type %qT without non-static "
7647 "data members", type);
7648 goto error_out;
7650 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7651 if (TREE_CODE (field) != FIELD_DECL
7652 || DECL_ARTIFICIAL (field)
7653 || DECL_UNNAMED_BIT_FIELD (field))
7654 continue;
7655 else
7656 eltscnt++;
7657 if (count != eltscnt)
7658 goto cnt_mismatch;
7659 tree t = dexp;
7660 if (type != btype)
7662 t = convert_to_base (t, btype, /*check_access*/true,
7663 /*nonnull*/false, tf_warning_or_error);
7664 type = btype;
7666 unsigned int i = 0;
7667 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7668 if (TREE_CODE (field) != FIELD_DECL
7669 || DECL_ARTIFICIAL (field)
7670 || DECL_UNNAMED_BIT_FIELD (field))
7671 continue;
7672 else
7674 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7675 NULL_TREE);
7676 if (REFERENCE_REF_P (tt))
7677 tt = TREE_OPERAND (tt, 0);
7678 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7679 layout_decl (v[i], 0);
7680 if (!processing_template_decl)
7682 SET_DECL_VALUE_EXPR (v[i], tt);
7683 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7685 i++;
7688 if (processing_template_decl)
7690 for (unsigned int i = 0; i < count; i++)
7691 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7693 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7694 NULL_TREE, NULL_TREE);
7695 SET_DECL_VALUE_EXPR (v[i], a);
7696 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7701 /* Returns a declaration for a VAR_DECL as if:
7703 extern "C" TYPE NAME;
7705 had been seen. Used to create compiler-generated global
7706 variables. */
7708 static tree
7709 declare_global_var (tree name, tree type)
7711 tree decl;
7713 push_to_top_level ();
7714 decl = build_decl (input_location, VAR_DECL, name, type);
7715 TREE_PUBLIC (decl) = 1;
7716 DECL_EXTERNAL (decl) = 1;
7717 DECL_ARTIFICIAL (decl) = 1;
7718 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7719 /* If the user has explicitly declared this variable (perhaps
7720 because the code we are compiling is part of a low-level runtime
7721 library), then it is possible that our declaration will be merged
7722 with theirs by pushdecl. */
7723 decl = pushdecl (decl);
7724 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7725 pop_from_top_level ();
7727 return decl;
7730 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7731 if "__cxa_atexit" is not being used) corresponding to the function
7732 to be called when the program exits. */
7734 static tree
7735 get_atexit_fn_ptr_type (void)
7737 tree fn_type;
7739 if (!atexit_fn_ptr_type_node)
7741 tree arg_type;
7742 if (flag_use_cxa_atexit
7743 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7744 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7745 arg_type = ptr_type_node;
7746 else
7747 /* The parameter to "atexit" is "void (*)(void)". */
7748 arg_type = NULL_TREE;
7750 fn_type = build_function_type_list (void_type_node,
7751 arg_type, NULL_TREE);
7752 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7755 return atexit_fn_ptr_type_node;
7758 /* Returns a pointer to the `atexit' function. Note that if
7759 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7760 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7762 static tree
7763 get_atexit_node (void)
7765 tree atexit_fndecl;
7766 tree fn_type;
7767 tree fn_ptr_type;
7768 const char *name;
7769 bool use_aeabi_atexit;
7771 if (atexit_node)
7772 return atexit_node;
7774 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7776 /* The declaration for `__cxa_atexit' is:
7778 int __cxa_atexit (void (*)(void *), void *, void *)
7780 We build up the argument types and then the function type
7781 itself. */
7782 tree argtype0, argtype1, argtype2;
7784 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7785 /* First, build the pointer-to-function type for the first
7786 argument. */
7787 fn_ptr_type = get_atexit_fn_ptr_type ();
7788 /* Then, build the rest of the argument types. */
7789 argtype2 = ptr_type_node;
7790 if (use_aeabi_atexit)
7792 argtype1 = fn_ptr_type;
7793 argtype0 = ptr_type_node;
7795 else
7797 argtype1 = ptr_type_node;
7798 argtype0 = fn_ptr_type;
7800 /* And the final __cxa_atexit type. */
7801 fn_type = build_function_type_list (integer_type_node,
7802 argtype0, argtype1, argtype2,
7803 NULL_TREE);
7804 if (use_aeabi_atexit)
7805 name = "__aeabi_atexit";
7806 else
7807 name = "__cxa_atexit";
7809 else
7811 /* The declaration for `atexit' is:
7813 int atexit (void (*)());
7815 We build up the argument types and then the function type
7816 itself. */
7817 fn_ptr_type = get_atexit_fn_ptr_type ();
7818 /* Build the final atexit type. */
7819 fn_type = build_function_type_list (integer_type_node,
7820 fn_ptr_type, NULL_TREE);
7821 name = "atexit";
7824 /* Now, build the function declaration. */
7825 push_lang_context (lang_name_c);
7826 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7827 mark_used (atexit_fndecl);
7828 pop_lang_context ();
7829 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7831 return atexit_node;
7834 /* Like get_atexit_node, but for thread-local cleanups. */
7836 static tree
7837 get_thread_atexit_node (void)
7839 /* The declaration for `__cxa_thread_atexit' is:
7841 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
7842 tree fn_type = build_function_type_list (integer_type_node,
7843 get_atexit_fn_ptr_type (),
7844 ptr_type_node, ptr_type_node,
7845 NULL_TREE);
7847 /* Now, build the function declaration. */
7848 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
7849 ECF_LEAF | ECF_NOTHROW);
7850 return decay_conversion (atexit_fndecl, tf_warning_or_error);
7853 /* Returns the __dso_handle VAR_DECL. */
7855 static tree
7856 get_dso_handle_node (void)
7858 if (dso_handle_node)
7859 return dso_handle_node;
7861 /* Declare the variable. */
7862 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
7863 ptr_type_node);
7865 #ifdef HAVE_GAS_HIDDEN
7866 if (dso_handle_node != error_mark_node)
7868 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
7869 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
7871 #endif
7873 return dso_handle_node;
7876 /* Begin a new function with internal linkage whose job will be simply
7877 to destroy some particular variable. */
7879 static GTY(()) int start_cleanup_cnt;
7881 static tree
7882 start_cleanup_fn (void)
7884 char name[32];
7885 tree fntype;
7886 tree fndecl;
7887 bool use_cxa_atexit = flag_use_cxa_atexit
7888 && !targetm.cxx.use_atexit_for_cxa_atexit ();
7890 push_to_top_level ();
7892 /* No need to mangle this. */
7893 push_lang_context (lang_name_c);
7895 /* Build the name of the function. */
7896 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
7897 /* Build the function declaration. */
7898 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
7899 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
7900 /* It's a function with internal linkage, generated by the
7901 compiler. */
7902 TREE_PUBLIC (fndecl) = 0;
7903 DECL_ARTIFICIAL (fndecl) = 1;
7904 /* Make the function `inline' so that it is only emitted if it is
7905 actually needed. It is unlikely that it will be inlined, since
7906 it is only called via a function pointer, but we avoid unnecessary
7907 emissions this way. */
7908 DECL_DECLARED_INLINE_P (fndecl) = 1;
7909 DECL_INTERFACE_KNOWN (fndecl) = 1;
7910 /* Build the parameter. */
7911 if (use_cxa_atexit)
7913 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
7914 TREE_USED (parmdecl) = 1;
7915 DECL_READ_P (parmdecl) = 1;
7916 DECL_ARGUMENTS (fndecl) = parmdecl;
7919 pushdecl (fndecl);
7920 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7922 pop_lang_context ();
7924 return current_function_decl;
7927 /* Finish the cleanup function begun by start_cleanup_fn. */
7929 static void
7930 end_cleanup_fn (void)
7932 expand_or_defer_fn (finish_function (/*inline_p=*/false));
7934 pop_from_top_level ();
7937 /* Generate code to handle the destruction of DECL, an object with
7938 static storage duration. */
7940 tree
7941 register_dtor_fn (tree decl)
7943 tree cleanup;
7944 tree addr;
7945 tree compound_stmt;
7946 tree fcall;
7947 tree type;
7948 bool ob_parm, dso_parm, use_dtor;
7949 tree arg0, arg1, arg2;
7950 tree atex_node;
7952 type = TREE_TYPE (decl);
7953 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7954 return void_node;
7956 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7957 "__aeabi_atexit"), and DECL is a class object, we can just pass the
7958 destructor to "__cxa_atexit"; we don't have to build a temporary
7959 function to do the cleanup. */
7960 dso_parm = (flag_use_cxa_atexit
7961 && !targetm.cxx.use_atexit_for_cxa_atexit ());
7962 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
7963 use_dtor = ob_parm && CLASS_TYPE_P (type);
7964 if (use_dtor)
7966 cleanup = get_class_binding (type, complete_dtor_identifier);
7968 /* Make sure it is accessible. */
7969 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7970 tf_warning_or_error);
7972 else
7974 /* Call build_cleanup before we enter the anonymous function so
7975 that any access checks will be done relative to the current
7976 scope, rather than the scope of the anonymous function. */
7977 build_cleanup (decl);
7979 /* Now start the function. */
7980 cleanup = start_cleanup_fn ();
7982 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
7983 to the original function, rather than the anonymous one. That
7984 will make the back end think that nested functions are in use,
7985 which causes confusion. */
7986 push_deferring_access_checks (dk_no_check);
7987 fcall = build_cleanup (decl);
7988 pop_deferring_access_checks ();
7990 /* Create the body of the anonymous function. */
7991 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7992 finish_expr_stmt (fcall);
7993 finish_compound_stmt (compound_stmt);
7994 end_cleanup_fn ();
7997 /* Call atexit with the cleanup function. */
7998 mark_used (cleanup);
7999 cleanup = build_address (cleanup);
8001 if (CP_DECL_THREAD_LOCAL_P (decl))
8002 atex_node = get_thread_atexit_node ();
8003 else
8004 atex_node = get_atexit_node ();
8006 if (use_dtor)
8008 /* We must convert CLEANUP to the type that "__cxa_atexit"
8009 expects. */
8010 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
8011 /* "__cxa_atexit" will pass the address of DECL to the
8012 cleanup function. */
8013 mark_used (decl);
8014 addr = build_address (decl);
8015 /* The declared type of the parameter to "__cxa_atexit" is
8016 "void *". For plain "T*", we could just let the
8017 machinery in cp_build_function_call convert it -- but if the
8018 type is "cv-qualified T *", then we need to convert it
8019 before passing it in, to avoid spurious errors. */
8020 addr = build_nop (ptr_type_node, addr);
8022 else
8023 /* Since the cleanup functions we build ignore the address
8024 they're given, there's no reason to pass the actual address
8025 in, and, in general, it's cheaper to pass NULL than any
8026 other value. */
8027 addr = null_pointer_node;
8029 if (dso_parm)
8030 arg2 = cp_build_addr_expr (get_dso_handle_node (),
8031 tf_warning_or_error);
8032 else if (ob_parm)
8033 /* Just pass NULL to the dso handle parm if we don't actually
8034 have a DSO handle on this target. */
8035 arg2 = null_pointer_node;
8036 else
8037 arg2 = NULL_TREE;
8039 if (ob_parm)
8041 if (!CP_DECL_THREAD_LOCAL_P (decl)
8042 && targetm.cxx.use_aeabi_atexit ())
8044 arg1 = cleanup;
8045 arg0 = addr;
8047 else
8049 arg1 = addr;
8050 arg0 = cleanup;
8053 else
8055 arg0 = cleanup;
8056 arg1 = NULL_TREE;
8058 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8059 arg0, arg1, arg2, NULL_TREE);
8062 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8063 is its initializer. Generate code to handle the construction
8064 and destruction of DECL. */
8066 static void
8067 expand_static_init (tree decl, tree init)
8069 gcc_assert (VAR_P (decl));
8070 gcc_assert (TREE_STATIC (decl));
8072 /* Some variables require no dynamic initialization. */
8073 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8075 /* Make sure the destructor is callable. */
8076 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8077 if (!init)
8078 return;
8081 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8082 && !DECL_FUNCTION_SCOPE_P (decl))
8084 if (init)
8085 error ("non-local variable %qD declared %<__thread%> "
8086 "needs dynamic initialization", decl);
8087 else
8088 error ("non-local variable %qD declared %<__thread%> "
8089 "has a non-trivial destructor", decl);
8090 static bool informed;
8091 if (!informed)
8093 inform (DECL_SOURCE_LOCATION (decl),
8094 "C++11 %<thread_local%> allows dynamic initialization "
8095 "and destruction");
8096 informed = true;
8098 return;
8101 if (DECL_FUNCTION_SCOPE_P (decl))
8103 /* Emit code to perform this initialization but once. */
8104 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8105 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8106 tree guard, guard_addr;
8107 tree flag, begin;
8108 /* We don't need thread-safety code for thread-local vars. */
8109 bool thread_guard = (flag_threadsafe_statics
8110 && !CP_DECL_THREAD_LOCAL_P (decl));
8112 /* Emit code to perform this initialization but once. This code
8113 looks like:
8115 static <type> guard;
8116 if (!__atomic_load (guard.first_byte)) {
8117 if (__cxa_guard_acquire (&guard)) {
8118 bool flag = false;
8119 try {
8120 // Do initialization.
8121 flag = true; __cxa_guard_release (&guard);
8122 // Register variable for destruction at end of program.
8123 } catch {
8124 if (!flag) __cxa_guard_abort (&guard);
8129 Note that the `flag' variable is only set to 1 *after* the
8130 initialization is complete. This ensures that an exception,
8131 thrown during the construction, will cause the variable to
8132 reinitialized when we pass through this code again, as per:
8134 [stmt.dcl]
8136 If the initialization exits by throwing an exception, the
8137 initialization is not complete, so it will be tried again
8138 the next time control enters the declaration.
8140 This process should be thread-safe, too; multiple threads
8141 should not be able to initialize the variable more than
8142 once. */
8144 /* Create the guard variable. */
8145 guard = get_guard (decl);
8147 /* Begin the conditional initialization. */
8148 if_stmt = begin_if_stmt ();
8150 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8151 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8153 if (thread_guard)
8155 tree vfntype = NULL_TREE;
8156 tree acquire_name, release_name, abort_name;
8157 tree acquire_fn, release_fn, abort_fn;
8158 guard_addr = build_address (guard);
8160 acquire_name = get_identifier ("__cxa_guard_acquire");
8161 release_name = get_identifier ("__cxa_guard_release");
8162 abort_name = get_identifier ("__cxa_guard_abort");
8163 acquire_fn = get_global_binding (acquire_name);
8164 release_fn = get_global_binding (release_name);
8165 abort_fn = get_global_binding (abort_name);
8166 if (!acquire_fn)
8167 acquire_fn = push_library_fn
8168 (acquire_name, build_function_type_list (integer_type_node,
8169 TREE_TYPE (guard_addr),
8170 NULL_TREE),
8171 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8172 if (!release_fn || !abort_fn)
8173 vfntype = build_function_type_list (void_type_node,
8174 TREE_TYPE (guard_addr),
8175 NULL_TREE);
8176 if (!release_fn)
8177 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8178 ECF_NOTHROW | ECF_LEAF);
8179 if (!abort_fn)
8180 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8181 ECF_NOTHROW | ECF_LEAF);
8183 inner_if_stmt = begin_if_stmt ();
8184 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8185 inner_if_stmt);
8187 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8188 begin = get_target_expr (boolean_false_node);
8189 flag = TARGET_EXPR_SLOT (begin);
8191 TARGET_EXPR_CLEANUP (begin)
8192 = build3 (COND_EXPR, void_type_node, flag,
8193 void_node,
8194 build_call_n (abort_fn, 1, guard_addr));
8195 CLEANUP_EH_ONLY (begin) = 1;
8197 /* Do the initialization itself. */
8198 init = add_stmt_to_compound (begin, init);
8199 init = add_stmt_to_compound
8200 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8201 init = add_stmt_to_compound
8202 (init, build_call_n (release_fn, 1, guard_addr));
8204 else
8205 init = add_stmt_to_compound (init, set_guard (guard));
8207 /* Use atexit to register a function for destroying this static
8208 variable. */
8209 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8211 finish_expr_stmt (init);
8213 if (thread_guard)
8215 finish_compound_stmt (inner_then_clause);
8216 finish_then_clause (inner_if_stmt);
8217 finish_if_stmt (inner_if_stmt);
8220 finish_compound_stmt (then_clause);
8221 finish_then_clause (if_stmt);
8222 finish_if_stmt (if_stmt);
8224 else if (CP_DECL_THREAD_LOCAL_P (decl))
8225 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8226 else
8227 static_aggregates = tree_cons (init, decl, static_aggregates);
8231 /* Make TYPE a complete type based on INITIAL_VALUE.
8232 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8233 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8234 3 if the initializer list is empty (in pedantic mode). */
8237 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8239 int failure;
8240 tree type, elt_type;
8242 /* Don't get confused by a CONSTRUCTOR for some other type. */
8243 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8244 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8245 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8246 return 1;
8248 if (initial_value)
8250 unsigned HOST_WIDE_INT i;
8251 tree value;
8253 /* An array of character type can be initialized from a
8254 brace-enclosed string constant.
8256 FIXME: this code is duplicated from reshape_init. Probably
8257 we should just call reshape_init here? */
8258 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8259 && TREE_CODE (initial_value) == CONSTRUCTOR
8260 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8262 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8263 tree value = (*v)[0].value;
8265 if (TREE_CODE (value) == STRING_CST
8266 && v->length () == 1)
8267 initial_value = value;
8270 /* If any of the elements are parameter packs, we can't actually
8271 complete this type now because the array size is dependent. */
8272 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8274 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8275 i, value)
8277 if (PACK_EXPANSION_P (value))
8278 return 0;
8283 failure = complete_array_type (ptype, initial_value, do_default);
8285 /* We can create the array before the element type is complete, which
8286 means that we didn't have these two bits set in the original type
8287 either. In completing the type, we are expected to propagate these
8288 bits. See also complete_type which does the same thing for arrays
8289 of fixed size. */
8290 type = *ptype;
8291 if (TYPE_DOMAIN (type))
8293 elt_type = TREE_TYPE (type);
8294 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8295 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8296 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8299 return failure;
8302 /* As above, but either give an error or reject zero-size arrays, depending
8303 on COMPLAIN. */
8306 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8307 bool do_default, tsubst_flags_t complain)
8309 int failure;
8310 bool sfinae = !(complain & tf_error);
8311 /* In SFINAE context we can't be lenient about zero-size arrays. */
8312 if (sfinae)
8313 ++pedantic;
8314 failure = cp_complete_array_type (ptype, initial_value, do_default);
8315 if (sfinae)
8316 --pedantic;
8317 if (failure)
8319 if (sfinae)
8320 /* Not an error. */;
8321 else if (failure == 1)
8322 error ("initializer fails to determine size of %qT", *ptype);
8323 else if (failure == 2)
8325 if (do_default)
8326 error ("array size missing in %qT", *ptype);
8328 else if (failure == 3)
8329 error ("zero-size array %qT", *ptype);
8330 *ptype = error_mark_node;
8332 return failure;
8335 /* Return zero if something is declared to be a member of type
8336 CTYPE when in the context of CUR_TYPE. STRING is the error
8337 message to print in that case. Otherwise, quietly return 1. */
8339 static int
8340 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8342 if (ctype && ctype != cur_type)
8344 if (flags == DTOR_FLAG)
8345 error ("destructor for alien class %qT cannot be a member", ctype);
8346 else
8347 error ("constructor for alien class %qT cannot be a member", ctype);
8348 return 0;
8350 return 1;
8353 /* Subroutine of `grokdeclarator'. */
8355 /* Generate errors possibly applicable for a given set of specifiers.
8356 This is for ARM $7.1.2. */
8358 static void
8359 bad_specifiers (tree object,
8360 enum bad_spec_place type,
8361 int virtualp,
8362 int quals,
8363 int inlinep,
8364 int friendp,
8365 int raises)
8367 switch (type)
8369 case BSP_VAR:
8370 if (virtualp)
8371 error ("%qD declared as a %<virtual%> variable", object);
8372 if (quals)
8373 error ("%<const%> and %<volatile%> function specifiers on "
8374 "%qD invalid in variable declaration", object);
8375 break;
8376 case BSP_PARM:
8377 if (virtualp)
8378 error ("%qD declared as a %<virtual%> parameter", object);
8379 if (inlinep)
8380 error ("%qD declared as an %<inline%> parameter", object);
8381 if (quals)
8382 error ("%<const%> and %<volatile%> function specifiers on "
8383 "%qD invalid in parameter declaration", object);
8384 break;
8385 case BSP_TYPE:
8386 if (virtualp)
8387 error ("%qD declared as a %<virtual%> type", object);
8388 if (inlinep)
8389 error ("%qD declared as an %<inline%> type", object);
8390 if (quals)
8391 error ("%<const%> and %<volatile%> function specifiers on "
8392 "%qD invalid in type declaration", object);
8393 break;
8394 case BSP_FIELD:
8395 if (virtualp)
8396 error ("%qD declared as a %<virtual%> field", object);
8397 if (inlinep)
8398 error ("%qD declared as an %<inline%> field", object);
8399 if (quals)
8400 error ("%<const%> and %<volatile%> function specifiers on "
8401 "%qD invalid in field declaration", object);
8402 break;
8403 default:
8404 gcc_unreachable();
8406 if (friendp)
8407 error ("%q+D declared as a friend", object);
8408 if (raises
8409 && !flag_noexcept_type
8410 && (TREE_CODE (object) == TYPE_DECL
8411 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8412 && !TYPE_REFFN_P (TREE_TYPE (object))
8413 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8414 error ("%q+D declared with an exception specification", object);
8417 /* DECL is a member function or static data member and is presently
8418 being defined. Check that the definition is taking place in a
8419 valid namespace. */
8421 static void
8422 check_class_member_definition_namespace (tree decl)
8424 /* These checks only apply to member functions and static data
8425 members. */
8426 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8427 /* We check for problems with specializations in pt.c in
8428 check_specialization_namespace, where we can issue better
8429 diagnostics. */
8430 if (processing_specialization)
8431 return;
8432 /* We check this in check_explicit_instantiation_namespace. */
8433 if (processing_explicit_instantiation)
8434 return;
8435 /* [class.mfct]
8437 A member function definition that appears outside of the
8438 class definition shall appear in a namespace scope enclosing
8439 the class definition.
8441 [class.static.data]
8443 The definition for a static data member shall appear in a
8444 namespace scope enclosing the member's class definition. */
8445 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8446 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8447 decl, DECL_CONTEXT (decl));
8450 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8451 METHOD_TYPE for a non-static member function; QUALS are the
8452 cv-qualifiers that apply to the function. */
8454 tree
8455 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8457 tree this_type;
8458 tree qual_type;
8459 tree parm;
8460 cp_cv_quals this_quals;
8462 if (CLASS_TYPE_P (type))
8464 this_type
8465 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8466 this_type = build_pointer_type (this_type);
8468 else
8469 this_type = type_of_this_parm (type);
8470 /* The `this' parameter is implicitly `const'; it cannot be
8471 assigned to. */
8472 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8473 qual_type = cp_build_qualified_type (this_type, this_quals);
8474 parm = build_artificial_parm (fn, this_identifier, qual_type);
8475 cp_apply_type_quals_to_decl (this_quals, parm);
8476 return parm;
8479 /* DECL is a static member function. Complain if it was declared
8480 with function-cv-quals. */
8482 static void
8483 check_static_quals (tree decl, cp_cv_quals quals)
8485 if (quals != TYPE_UNQUALIFIED)
8486 error ("static member function %q#D declared with type qualifiers",
8487 decl);
8490 // Check that FN takes no arguments and returns bool.
8491 static void
8492 check_concept_fn (tree fn)
8494 // A constraint is nullary.
8495 if (DECL_ARGUMENTS (fn))
8496 error ("concept %q#D declared with function parameters", fn);
8498 // The declared return type of the concept shall be bool, and
8499 // it shall not be deduced from it definition.
8500 tree type = TREE_TYPE (TREE_TYPE (fn));
8501 if (is_auto (type))
8502 error ("concept %q#D declared with a deduced return type", fn);
8503 else if (type != boolean_type_node)
8504 error ("concept %q#D with non-%<bool%> return type %qT", fn, type);
8507 /* Helper function. Replace the temporary this parameter injected
8508 during cp_finish_omp_declare_simd with the real this parameter. */
8510 static tree
8511 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8513 tree this_parm = (tree) data;
8514 if (TREE_CODE (*tp) == PARM_DECL
8515 && DECL_NAME (*tp) == this_identifier
8516 && *tp != this_parm)
8517 *tp = this_parm;
8518 else if (TYPE_P (*tp))
8519 *walk_subtrees = 0;
8520 return NULL_TREE;
8523 /* CTYPE is class type, or null if non-class.
8524 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8525 or METHOD_TYPE.
8526 DECLARATOR is the function's name.
8527 PARMS is a chain of PARM_DECLs for the function.
8528 VIRTUALP is truthvalue of whether the function is virtual or not.
8529 FLAGS are to be passed through to `grokclassfn'.
8530 QUALS are qualifiers indicating whether the function is `const'
8531 or `volatile'.
8532 RAISES is a list of exceptions that this function can raise.
8533 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8534 not look, and -1 if we should not call `grokclassfn' at all.
8536 SFK is the kind of special function (if any) for the new function.
8538 Returns `NULL_TREE' if something goes wrong, after issuing
8539 applicable error messages. */
8541 static tree
8542 grokfndecl (tree ctype,
8543 tree type,
8544 tree declarator,
8545 tree parms,
8546 tree orig_declarator,
8547 tree decl_reqs,
8548 int virtualp,
8549 enum overload_flags flags,
8550 cp_cv_quals quals,
8551 cp_ref_qualifier rqual,
8552 tree raises,
8553 int check,
8554 int friendp,
8555 int publicp,
8556 int inlinep,
8557 bool deletedp,
8558 special_function_kind sfk,
8559 bool funcdef_flag,
8560 int template_count,
8561 tree in_namespace,
8562 tree* attrlist,
8563 location_t location)
8565 tree decl;
8566 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8567 tree t;
8569 // Was the concept specifier present?
8570 bool concept_p = inlinep & 4;
8572 // Concept declarations must have a corresponding definition.
8573 if (concept_p && !funcdef_flag)
8575 error ("concept %qD has no definition", declarator);
8576 return NULL_TREE;
8579 if (rqual)
8580 type = build_ref_qualified_type (type, rqual);
8581 if (raises)
8582 type = build_exception_variant (type, raises);
8584 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8586 /* Set the constraints on the declaration. */
8587 if (flag_concepts)
8589 tree tmpl_reqs = NULL_TREE;
8590 if (processing_template_decl > template_class_depth (ctype))
8591 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8593 /* Adjust the required expression into a constraint. */
8594 if (decl_reqs)
8595 decl_reqs = normalize_expression (decl_reqs);
8597 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8598 set_constraints (decl, ci);
8601 /* If we have an explicit location, use it, otherwise use whatever
8602 build_lang_decl used (probably input_location). */
8603 if (location != UNKNOWN_LOCATION)
8604 DECL_SOURCE_LOCATION (decl) = location;
8606 if (TREE_CODE (type) == METHOD_TYPE)
8608 tree parm = build_this_parm (decl, type, quals);
8609 DECL_CHAIN (parm) = parms;
8610 parms = parm;
8612 /* Allocate space to hold the vptr bit if needed. */
8613 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8616 DECL_ARGUMENTS (decl) = parms;
8617 for (t = parms; t; t = DECL_CHAIN (t))
8618 DECL_CONTEXT (t) = decl;
8620 /* Propagate volatile out from type to decl. */
8621 if (TYPE_VOLATILE (type))
8622 TREE_THIS_VOLATILE (decl) = 1;
8624 /* Setup decl according to sfk. */
8625 switch (sfk)
8627 case sfk_constructor:
8628 case sfk_copy_constructor:
8629 case sfk_move_constructor:
8630 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8631 DECL_NAME (decl) = ctor_identifier;
8632 break;
8633 case sfk_destructor:
8634 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8635 DECL_NAME (decl) = dtor_identifier;
8636 break;
8637 default:
8638 break;
8641 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8643 if (funcdef_flag)
8644 error ("defining explicit specialization %qD in friend declaration",
8645 orig_declarator);
8646 else
8648 tree fns = TREE_OPERAND (orig_declarator, 0);
8649 tree args = TREE_OPERAND (orig_declarator, 1);
8651 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8653 /* Something like `template <class T> friend void f<T>()'. */
8654 error ("invalid use of template-id %qD in declaration "
8655 "of primary template",
8656 orig_declarator);
8657 return NULL_TREE;
8661 /* A friend declaration of the form friend void f<>(). Record
8662 the information in the TEMPLATE_ID_EXPR. */
8663 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8665 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8666 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8668 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8669 if (TREE_PURPOSE (t)
8670 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8672 error ("default arguments are not allowed in declaration "
8673 "of friend template specialization %qD",
8674 decl);
8675 return NULL_TREE;
8678 if (inlinep & 1)
8680 error ("%<inline%> is not allowed in declaration of friend "
8681 "template specialization %qD",
8682 decl);
8683 return NULL_TREE;
8688 /* If this decl has namespace scope, set that up. */
8689 if (in_namespace)
8690 set_decl_namespace (decl, in_namespace, friendp);
8691 else if (!ctype)
8692 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8694 /* `main' and builtins have implicit 'C' linkage. */
8695 if (ctype == NULL_TREE
8696 && DECL_FILE_SCOPE_P (decl)
8697 && current_lang_name == lang_name_cplusplus
8698 && (MAIN_NAME_P (declarator)
8699 || (IDENTIFIER_LENGTH (declarator) > 10
8700 && IDENTIFIER_POINTER (declarator)[0] == '_'
8701 && IDENTIFIER_POINTER (declarator)[1] == '_'
8702 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8703 "builtin_", 8) == 0)
8704 || (targetcm.cxx_implicit_extern_c
8705 && (targetcm.cxx_implicit_extern_c
8706 (IDENTIFIER_POINTER (declarator))))))
8707 SET_DECL_LANGUAGE (decl, lang_c);
8709 /* Should probably propagate const out from type to decl I bet (mrs). */
8710 if (staticp)
8712 DECL_STATIC_FUNCTION_P (decl) = 1;
8713 DECL_CONTEXT (decl) = ctype;
8716 if (deletedp)
8717 DECL_DELETED_FN (decl) = 1;
8719 if (ctype)
8721 DECL_CONTEXT (decl) = ctype;
8722 if (funcdef_flag)
8723 check_class_member_definition_namespace (decl);
8726 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8728 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8729 error ("cannot declare %<::main%> to be a template");
8730 if (inlinep & 1)
8731 error ("cannot declare %<::main%> to be inline");
8732 if (inlinep & 2)
8733 error ("cannot declare %<::main%> to be %<constexpr%>");
8734 if (!publicp)
8735 error ("cannot declare %<::main%> to be static");
8736 inlinep = 0;
8737 publicp = 1;
8740 /* Members of anonymous types and local classes have no linkage; make
8741 them internal. If a typedef is made later, this will be changed. */
8742 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8743 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8744 publicp = 0;
8746 if (publicp && cxx_dialect == cxx98)
8748 /* [basic.link]: A name with no linkage (notably, the name of a class
8749 or enumeration declared in a local scope) shall not be used to
8750 declare an entity with linkage.
8752 DR 757 relaxes this restriction for C++0x. */
8753 no_linkage_error (decl);
8756 TREE_PUBLIC (decl) = publicp;
8757 if (! publicp)
8759 DECL_INTERFACE_KNOWN (decl) = 1;
8760 DECL_NOT_REALLY_EXTERN (decl) = 1;
8763 /* If the declaration was declared inline, mark it as such. */
8764 if (inlinep)
8766 DECL_DECLARED_INLINE_P (decl) = 1;
8767 if (publicp)
8768 DECL_COMDAT (decl) = 1;
8770 if (inlinep & 2)
8771 DECL_DECLARED_CONSTEXPR_P (decl) = true;
8773 // If the concept declaration specifier was found, check
8774 // that the declaration satisfies the necessary requirements.
8775 if (concept_p)
8777 DECL_DECLARED_CONCEPT_P (decl) = true;
8778 check_concept_fn (decl);
8781 DECL_EXTERNAL (decl) = 1;
8782 if (TREE_CODE (type) == FUNCTION_TYPE)
8784 if (quals || rqual)
8785 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8786 TYPE_UNQUALIFIED,
8787 REF_QUAL_NONE);
8789 if (quals)
8791 error (ctype
8792 ? G_("static member function %qD cannot have cv-qualifier")
8793 : G_("non-member function %qD cannot have cv-qualifier"),
8794 decl);
8795 quals = TYPE_UNQUALIFIED;
8798 if (rqual)
8800 error (ctype
8801 ? G_("static member function %qD cannot have ref-qualifier")
8802 : G_("non-member function %qD cannot have ref-qualifier"),
8803 decl);
8804 rqual = REF_QUAL_NONE;
8808 if (deduction_guide_p (decl))
8810 if (!DECL_NAMESPACE_SCOPE_P (decl))
8812 error_at (location, "deduction guide %qD must be declared at "
8813 "namespace scope", decl);
8814 return NULL_TREE;
8816 if (funcdef_flag)
8817 error_at (location,
8818 "deduction guide %qD must not have a function body", decl);
8820 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
8821 && !grok_op_properties (decl, /*complain=*/true))
8822 return NULL_TREE;
8823 else if (UDLIT_OPER_P (DECL_NAME (decl)))
8825 bool long_long_unsigned_p;
8826 bool long_double_p;
8827 const char *suffix = NULL;
8828 /* [over.literal]/6: Literal operators shall not have C linkage. */
8829 if (DECL_LANGUAGE (decl) == lang_c)
8831 error ("literal operator with C linkage");
8832 maybe_show_extern_c_location ();
8833 return NULL_TREE;
8836 if (DECL_NAMESPACE_SCOPE_P (decl))
8838 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8839 &long_double_p))
8841 error ("%qD has invalid argument list", decl);
8842 return NULL_TREE;
8845 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
8846 if (long_long_unsigned_p)
8848 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
8849 warning (0, "integer suffix %qs"
8850 " shadowed by implementation", suffix);
8852 else if (long_double_p)
8854 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
8855 warning (0, "floating point suffix %qs"
8856 " shadowed by implementation", suffix);
8859 else
8861 error ("%qD must be a non-member function", decl);
8862 return NULL_TREE;
8866 if (funcdef_flag)
8867 /* Make the init_value nonzero so pushdecl knows this is not
8868 tentative. error_mark_node is replaced later with the BLOCK. */
8869 DECL_INITIAL (decl) = error_mark_node;
8871 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8872 TREE_NOTHROW (decl) = 1;
8874 if (flag_openmp || flag_openmp_simd)
8876 /* Adjust "omp declare simd" attributes. */
8877 tree ods = lookup_attribute ("omp declare simd", *attrlist);
8878 if (ods)
8880 tree attr;
8881 for (attr = ods; attr;
8882 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
8884 if (TREE_CODE (type) == METHOD_TYPE)
8885 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
8886 DECL_ARGUMENTS (decl), NULL);
8887 if (TREE_VALUE (attr) != NULL_TREE)
8889 tree cl = TREE_VALUE (TREE_VALUE (attr));
8890 cl = c_omp_declare_simd_clauses_to_numbers
8891 (DECL_ARGUMENTS (decl), cl);
8892 if (cl)
8893 TREE_VALUE (TREE_VALUE (attr)) = cl;
8894 else
8895 TREE_VALUE (attr) = NULL_TREE;
8901 /* Caller will do the rest of this. */
8902 if (check < 0)
8903 return decl;
8905 if (ctype != NULL_TREE)
8906 grokclassfn (ctype, decl, flags);
8908 /* 12.4/3 */
8909 if (cxx_dialect >= cxx11
8910 && DECL_DESTRUCTOR_P (decl)
8911 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
8912 && !processing_template_decl)
8913 deduce_noexcept_on_destructor (decl);
8915 decl = check_explicit_specialization (orig_declarator, decl,
8916 template_count,
8917 2 * funcdef_flag +
8918 4 * (friendp != 0) +
8919 8 * concept_p);
8920 if (decl == error_mark_node)
8921 return NULL_TREE;
8923 if (DECL_STATIC_FUNCTION_P (decl))
8924 check_static_quals (decl, quals);
8926 if (attrlist)
8928 cplus_decl_attributes (&decl, *attrlist, 0);
8929 *attrlist = NULL_TREE;
8932 /* Check main's type after attributes have been applied. */
8933 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8935 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8936 integer_type_node))
8938 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
8939 tree newtype;
8940 error ("%<::main%> must return %<int%>");
8941 newtype = build_function_type (integer_type_node, oldtypeargs);
8942 TREE_TYPE (decl) = newtype;
8944 if (warn_main)
8945 check_main_parameter_types (decl);
8948 if (ctype != NULL_TREE && check)
8950 tree old_decl = check_classfn (ctype, decl,
8951 (processing_template_decl
8952 > template_class_depth (ctype))
8953 ? current_template_parms
8954 : NULL_TREE);
8956 if (old_decl == error_mark_node)
8957 return NULL_TREE;
8959 if (old_decl)
8961 tree ok;
8962 tree pushed_scope;
8964 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8965 /* Because grokfndecl is always supposed to return a
8966 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8967 here. We depend on our callers to figure out that its
8968 really a template that's being returned. */
8969 old_decl = DECL_TEMPLATE_RESULT (old_decl);
8971 if (DECL_STATIC_FUNCTION_P (old_decl)
8972 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8974 /* Remove the `this' parm added by grokclassfn. */
8975 revert_static_member_fn (decl);
8976 check_static_quals (decl, quals);
8978 if (DECL_ARTIFICIAL (old_decl))
8980 error ("definition of implicitly-declared %qD", old_decl);
8981 return NULL_TREE;
8983 else if (DECL_DEFAULTED_FN (old_decl))
8985 error ("definition of explicitly-defaulted %q+D", decl);
8986 inform (DECL_SOURCE_LOCATION (old_decl),
8987 "%q#D explicitly defaulted here", old_decl);
8988 return NULL_TREE;
8991 /* Since we've smashed OLD_DECL to its
8992 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8993 if (TREE_CODE (decl) == TEMPLATE_DECL)
8994 decl = DECL_TEMPLATE_RESULT (decl);
8996 /* Attempt to merge the declarations. This can fail, in
8997 the case of some invalid specialization declarations. */
8998 pushed_scope = push_scope (ctype);
8999 ok = duplicate_decls (decl, old_decl, friendp);
9000 if (pushed_scope)
9001 pop_scope (pushed_scope);
9002 if (!ok)
9004 error ("no %q#D member function declared in class %qT",
9005 decl, ctype);
9006 return NULL_TREE;
9008 if (ok == error_mark_node)
9009 return NULL_TREE;
9010 return old_decl;
9014 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9015 return NULL_TREE;
9017 if (ctype == NULL_TREE || check)
9018 return decl;
9020 if (virtualp)
9021 DECL_VIRTUAL_P (decl) = 1;
9023 return decl;
9026 /* decl is a FUNCTION_DECL.
9027 specifiers are the parsed virt-specifiers.
9029 Set flags to reflect the virt-specifiers.
9031 Returns decl. */
9033 static tree
9034 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
9036 if (decl == NULL_TREE)
9037 return decl;
9038 if (specifiers & VIRT_SPEC_OVERRIDE)
9039 DECL_OVERRIDE_P (decl) = 1;
9040 if (specifiers & VIRT_SPEC_FINAL)
9041 DECL_FINAL_P (decl) = 1;
9042 return decl;
9045 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
9046 the linkage that DECL will receive in the object file. */
9048 static void
9049 set_linkage_for_static_data_member (tree decl)
9051 /* A static data member always has static storage duration and
9052 external linkage. Note that static data members are forbidden in
9053 local classes -- the only situation in which a class has
9054 non-external linkage. */
9055 TREE_PUBLIC (decl) = 1;
9056 TREE_STATIC (decl) = 1;
9057 /* For non-template classes, static data members are always put
9058 out in exactly those files where they are defined, just as
9059 with ordinary namespace-scope variables. */
9060 if (!processing_template_decl)
9061 DECL_INTERFACE_KNOWN (decl) = 1;
9064 /* Create a VAR_DECL named NAME with the indicated TYPE.
9066 If SCOPE is non-NULL, it is the class type or namespace containing
9067 the variable. If SCOPE is NULL, the variable should is created in
9068 the innermost enclosing scope. */
9070 static tree
9071 grokvardecl (tree type,
9072 tree name,
9073 tree orig_declarator,
9074 const cp_decl_specifier_seq *declspecs,
9075 int initialized,
9076 int type_quals,
9077 int inlinep,
9078 bool conceptp,
9079 int template_count,
9080 tree scope)
9082 tree decl;
9083 tree explicit_scope;
9085 gcc_assert (!name || identifier_p (name));
9087 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9088 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9090 /* Compute the scope in which to place the variable, but remember
9091 whether or not that scope was explicitly specified by the user. */
9092 explicit_scope = scope;
9093 if (!scope)
9095 /* An explicit "extern" specifier indicates a namespace-scope
9096 variable. */
9097 if (declspecs->storage_class == sc_extern)
9098 scope = current_decl_namespace ();
9099 else if (!at_function_scope_p ())
9100 scope = current_scope ();
9103 if (scope
9104 && (/* If the variable is a namespace-scope variable declared in a
9105 template, we need DECL_LANG_SPECIFIC. */
9106 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9107 /* Similarly for namespace-scope variables with language linkage
9108 other than C++. */
9109 || (TREE_CODE (scope) == NAMESPACE_DECL
9110 && current_lang_name != lang_name_cplusplus)
9111 /* Similarly for static data members. */
9112 || TYPE_P (scope)
9113 /* Similarly for explicit specializations. */
9114 || (orig_declarator
9115 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9116 decl = build_lang_decl (VAR_DECL, name, type);
9117 else
9118 decl = build_decl (input_location, VAR_DECL, name, type);
9120 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9121 set_decl_namespace (decl, explicit_scope, 0);
9122 else
9123 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9125 if (declspecs->storage_class == sc_extern)
9127 DECL_THIS_EXTERN (decl) = 1;
9128 DECL_EXTERNAL (decl) = !initialized;
9131 if (DECL_CLASS_SCOPE_P (decl))
9133 set_linkage_for_static_data_member (decl);
9134 /* This function is only called with out-of-class definitions. */
9135 DECL_EXTERNAL (decl) = 0;
9136 check_class_member_definition_namespace (decl);
9138 /* At top level, either `static' or no s.c. makes a definition
9139 (perhaps tentative), and absence of `static' makes it public. */
9140 else if (toplevel_bindings_p ())
9142 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9143 && (DECL_THIS_EXTERN (decl)
9144 || ! constp
9145 || volatilep
9146 || inlinep));
9147 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9149 /* Not at top level, only `static' makes a static definition. */
9150 else
9152 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9153 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9156 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9158 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9160 CP_DECL_THREAD_LOCAL_P (decl) = true;
9161 if (!processing_template_decl)
9162 set_decl_tls_model (decl, decl_default_tls_model (decl));
9164 if (declspecs->gnu_thread_keyword_p)
9165 SET_DECL_GNU_TLS_P (decl);
9168 /* If the type of the decl has no linkage, make sure that we'll
9169 notice that in mark_used. */
9170 if (cxx_dialect > cxx98
9171 && decl_linkage (decl) != lk_none
9172 && DECL_LANG_SPECIFIC (decl) == NULL
9173 && !DECL_EXTERN_C_P (decl)
9174 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9175 retrofit_lang_decl (decl);
9177 if (TREE_PUBLIC (decl))
9179 /* [basic.link]: A name with no linkage (notably, the name of a class
9180 or enumeration declared in a local scope) shall not be used to
9181 declare an entity with linkage.
9183 DR 757 relaxes this restriction for C++0x. */
9184 if (cxx_dialect < cxx11)
9185 no_linkage_error (decl);
9187 else
9188 DECL_INTERFACE_KNOWN (decl) = 1;
9190 if (DECL_NAME (decl)
9191 && MAIN_NAME_P (DECL_NAME (decl))
9192 && scope == global_namespace)
9193 error ("cannot declare %<::main%> to be a global variable");
9195 /* Check that the variable can be safely declared as a concept.
9196 Note that this also forbids explicit specializations. */
9197 if (conceptp)
9199 if (!processing_template_decl)
9201 error ("a non-template variable cannot be %<concept%>");
9202 return NULL_TREE;
9204 else
9205 DECL_DECLARED_CONCEPT_P (decl) = true;
9206 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9207 error_at (declspecs->locations[ds_type_spec],
9208 "concept must have type %<bool%>");
9210 else if (flag_concepts
9211 && processing_template_decl > template_class_depth (scope))
9213 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9214 tree ci = build_constraints (reqs, NULL_TREE);
9215 set_constraints (decl, ci);
9218 // Handle explicit specializations and instantiations of variable templates.
9219 if (orig_declarator)
9220 decl = check_explicit_specialization (orig_declarator, decl,
9221 template_count, conceptp * 8);
9223 return decl != error_mark_node ? decl : NULL_TREE;
9226 /* Create and return a canonical pointer to member function type, for
9227 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9229 tree
9230 build_ptrmemfunc_type (tree type)
9232 tree field, fields;
9233 tree t;
9235 if (type == error_mark_node)
9236 return type;
9238 /* Make sure that we always have the unqualified pointer-to-member
9239 type first. */
9240 if (cp_cv_quals quals = cp_type_quals (type))
9242 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9243 return cp_build_qualified_type (unqual, quals);
9246 /* If a canonical type already exists for this type, use it. We use
9247 this method instead of type_hash_canon, because it only does a
9248 simple equality check on the list of field members. */
9250 t = TYPE_PTRMEMFUNC_TYPE (type);
9251 if (t)
9252 return t;
9254 t = make_node (RECORD_TYPE);
9256 /* Let the front end know this is a pointer to member function. */
9257 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9259 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9260 fields = field;
9262 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9263 delta_type_node);
9264 DECL_CHAIN (field) = fields;
9265 fields = field;
9267 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9269 /* Zap out the name so that the back end will give us the debugging
9270 information for this anonymous RECORD_TYPE. */
9271 TYPE_NAME (t) = NULL_TREE;
9273 /* Cache this pointer-to-member type so that we can find it again
9274 later. */
9275 TYPE_PTRMEMFUNC_TYPE (type) = t;
9277 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9278 SET_TYPE_STRUCTURAL_EQUALITY (t);
9279 else if (TYPE_CANONICAL (type) != type)
9280 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9282 return t;
9285 /* Create and return a pointer to data member type. */
9287 tree
9288 build_ptrmem_type (tree class_type, tree member_type)
9290 if (TREE_CODE (member_type) == METHOD_TYPE)
9292 cp_cv_quals quals = type_memfn_quals (member_type);
9293 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9294 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9295 return build_ptrmemfunc_type (build_pointer_type (member_type));
9297 else
9299 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9300 return build_offset_type (class_type, member_type);
9304 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9305 Check to see that the definition is valid. Issue appropriate error
9306 messages. Return 1 if the definition is particularly bad, or 0
9307 otherwise. */
9309 static int
9310 check_static_variable_definition (tree decl, tree type)
9312 /* Avoid redundant diagnostics on out-of-class definitions. */
9313 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9314 return 0;
9315 /* Can't check yet if we don't know the type. */
9316 if (dependent_type_p (type))
9317 return 0;
9318 /* If DECL is declared constexpr, we'll do the appropriate checks
9319 in check_initializer. Similarly for inline static data members. */
9320 if (DECL_P (decl)
9321 && (DECL_DECLARED_CONSTEXPR_P (decl)
9322 || DECL_VAR_DECLARED_INLINE_P (decl)))
9323 return 0;
9324 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9326 if (!COMPLETE_TYPE_P (type))
9327 error_at (DECL_SOURCE_LOCATION (decl),
9328 "in-class initialization of static data member %q#D of "
9329 "incomplete type", decl);
9330 else if (literal_type_p (type))
9331 permerror (DECL_SOURCE_LOCATION (decl),
9332 "%<constexpr%> needed for in-class initialization of "
9333 "static data member %q#D of non-integral type", decl);
9334 else
9335 error_at (DECL_SOURCE_LOCATION (decl),
9336 "in-class initialization of static data member %q#D of "
9337 "non-literal type", decl);
9338 return 1;
9341 /* Motion 10 at San Diego: If a static const integral data member is
9342 initialized with an integral constant expression, the initializer
9343 may appear either in the declaration (within the class), or in
9344 the definition, but not both. If it appears in the class, the
9345 member is a member constant. The file-scope definition is always
9346 required. */
9347 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9349 error_at (DECL_SOURCE_LOCATION (decl),
9350 "invalid in-class initialization of static data member "
9351 "of non-integral type %qT",
9352 type);
9353 return 1;
9355 else if (!CP_TYPE_CONST_P (type))
9356 error_at (DECL_SOURCE_LOCATION (decl),
9357 "ISO C++ forbids in-class initialization of non-const "
9358 "static member %qD",
9359 decl);
9360 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9361 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9362 "ISO C++ forbids initialization of member constant "
9363 "%qD of non-integral type %qT", decl, type);
9365 return 0;
9368 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9369 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9370 expressions out into temporary variables so that walk_tree doesn't
9371 step into them (c++/15764). */
9373 static tree
9374 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9376 hash_set<tree> *pset = (hash_set<tree> *)data;
9377 tree expr = *expr_p;
9378 if (TREE_CODE (expr) == SAVE_EXPR)
9380 tree op = TREE_OPERAND (expr, 0);
9381 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9382 if (TREE_SIDE_EFFECTS (op))
9383 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9384 *walk_subtrees = 0;
9386 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9387 *walk_subtrees = 0;
9388 return NULL;
9391 /* Entry point for the above. */
9393 static void
9394 stabilize_vla_size (tree size)
9396 hash_set<tree> pset;
9397 /* Break out any function calls into temporary variables. */
9398 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9401 /* Reduce a SIZEOF_EXPR to its value. */
9403 tree
9404 fold_sizeof_expr (tree t)
9406 tree r;
9407 if (SIZEOF_EXPR_TYPE_P (t))
9408 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9409 SIZEOF_EXPR, false);
9410 else if (TYPE_P (TREE_OPERAND (t, 0)))
9411 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9412 false);
9413 else
9414 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9415 false);
9416 if (r == error_mark_node)
9417 r = size_one_node;
9418 return r;
9421 /* Given the SIZE (i.e., number of elements) in an array, compute
9422 an appropriate index type for the array. If non-NULL, NAME is
9423 the name of the entity being declared. */
9425 tree
9426 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9428 tree itype;
9429 tree osize = size;
9431 if (error_operand_p (size))
9432 return error_mark_node;
9434 if (!type_dependent_expression_p (size))
9436 tree type = TREE_TYPE (size);
9438 size = mark_rvalue_use (size);
9440 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9441 && TREE_SIDE_EFFECTS (size))
9442 /* In C++98, we mark a non-constant array bound with a magic
9443 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9444 else
9446 size = instantiate_non_dependent_expr_sfinae (size, complain);
9448 if (CLASS_TYPE_P (type)
9449 && CLASSTYPE_LITERAL_P (type))
9451 size = build_expr_type_conversion (WANT_INT, size, true);
9452 if (!size)
9454 if (!(complain & tf_error))
9455 return error_mark_node;
9456 if (name)
9457 error ("size of array %qD has non-integral type %qT",
9458 name, type);
9459 else
9460 error ("size of array has non-integral type %qT", type);
9461 size = integer_one_node;
9463 if (size == error_mark_node)
9464 return error_mark_node;
9465 type = TREE_TYPE (size);
9468 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9469 size = maybe_constant_value (size);
9471 if (!TREE_CONSTANT (size))
9472 size = osize;
9475 if (error_operand_p (size))
9476 return error_mark_node;
9478 /* The array bound must be an integer type. */
9479 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9481 if (!(complain & tf_error))
9482 return error_mark_node;
9483 if (name)
9484 error ("size of array %qD has non-integral type %qT", name, type);
9485 else
9486 error ("size of array has non-integral type %qT", type);
9487 size = integer_one_node;
9488 type = TREE_TYPE (size);
9492 /* A type is dependent if it is...an array type constructed from any
9493 dependent type or whose size is specified by a constant expression
9494 that is value-dependent. */
9495 /* We can only call value_dependent_expression_p on integral constant
9496 expressions; treat non-constant expressions as dependent, too. */
9497 if (processing_template_decl
9498 && (type_dependent_expression_p (size)
9499 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9501 /* We cannot do any checking for a SIZE that isn't known to be
9502 constant. Just build the index type and mark that it requires
9503 structural equality checks. */
9504 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9505 size, size_one_node));
9506 TYPE_DEPENDENT_P (itype) = 1;
9507 TYPE_DEPENDENT_P_VALID (itype) = 1;
9508 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9509 return itype;
9512 if (TREE_CODE (size) != INTEGER_CST)
9514 tree folded = cp_fully_fold (size);
9515 if (TREE_CODE (folded) == INTEGER_CST)
9516 pedwarn (location_of (size), OPT_Wpedantic,
9517 "size of array is not an integral constant-expression");
9518 /* Use the folded result for VLAs, too; it will have resolved
9519 SIZEOF_EXPR. */
9520 size = folded;
9523 /* Normally, the array-bound will be a constant. */
9524 if (TREE_CODE (size) == INTEGER_CST)
9526 /* Check to see if the array bound overflowed. Make that an
9527 error, no matter how generous we're being. */
9528 constant_expression_error (size);
9530 /* An array must have a positive number of elements. */
9531 if (tree_int_cst_lt (size, integer_zero_node))
9533 if (!(complain & tf_error))
9534 return error_mark_node;
9535 if (name)
9536 error ("size of array %qD is negative", name);
9537 else
9538 error ("size of array is negative");
9539 size = integer_one_node;
9541 /* As an extension we allow zero-sized arrays. */
9542 else if (integer_zerop (size))
9544 if (!(complain & tf_error))
9545 /* We must fail if performing argument deduction (as
9546 indicated by the state of complain), so that
9547 another substitution can be found. */
9548 return error_mark_node;
9549 else if (in_system_header_at (input_location))
9550 /* Allow them in system headers because glibc uses them. */;
9551 else if (name)
9552 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9553 else
9554 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9557 else if (TREE_CONSTANT (size)
9558 /* We don't allow VLAs at non-function scopes, or during
9559 tentative template substitution. */
9560 || !at_function_scope_p ()
9561 || !(complain & tf_error))
9563 if (!(complain & tf_error))
9564 return error_mark_node;
9565 /* `(int) &fn' is not a valid array bound. */
9566 if (name)
9567 error ("size of array %qD is not an integral constant-expression",
9568 name);
9569 else
9570 error ("size of array is not an integral constant-expression");
9571 size = integer_one_node;
9573 else if (pedantic && warn_vla != 0)
9575 if (name)
9576 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9577 else
9578 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9580 else if (warn_vla > 0)
9582 if (name)
9583 warning (OPT_Wvla,
9584 "variable length array %qD is used", name);
9585 else
9586 warning (OPT_Wvla,
9587 "variable length array is used");
9590 if (processing_template_decl && !TREE_CONSTANT (size))
9591 /* A variable sized array. */
9592 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9593 else
9595 /* Compute the index of the largest element in the array. It is
9596 one less than the number of elements in the array. We save
9597 and restore PROCESSING_TEMPLATE_DECL so that computations in
9598 cp_build_binary_op will be appropriately folded. */
9600 processing_template_decl_sentinel s;
9601 itype = cp_build_binary_op (input_location,
9602 MINUS_EXPR,
9603 cp_convert (ssizetype, size, complain),
9604 cp_convert (ssizetype, integer_one_node,
9605 complain),
9606 complain);
9607 itype = maybe_constant_value (itype);
9610 if (!TREE_CONSTANT (itype))
9612 /* A variable sized array. */
9613 itype = variable_size (itype);
9615 stabilize_vla_size (itype);
9617 if (sanitize_flags_p (SANITIZE_VLA)
9618 && current_function_decl != NULL_TREE)
9620 /* We have to add 1 -- in the ubsan routine we generate
9621 LE_EXPR rather than LT_EXPR. */
9622 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9623 build_one_cst (TREE_TYPE (itype)));
9624 t = ubsan_instrument_vla (input_location, t);
9625 finish_expr_stmt (t);
9628 /* Make sure that there was no overflow when creating to a signed
9629 index type. (For example, on a 32-bit machine, an array with
9630 size 2^32 - 1 is too big.) */
9631 else if (TREE_CODE (itype) == INTEGER_CST
9632 && TREE_OVERFLOW (itype))
9634 if (!(complain & tf_error))
9635 return error_mark_node;
9636 error ("overflow in array dimension");
9637 TREE_OVERFLOW (itype) = 0;
9641 /* Create and return the appropriate index type. */
9642 itype = build_index_type (itype);
9644 /* If the index type were dependent, we would have returned early, so
9645 remember that it isn't. */
9646 TYPE_DEPENDENT_P (itype) = 0;
9647 TYPE_DEPENDENT_P_VALID (itype) = 1;
9648 return itype;
9651 /* Returns the scope (if any) in which the entity declared by
9652 DECLARATOR will be located. If the entity was declared with an
9653 unqualified name, NULL_TREE is returned. */
9655 tree
9656 get_scope_of_declarator (const cp_declarator *declarator)
9658 while (declarator && declarator->kind != cdk_id)
9659 declarator = declarator->declarator;
9661 /* If the declarator-id is a SCOPE_REF, the scope in which the
9662 declaration occurs is the first operand. */
9663 if (declarator
9664 && declarator->u.id.qualifying_scope)
9665 return declarator->u.id.qualifying_scope;
9667 /* Otherwise, the declarator is not a qualified name; the entity will
9668 be declared in the current scope. */
9669 return NULL_TREE;
9672 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9673 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9674 with this type. */
9676 static tree
9677 create_array_type_for_decl (tree name, tree type, tree size)
9679 tree itype = NULL_TREE;
9681 /* If things have already gone awry, bail now. */
9682 if (type == error_mark_node || size == error_mark_node)
9683 return error_mark_node;
9685 /* 8.3.4/1: If the type of the identifier of D contains the auto
9686 type-specifier, the program is ill-formed. */
9687 if (type_uses_auto (type))
9689 error ("%qD declared as array of %qT", name, type);
9690 return error_mark_node;
9693 /* If there are some types which cannot be array elements,
9694 issue an error-message and return. */
9695 switch (TREE_CODE (type))
9697 case VOID_TYPE:
9698 if (name)
9699 error ("declaration of %qD as array of void", name);
9700 else
9701 error ("creating array of void");
9702 return error_mark_node;
9704 case FUNCTION_TYPE:
9705 if (name)
9706 error ("declaration of %qD as array of functions", name);
9707 else
9708 error ("creating array of functions");
9709 return error_mark_node;
9711 case REFERENCE_TYPE:
9712 if (name)
9713 error ("declaration of %qD as array of references", name);
9714 else
9715 error ("creating array of references");
9716 return error_mark_node;
9718 case METHOD_TYPE:
9719 if (name)
9720 error ("declaration of %qD as array of function members", name);
9721 else
9722 error ("creating array of function members");
9723 return error_mark_node;
9725 default:
9726 break;
9729 /* [dcl.array]
9731 The constant expressions that specify the bounds of the arrays
9732 can be omitted only for the first member of the sequence. */
9733 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9735 if (name)
9736 error ("declaration of %qD as multidimensional array must "
9737 "have bounds for all dimensions except the first",
9738 name);
9739 else
9740 error ("multidimensional array must have bounds for all "
9741 "dimensions except the first");
9743 return error_mark_node;
9746 /* Figure out the index type for the array. */
9747 if (size)
9748 itype = compute_array_index_type (name, size, tf_warning_or_error);
9750 /* [dcl.array]
9751 T is called the array element type; this type shall not be [...] an
9752 abstract class type. */
9753 abstract_virtuals_error (name, type);
9755 return build_cplus_array_type (type, itype);
9758 /* Returns the smallest location != UNKNOWN_LOCATION among the
9759 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9760 and LOCATIONS[ds_restrict]. */
9762 static location_t
9763 smallest_type_quals_location (int type_quals, const location_t* locations)
9765 location_t loc = UNKNOWN_LOCATION;
9767 if (type_quals & TYPE_QUAL_CONST)
9768 loc = locations[ds_const];
9770 if ((type_quals & TYPE_QUAL_VOLATILE)
9771 && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc))
9772 loc = locations[ds_volatile];
9774 if ((type_quals & TYPE_QUAL_RESTRICT)
9775 && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc))
9776 loc = locations[ds_restrict];
9778 return loc;
9781 /* Check that it's OK to declare a function with the indicated TYPE
9782 and TYPE_QUALS. SFK indicates the kind of special function (if any)
9783 that this function is. OPTYPE is the type given in a conversion
9784 operator declaration, or the class type for a constructor/destructor.
9785 Returns the actual return type of the function; that may be different
9786 than TYPE if an error occurs, or for certain special functions. */
9788 static tree
9789 check_special_function_return_type (special_function_kind sfk,
9790 tree type,
9791 tree optype,
9792 int type_quals,
9793 const location_t* locations)
9795 switch (sfk)
9797 case sfk_constructor:
9798 if (type)
9799 error ("return type specification for constructor invalid");
9800 else if (type_quals != TYPE_UNQUALIFIED)
9801 error_at (smallest_type_quals_location (type_quals, locations),
9802 "qualifiers are not allowed on constructor declaration");
9804 if (targetm.cxx.cdtor_returns_this ())
9805 type = build_pointer_type (optype);
9806 else
9807 type = void_type_node;
9808 break;
9810 case sfk_destructor:
9811 if (type)
9812 error ("return type specification for destructor invalid");
9813 else if (type_quals != TYPE_UNQUALIFIED)
9814 error_at (smallest_type_quals_location (type_quals, locations),
9815 "qualifiers are not allowed on destructor declaration");
9817 /* We can't use the proper return type here because we run into
9818 problems with ambiguous bases and covariant returns. */
9819 if (targetm.cxx.cdtor_returns_this ())
9820 type = build_pointer_type (void_type_node);
9821 else
9822 type = void_type_node;
9823 break;
9825 case sfk_conversion:
9826 if (type)
9827 error ("return type specified for %<operator %T%>", optype);
9828 else if (type_quals != TYPE_UNQUALIFIED)
9829 error_at (smallest_type_quals_location (type_quals, locations),
9830 "qualifiers are not allowed on declaration of "
9831 "%<operator %T%>", optype);
9833 type = optype;
9834 break;
9836 case sfk_deduction_guide:
9837 if (type)
9838 error ("return type specified for deduction guide");
9839 else if (type_quals != TYPE_UNQUALIFIED)
9840 error_at (smallest_type_quals_location (type_quals, locations),
9841 "qualifiers are not allowed on declaration of "
9842 "deduction guide");
9843 if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
9845 error ("template template parameter %qT in declaration of "
9846 "deduction guide", optype);
9847 type = error_mark_node;
9849 else
9850 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
9851 for (int i = 0; i < ds_last; ++i)
9852 if (i != ds_explicit && locations[i])
9853 error_at (locations[i],
9854 "decl-specifier in declaration of deduction guide");
9855 break;
9857 default:
9858 gcc_unreachable ();
9861 return type;
9864 /* A variable or data member (whose unqualified name is IDENTIFIER)
9865 has been declared with the indicated TYPE. If the TYPE is not
9866 acceptable, issue an error message and return a type to use for
9867 error-recovery purposes. */
9869 tree
9870 check_var_type (tree identifier, tree type)
9872 if (VOID_TYPE_P (type))
9874 if (!identifier)
9875 error ("unnamed variable or field declared void");
9876 else if (identifier_p (identifier))
9878 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
9879 error ("variable or field %qE declared void", identifier);
9881 else
9882 error ("variable or field declared void");
9883 type = error_mark_node;
9886 return type;
9889 /* Handle declaring DECL as an inline variable. */
9891 static void
9892 mark_inline_variable (tree decl)
9894 bool inlinep = true;
9895 if (! toplevel_bindings_p ())
9897 error ("%<inline%> specifier invalid for variable "
9898 "%qD declared at block scope", decl);
9899 inlinep = false;
9901 else if (cxx_dialect < cxx17)
9902 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
9903 "inline variables are only available "
9904 "with -std=c++17 or -std=gnu++17");
9905 if (inlinep)
9907 retrofit_lang_decl (decl);
9908 SET_DECL_VAR_DECLARED_INLINE_P (decl);
9913 /* Assign a typedef-given name to a class or enumeration type declared
9914 as anonymous at first. This was split out of grokdeclarator
9915 because it is also used in libcc1. */
9917 void
9918 name_unnamed_type (tree type, tree decl)
9920 gcc_assert (TYPE_UNNAMED_P (type));
9922 /* Replace the anonymous name with the real name everywhere. */
9923 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9925 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
9926 /* We do not rename the debug info representing the
9927 unnamed tagged type because the standard says in
9928 [dcl.typedef] that the naming applies only for
9929 linkage purposes. */
9930 /*debug_hooks->set_name (t, decl);*/
9931 TYPE_NAME (t) = decl;
9934 if (TYPE_LANG_SPECIFIC (type))
9935 TYPE_WAS_UNNAMED (type) = 1;
9937 /* If this is a typedef within a template class, the nested
9938 type is a (non-primary) template. The name for the
9939 template needs updating as well. */
9940 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9941 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9942 = TYPE_IDENTIFIER (type);
9944 /* Adjust linkage now that we aren't unnamed anymore. */
9945 reset_type_linkage (type);
9947 /* FIXME remangle member functions; member functions of a
9948 type with external linkage have external linkage. */
9950 /* Check that our job is done, and that it would fail if we
9951 attempted to do it again. */
9952 gcc_assert (!TYPE_UNNAMED_P (type));
9955 /* Given declspecs and a declarator (abstract or otherwise), determine
9956 the name and type of the object declared and construct a DECL node
9957 for it.
9959 DECLSPECS points to the representation of declaration-specifier
9960 sequence that precedes declarator.
9962 DECL_CONTEXT says which syntactic context this declaration is in:
9963 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9964 FUNCDEF for a function definition. Like NORMAL but a few different
9965 error messages in each case. Return value may be zero meaning
9966 this definition is too screwy to try to parse.
9967 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9968 handle member functions (which have FIELD context).
9969 Return value may be zero meaning this definition is too screwy to
9970 try to parse.
9971 PARM for a parameter declaration (either within a function prototype
9972 or before a function body). Make a PARM_DECL, or return void_type_node.
9973 TPARM for a template parameter declaration.
9974 CATCHPARM for a parameter declaration before a catch clause.
9975 TYPENAME if for a typename (in a cast or sizeof).
9976 Don't make a DECL node; just return the ..._TYPE node.
9977 FIELD for a struct or union field; make a FIELD_DECL.
9978 BITFIELD for a field with specified width.
9980 INITIALIZED is as for start_decl.
9982 ATTRLIST is a pointer to the list of attributes, which may be NULL
9983 if there are none; *ATTRLIST may be modified if attributes from inside
9984 the declarator should be applied to the declaration.
9986 When this function is called, scoping variables (such as
9987 CURRENT_CLASS_TYPE) should reflect the scope in which the
9988 declaration occurs, not the scope in which the new declaration will
9989 be placed. For example, on:
9991 void S::f() { ... }
9993 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
9994 should not be `S'.
9996 Returns a DECL (if a declarator is present), a TYPE (if there is no
9997 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
9998 error occurs. */
10000 tree
10001 grokdeclarator (const cp_declarator *declarator,
10002 cp_decl_specifier_seq *declspecs,
10003 enum decl_context decl_context,
10004 int initialized,
10005 tree* attrlist)
10007 tree type = NULL_TREE;
10008 int longlong = 0;
10009 int explicit_intN = 0;
10010 int virtualp, explicitp, friendp, inlinep, staticp;
10011 int explicit_int = 0;
10012 int explicit_char = 0;
10013 int defaulted_int = 0;
10015 tree typedef_decl = NULL_TREE;
10016 const char *name = NULL;
10017 tree typedef_type = NULL_TREE;
10018 /* True if this declarator is a function definition. */
10019 bool funcdef_flag = false;
10020 cp_declarator_kind innermost_code = cdk_error;
10021 int bitfield = 0;
10022 #if 0
10023 /* See the code below that used this. */
10024 tree decl_attr = NULL_TREE;
10025 #endif
10027 /* Keep track of what sort of function is being processed
10028 so that we can warn about default return values, or explicit
10029 return values which do not match prescribed defaults. */
10030 special_function_kind sfk = sfk_none;
10032 tree dname = NULL_TREE;
10033 tree ctor_return_type = NULL_TREE;
10034 enum overload_flags flags = NO_SPECIAL;
10035 /* cv-qualifiers that apply to the declarator, for a declaration of
10036 a member function. */
10037 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
10038 /* virt-specifiers that apply to the declarator, for a declaration of
10039 a member function. */
10040 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
10041 /* ref-qualifier that applies to the declarator, for a declaration of
10042 a member function. */
10043 cp_ref_qualifier rqual = REF_QUAL_NONE;
10044 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
10045 int type_quals = TYPE_UNQUALIFIED;
10046 tree raises = NULL_TREE;
10047 int template_count = 0;
10048 tree returned_attrs = NULL_TREE;
10049 tree parms = NULL_TREE;
10050 const cp_declarator *id_declarator;
10051 /* The unqualified name of the declarator; either an
10052 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
10053 tree unqualified_id;
10054 /* The class type, if any, in which this entity is located,
10055 or NULL_TREE if none. Note that this value may be different from
10056 the current class type; for example if an attempt is made to declare
10057 "A::f" inside "B", this value will be "A". */
10058 tree ctype = current_class_type;
10059 /* The NAMESPACE_DECL for the namespace in which this entity is
10060 located. If an unqualified name is used to declare the entity,
10061 this value will be NULL_TREE, even if the entity is located at
10062 namespace scope. */
10063 tree in_namespace = NULL_TREE;
10064 cp_storage_class storage_class;
10065 bool unsigned_p, signed_p, short_p, long_p, thread_p;
10066 bool type_was_error_mark_node = false;
10067 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10068 bool template_type_arg = false;
10069 bool template_parm_flag = false;
10070 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10071 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10072 bool late_return_type_p = false;
10073 bool array_parameter_p = false;
10074 source_location saved_loc = input_location;
10075 tree reqs = NULL_TREE;
10077 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10078 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10079 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10080 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10081 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10082 explicit_intN = declspecs->explicit_intN_p;
10083 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10085 // Was concept_p specified? Note that ds_concept
10086 // implies ds_constexpr!
10087 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10088 if (concept_p)
10089 constexpr_p = true;
10091 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10092 type_quals |= TYPE_QUAL_CONST;
10093 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10094 type_quals |= TYPE_QUAL_VOLATILE;
10095 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10096 type_quals |= TYPE_QUAL_RESTRICT;
10098 if (decl_context == FUNCDEF)
10099 funcdef_flag = true, decl_context = NORMAL;
10100 else if (decl_context == MEMFUNCDEF)
10101 funcdef_flag = true, decl_context = FIELD;
10102 else if (decl_context == BITFIELD)
10103 bitfield = 1, decl_context = FIELD;
10104 else if (decl_context == TEMPLATE_TYPE_ARG)
10105 template_type_arg = true, decl_context = TYPENAME;
10106 else if (decl_context == TPARM)
10107 template_parm_flag = true, decl_context = PARM;
10109 if (initialized > 1)
10110 funcdef_flag = true;
10112 location_t typespec_loc = smallest_type_quals_location (type_quals,
10113 declspecs->locations);
10114 if (typespec_loc == UNKNOWN_LOCATION)
10115 typespec_loc = declspecs->locations[ds_type_spec];
10116 if (typespec_loc == UNKNOWN_LOCATION)
10117 typespec_loc = input_location;
10119 /* Look inside a declarator for the name being declared
10120 and get it as a string, for an error message. */
10121 for (id_declarator = declarator;
10122 id_declarator;
10123 id_declarator = id_declarator->declarator)
10125 if (id_declarator->kind != cdk_id)
10126 innermost_code = id_declarator->kind;
10128 switch (id_declarator->kind)
10130 case cdk_function:
10131 if (id_declarator->declarator
10132 && id_declarator->declarator->kind == cdk_id)
10134 sfk = id_declarator->declarator->u.id.sfk;
10135 if (sfk == sfk_destructor)
10136 flags = DTOR_FLAG;
10138 break;
10140 case cdk_id:
10142 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10143 tree decl = id_declarator->u.id.unqualified_name;
10144 if (!decl)
10145 break;
10146 if (qualifying_scope)
10148 if (at_function_scope_p ())
10150 /* [dcl.meaning]
10152 A declarator-id shall not be qualified except
10153 for ...
10155 None of the cases are permitted in block
10156 scope. */
10157 if (qualifying_scope == global_namespace)
10158 error ("invalid use of qualified-name %<::%D%>",
10159 decl);
10160 else if (TYPE_P (qualifying_scope))
10161 error ("invalid use of qualified-name %<%T::%D%>",
10162 qualifying_scope, decl);
10163 else
10164 error ("invalid use of qualified-name %<%D::%D%>",
10165 qualifying_scope, decl);
10166 return error_mark_node;
10168 else if (TYPE_P (qualifying_scope))
10170 ctype = qualifying_scope;
10171 if (!MAYBE_CLASS_TYPE_P (ctype))
10173 error ("%q#T is not a class or a namespace", ctype);
10174 ctype = NULL_TREE;
10176 else if (innermost_code != cdk_function
10177 && current_class_type
10178 && !uniquely_derived_from_p (ctype,
10179 current_class_type))
10181 error ("invalid use of qualified-name %<%T::%D%>",
10182 qualifying_scope, decl);
10183 return error_mark_node;
10186 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10187 in_namespace = qualifying_scope;
10189 switch (TREE_CODE (decl))
10191 case BIT_NOT_EXPR:
10193 if (innermost_code != cdk_function)
10195 error ("declaration of %qD as non-function", decl);
10196 return error_mark_node;
10198 else if (!qualifying_scope
10199 && !(current_class_type && at_class_scope_p ()))
10201 error ("declaration of %qD as non-member", decl);
10202 return error_mark_node;
10205 tree type = TREE_OPERAND (decl, 0);
10206 if (TYPE_P (type))
10207 type = constructor_name (type);
10208 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10209 dname = decl;
10211 break;
10213 case TEMPLATE_ID_EXPR:
10215 tree fns = TREE_OPERAND (decl, 0);
10217 dname = fns;
10218 if (!identifier_p (dname))
10219 dname = OVL_NAME (dname);
10221 /* Fall through. */
10223 case IDENTIFIER_NODE:
10224 if (identifier_p (decl))
10225 dname = decl;
10227 if (IDENTIFIER_KEYWORD_P (dname))
10229 error ("declarator-id missing; using reserved word %qD",
10230 dname);
10231 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10233 else if (!IDENTIFIER_CONV_OP_P (dname))
10234 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10235 else
10237 gcc_assert (flags == NO_SPECIAL);
10238 flags = TYPENAME_FLAG;
10239 sfk = sfk_conversion;
10240 tree glob = get_global_binding (dname);
10241 if (glob && TREE_CODE (glob) == TYPE_DECL)
10242 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10243 else
10244 name = "<invalid operator>";
10246 break;
10248 default:
10249 gcc_unreachable ();
10251 break;
10254 case cdk_array:
10255 case cdk_pointer:
10256 case cdk_reference:
10257 case cdk_ptrmem:
10258 break;
10260 case cdk_decomp:
10261 name = "structured binding";
10262 break;
10264 case cdk_error:
10265 return error_mark_node;
10267 default:
10268 gcc_unreachable ();
10270 if (id_declarator->kind == cdk_id)
10271 break;
10274 /* [dcl.fct.edf]
10276 The declarator in a function-definition shall have the form
10277 D1 ( parameter-declaration-clause) ... */
10278 if (funcdef_flag && innermost_code != cdk_function)
10280 error ("function definition does not declare parameters");
10281 return error_mark_node;
10284 if (flags == TYPENAME_FLAG
10285 && innermost_code != cdk_function
10286 && ! (ctype && !declspecs->any_specifiers_p))
10288 error ("declaration of %qD as non-function", dname);
10289 return error_mark_node;
10292 if (dname && identifier_p (dname))
10294 if (UDLIT_OPER_P (dname)
10295 && innermost_code != cdk_function)
10297 error ("declaration of %qD as non-function", dname);
10298 return error_mark_node;
10301 if (IDENTIFIER_ANY_OP_P (dname))
10303 if (typedef_p)
10305 error ("declaration of %qD as %<typedef%>", dname);
10306 return error_mark_node;
10308 else if (decl_context == PARM || decl_context == CATCHPARM)
10310 error ("declaration of %qD as parameter", dname);
10311 return error_mark_node;
10316 /* Anything declared one level down from the top level
10317 must be one of the parameters of a function
10318 (because the body is at least two levels down). */
10320 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10321 by not allowing C++ class definitions to specify their parameters
10322 with xdecls (must be spec.d in the parmlist).
10324 Since we now wait to push a class scope until we are sure that
10325 we are in a legitimate method context, we must set oldcname
10326 explicitly (since current_class_name is not yet alive).
10328 We also want to avoid calling this a PARM if it is in a namespace. */
10330 if (decl_context == NORMAL && !toplevel_bindings_p ())
10332 cp_binding_level *b = current_binding_level;
10333 current_binding_level = b->level_chain;
10334 if (current_binding_level != 0 && toplevel_bindings_p ())
10335 decl_context = PARM;
10336 current_binding_level = b;
10339 if (name == NULL)
10340 name = decl_context == PARM ? "parameter" : "type name";
10342 if (concept_p && typedef_p)
10344 error ("%<concept%> cannot appear in a typedef declaration");
10345 return error_mark_node;
10348 if (constexpr_p && typedef_p)
10350 error ("%<constexpr%> cannot appear in a typedef declaration");
10351 return error_mark_node;
10354 /* If there were multiple types specified in the decl-specifier-seq,
10355 issue an error message. */
10356 if (declspecs->multiple_types_p)
10358 error ("two or more data types in declaration of %qs", name);
10359 return error_mark_node;
10362 if (declspecs->conflicting_specifiers_p)
10364 error ("conflicting specifiers in declaration of %qs", name);
10365 return error_mark_node;
10368 /* Extract the basic type from the decl-specifier-seq. */
10369 type = declspecs->type;
10370 if (type == error_mark_node)
10372 type = NULL_TREE;
10373 type_was_error_mark_node = true;
10375 /* If the entire declaration is itself tagged as deprecated then
10376 suppress reports of deprecated items. */
10377 if (type && TREE_DEPRECATED (type)
10378 && deprecated_state != DEPRECATED_SUPPRESS)
10379 warn_deprecated_use (type, NULL_TREE);
10380 if (type && TREE_CODE (type) == TYPE_DECL)
10382 typedef_decl = type;
10383 type = TREE_TYPE (typedef_decl);
10384 if (TREE_DEPRECATED (type)
10385 && DECL_ARTIFICIAL (typedef_decl)
10386 && deprecated_state != DEPRECATED_SUPPRESS)
10387 warn_deprecated_use (type, NULL_TREE);
10389 /* No type at all: default to `int', and set DEFAULTED_INT
10390 because it was not a user-defined typedef. */
10391 if (type == NULL_TREE)
10393 if (signed_p || unsigned_p || long_p || short_p)
10395 /* These imply 'int'. */
10396 type = integer_type_node;
10397 defaulted_int = 1;
10399 /* If we just have "complex", it is equivalent to "complex double". */
10400 else if (!longlong && !explicit_intN
10401 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10403 type = double_type_node;
10404 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10405 "ISO C++ does not support plain %<complex%> meaning "
10406 "%<double complex%>");
10409 /* Gather flags. */
10410 explicit_int = declspecs->explicit_int_p;
10411 explicit_char = declspecs->explicit_char_p;
10413 #if 0
10414 /* See the code below that used this. */
10415 if (typedef_decl)
10416 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10417 #endif
10418 typedef_type = type;
10420 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10421 ctor_return_type = TREE_TYPE (dname);
10422 else
10423 ctor_return_type = ctype;
10425 if (sfk != sfk_none)
10427 type = check_special_function_return_type (sfk, type,
10428 ctor_return_type,
10429 type_quals,
10430 declspecs->locations);
10431 type_quals = TYPE_UNQUALIFIED;
10433 else if (type == NULL_TREE)
10435 int is_main;
10437 explicit_int = -1;
10439 /* We handle `main' specially here, because 'main () { }' is so
10440 common. With no options, it is allowed. With -Wreturn-type,
10441 it is a warning. It is only an error with -pedantic-errors. */
10442 is_main = (funcdef_flag
10443 && dname && identifier_p (dname)
10444 && MAIN_NAME_P (dname)
10445 && ctype == NULL_TREE
10446 && in_namespace == NULL_TREE
10447 && current_namespace == global_namespace);
10449 if (type_was_error_mark_node)
10450 /* We've already issued an error, don't complain more. */;
10451 else if (in_system_header_at (input_location) || flag_ms_extensions)
10452 /* Allow it, sigh. */;
10453 else if (! is_main)
10454 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10455 else if (pedantic)
10456 pedwarn (input_location, OPT_Wpedantic,
10457 "ISO C++ forbids declaration of %qs with no type", name);
10458 else
10459 warning (OPT_Wreturn_type,
10460 "ISO C++ forbids declaration of %qs with no type", name);
10462 if (type_was_error_mark_node && template_parm_flag)
10463 /* FIXME we should be able to propagate the error_mark_node as is
10464 for other contexts too. */
10465 type = error_mark_node;
10466 else
10467 type = integer_type_node;
10470 ctype = NULL_TREE;
10472 if (explicit_intN)
10474 if (! int_n_enabled_p[declspecs->int_n_idx])
10476 error ("%<__int%d%> is not supported by this target",
10477 int_n_data[declspecs->int_n_idx].bitsize);
10478 explicit_intN = false;
10480 else if (pedantic && ! in_system_header_at (input_location))
10481 pedwarn (input_location, OPT_Wpedantic,
10482 "ISO C++ does not support %<__int%d%> for %qs",
10483 int_n_data[declspecs->int_n_idx].bitsize, name);
10486 /* Now process the modifiers that were specified
10487 and check for invalid combinations. */
10489 /* Long double is a special combination. */
10490 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10492 long_p = false;
10493 type = cp_build_qualified_type (long_double_type_node,
10494 cp_type_quals (type));
10497 /* Check all other uses of type modifiers. */
10499 if (unsigned_p || signed_p || long_p || short_p)
10501 int ok = 0;
10503 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
10504 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10505 else if (signed_p && unsigned_p)
10506 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
10507 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
10508 error ("%<long long%> invalid for %qs", name);
10509 else if (long_p && TREE_CODE (type) == REAL_TYPE)
10510 error ("%<long%> invalid for %qs", name);
10511 else if (short_p && TREE_CODE (type) == REAL_TYPE)
10512 error ("%<short%> invalid for %qs", name);
10513 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
10514 error ("%<long%> or %<short%> invalid for %qs", name);
10515 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
10516 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
10517 else if ((long_p || short_p) && explicit_char)
10518 error ("%<long%> or %<short%> specified with char for %qs", name);
10519 else if (long_p && short_p)
10520 error ("%<long%> and %<short%> specified together for %qs", name);
10521 else if (type == char16_type_node || type == char32_type_node)
10523 if (signed_p || unsigned_p)
10524 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10525 else if (short_p || long_p)
10526 error ("%<short%> or %<long%> invalid for %qs", name);
10528 else
10530 ok = 1;
10531 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
10533 pedwarn (input_location, OPT_Wpedantic,
10534 "long, short, signed or unsigned used invalidly for %qs",
10535 name);
10536 if (flag_pedantic_errors)
10537 ok = 0;
10541 /* Discard the type modifiers if they are invalid. */
10542 if (! ok)
10544 unsigned_p = false;
10545 signed_p = false;
10546 long_p = false;
10547 short_p = false;
10548 longlong = 0;
10552 /* Decide whether an integer type is signed or not.
10553 Optionally treat bitfields as signed by default. */
10554 if (unsigned_p
10555 /* [class.bit]
10557 It is implementation-defined whether a plain (neither
10558 explicitly signed or unsigned) char, short, int, or long
10559 bit-field is signed or unsigned.
10561 Naturally, we extend this to long long as well. Note that
10562 this does not include wchar_t. */
10563 || (bitfield && !flag_signed_bitfields
10564 && !signed_p
10565 /* A typedef for plain `int' without `signed' can be
10566 controlled just like plain `int', but a typedef for
10567 `signed int' cannot be so controlled. */
10568 && !(typedef_decl
10569 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10570 && TREE_CODE (type) == INTEGER_TYPE
10571 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10573 if (explicit_intN)
10574 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10575 else if (longlong)
10576 type = long_long_unsigned_type_node;
10577 else if (long_p)
10578 type = long_unsigned_type_node;
10579 else if (short_p)
10580 type = short_unsigned_type_node;
10581 else if (type == char_type_node)
10582 type = unsigned_char_type_node;
10583 else if (typedef_decl)
10584 type = unsigned_type_for (type);
10585 else
10586 type = unsigned_type_node;
10588 else if (signed_p && type == char_type_node)
10589 type = signed_char_type_node;
10590 else if (explicit_intN)
10591 type = int_n_trees[declspecs->int_n_idx].signed_type;
10592 else if (longlong)
10593 type = long_long_integer_type_node;
10594 else if (long_p)
10595 type = long_integer_type_node;
10596 else if (short_p)
10597 type = short_integer_type_node;
10599 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10601 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10602 error ("complex invalid for %qs", name);
10603 /* If a modifier is specified, the resulting complex is the complex
10604 form of TYPE. E.g, "complex short" is "complex short int". */
10605 else if (type == integer_type_node)
10606 type = complex_integer_type_node;
10607 else if (type == float_type_node)
10608 type = complex_float_type_node;
10609 else if (type == double_type_node)
10610 type = complex_double_type_node;
10611 else if (type == long_double_type_node)
10612 type = complex_long_double_type_node;
10613 else
10614 type = build_complex_type (type);
10617 /* If we're using the injected-class-name to form a compound type or a
10618 declaration, replace it with the underlying class so we don't get
10619 redundant typedefs in the debug output. But if we are returning the
10620 type unchanged, leave it alone so that it's available to
10621 maybe_get_template_decl_from_type_decl. */
10622 if (CLASS_TYPE_P (type)
10623 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10624 && type == TREE_TYPE (TYPE_NAME (type))
10625 && (declarator || type_quals))
10626 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10628 type_quals |= cp_type_quals (type);
10629 type = cp_build_qualified_type_real
10630 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10631 || declspecs->decltype_p)
10632 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10633 /* We might have ignored or rejected some of the qualifiers. */
10634 type_quals = cp_type_quals (type);
10636 if (cxx_dialect >= cxx17 && type && is_auto (type)
10637 && innermost_code != cdk_function
10638 && id_declarator && declarator != id_declarator)
10639 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10641 error_at (typespec_loc, "template placeholder type %qT must be followed "
10642 "by a simple declarator-id", type);
10643 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10646 staticp = 0;
10647 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10648 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10649 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10651 storage_class = declspecs->storage_class;
10652 if (storage_class == sc_static)
10653 staticp = 1 + (decl_context == FIELD);
10655 if (virtualp)
10657 if (staticp == 2)
10659 error ("member %qD cannot be declared both %<virtual%> "
10660 "and %<static%>", dname);
10661 storage_class = sc_none;
10662 staticp = 0;
10664 if (constexpr_p)
10665 error ("member %qD cannot be declared both %<virtual%> "
10666 "and %<constexpr%>", dname);
10668 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10670 /* Issue errors about use of storage classes for parameters. */
10671 if (decl_context == PARM)
10673 if (typedef_p)
10675 error ("typedef declaration invalid in parameter declaration");
10676 return error_mark_node;
10678 else if (template_parm_flag && storage_class != sc_none)
10680 error ("storage class specified for template parameter %qs", name);
10681 return error_mark_node;
10683 else if (storage_class == sc_static
10684 || storage_class == sc_extern
10685 || thread_p)
10686 error ("storage class specifiers invalid in parameter declarations");
10688 /* Function parameters cannot be concept. */
10689 if (concept_p)
10690 error ("a parameter cannot be declared %<concept%>");
10691 /* Function parameters cannot be constexpr. If we saw one, moan
10692 and pretend it wasn't there. */
10693 else if (constexpr_p)
10695 error ("a parameter cannot be declared %<constexpr%>");
10696 constexpr_p = 0;
10700 /* Give error if `virtual' is used outside of class declaration. */
10701 if (virtualp
10702 && (current_class_name == NULL_TREE || decl_context != FIELD))
10704 error_at (declspecs->locations[ds_virtual],
10705 "%<virtual%> outside class declaration");
10706 virtualp = 0;
10709 if (innermost_code == cdk_decomp)
10711 location_t loc = (declarator->kind == cdk_reference
10712 ? declarator->declarator->id_loc : declarator->id_loc);
10713 if (inlinep)
10714 error_at (declspecs->locations[ds_inline],
10715 "structured binding declaration cannot be %<inline%>");
10716 if (typedef_p)
10717 error_at (declspecs->locations[ds_typedef],
10718 "structured binding declaration cannot be %<typedef%>");
10719 if (constexpr_p)
10720 error_at (declspecs->locations[ds_constexpr], "structured "
10721 "binding declaration cannot be %<constexpr%>");
10722 if (thread_p)
10723 error_at (declspecs->locations[ds_thread],
10724 "structured binding declaration cannot be %qs",
10725 declspecs->gnu_thread_keyword_p
10726 ? "__thread" : "thread_local");
10727 if (concept_p)
10728 error_at (declspecs->locations[ds_concept],
10729 "structured binding declaration cannot be %<concept%>");
10730 switch (storage_class)
10732 case sc_none:
10733 break;
10734 case sc_register:
10735 error_at (loc, "structured binding declaration cannot be "
10736 "%<register%>");
10737 break;
10738 case sc_static:
10739 error_at (loc, "structured binding declaration cannot be "
10740 "%<static%>");
10741 break;
10742 case sc_extern:
10743 error_at (loc, "structured binding declaration cannot be "
10744 "%<extern%>");
10745 break;
10746 case sc_mutable:
10747 error_at (loc, "structured binding declaration cannot be "
10748 "%<mutable%>");
10749 break;
10750 case sc_auto:
10751 error_at (loc, "structured binding declaration cannot be "
10752 "C++98 %<auto%>");
10753 break;
10754 default:
10755 gcc_unreachable ();
10757 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
10758 || TYPE_IDENTIFIER (type) != auto_identifier)
10760 if (type != error_mark_node)
10762 error_at (loc, "structured binding declaration cannot have "
10763 "type %qT", type);
10764 inform (loc,
10765 "type must be cv-qualified %<auto%> or reference to "
10766 "cv-qualified %<auto%>");
10768 type = build_qualified_type (make_auto (), type_quals);
10769 declspecs->type = type;
10771 inlinep = 0;
10772 typedef_p = 0;
10773 constexpr_p = 0;
10774 thread_p = 0;
10775 concept_p = 0;
10776 storage_class = sc_none;
10777 staticp = 0;
10778 declspecs->storage_class = sc_none;
10779 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
10782 /* Static anonymous unions are dealt with here. */
10783 if (staticp && decl_context == TYPENAME
10784 && declspecs->type
10785 && ANON_AGGR_TYPE_P (declspecs->type))
10786 decl_context = FIELD;
10788 /* Warn about storage classes that are invalid for certain
10789 kinds of declarations (parameters, typenames, etc.). */
10790 if (thread_p
10791 && ((storage_class
10792 && storage_class != sc_extern
10793 && storage_class != sc_static)
10794 || typedef_p))
10796 error ("multiple storage classes in declaration of %qs", name);
10797 thread_p = false;
10799 if (decl_context != NORMAL
10800 && ((storage_class != sc_none
10801 && storage_class != sc_mutable)
10802 || thread_p))
10804 if ((decl_context == PARM || decl_context == CATCHPARM)
10805 && (storage_class == sc_register
10806 || storage_class == sc_auto))
10808 else if (typedef_p)
10810 else if (decl_context == FIELD
10811 /* C++ allows static class elements. */
10812 && storage_class == sc_static)
10813 /* C++ also allows inlines and signed and unsigned elements,
10814 but in those cases we don't come in here. */
10816 else
10818 if (decl_context == FIELD)
10819 error ("storage class specified for %qs", name);
10820 else
10822 if (decl_context == PARM || decl_context == CATCHPARM)
10823 error ("storage class specified for parameter %qs", name);
10824 else
10825 error ("storage class specified for typename");
10827 if (storage_class == sc_register
10828 || storage_class == sc_auto
10829 || storage_class == sc_extern
10830 || thread_p)
10831 storage_class = sc_none;
10834 else if (storage_class == sc_extern && funcdef_flag
10835 && ! toplevel_bindings_p ())
10836 error ("nested function %qs declared %<extern%>", name);
10837 else if (toplevel_bindings_p ())
10839 if (storage_class == sc_auto)
10840 error ("top-level declaration of %qs specifies %<auto%>", name);
10842 else if (thread_p
10843 && storage_class != sc_extern
10844 && storage_class != sc_static)
10846 if (declspecs->gnu_thread_keyword_p)
10847 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
10848 "declared %<__thread%>", name);
10850 /* When thread_local is applied to a variable of block scope the
10851 storage-class-specifier static is implied if it does not appear
10852 explicitly. */
10853 storage_class = declspecs->storage_class = sc_static;
10854 staticp = 1;
10857 if (storage_class && friendp)
10859 error ("storage class specifiers invalid in friend function declarations");
10860 storage_class = sc_none;
10861 staticp = 0;
10864 if (!id_declarator)
10865 unqualified_id = NULL_TREE;
10866 else
10868 unqualified_id = id_declarator->u.id.unqualified_name;
10869 switch (TREE_CODE (unqualified_id))
10871 case BIT_NOT_EXPR:
10872 unqualified_id = TREE_OPERAND (unqualified_id, 0);
10873 if (TYPE_P (unqualified_id))
10874 unqualified_id = constructor_name (unqualified_id);
10875 break;
10877 case IDENTIFIER_NODE:
10878 case TEMPLATE_ID_EXPR:
10879 break;
10881 default:
10882 gcc_unreachable ();
10886 if (declspecs->std_attributes)
10888 /* Apply the c++11 attributes to the type preceding them. */
10889 input_location = declspecs->locations[ds_std_attribute];
10890 decl_attributes (&type, declspecs->std_attributes, 0);
10891 input_location = saved_loc;
10894 /* Determine the type of the entity declared by recurring on the
10895 declarator. */
10896 for (; declarator; declarator = declarator->declarator)
10898 const cp_declarator *inner_declarator;
10899 tree attrs;
10901 if (type == error_mark_node)
10902 return error_mark_node;
10904 attrs = declarator->attributes;
10905 if (attrs)
10907 int attr_flags;
10909 attr_flags = 0;
10910 if (declarator == NULL || declarator->kind == cdk_id)
10911 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
10912 if (declarator->kind == cdk_function)
10913 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
10914 if (declarator->kind == cdk_array)
10915 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
10916 returned_attrs = decl_attributes (&type,
10917 chainon (returned_attrs, attrs),
10918 attr_flags);
10921 inner_declarator = declarator->declarator;
10923 /* We don't want to warn in parameter context because we don't
10924 yet know if the parse will succeed, and this might turn out
10925 to be a constructor call. */
10926 if (decl_context != PARM
10927 && decl_context != TYPENAME
10928 && !typedef_p
10929 && declarator->parenthesized != UNKNOWN_LOCATION
10930 /* If the type is class-like and the inner name used a
10931 global namespace qualifier, we need the parens.
10932 Unfortunately all we can tell is whether a qualified name
10933 was used or not. */
10934 && !(inner_declarator
10935 && inner_declarator->kind == cdk_id
10936 && inner_declarator->u.id.qualifying_scope
10937 && (MAYBE_CLASS_TYPE_P (type)
10938 || TREE_CODE (type) == ENUMERAL_TYPE)))
10939 warning_at (declarator->parenthesized, OPT_Wparentheses,
10940 "unnecessary parentheses in declaration of %qs", name);
10941 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
10942 break;
10944 switch (declarator->kind)
10946 case cdk_array:
10947 type = create_array_type_for_decl (dname, type,
10948 declarator->u.array.bounds);
10949 if (!valid_array_size_p (input_location, type, dname))
10950 type = error_mark_node;
10952 if (declarator->std_attributes)
10953 /* [dcl.array]/1:
10955 The optional attribute-specifier-seq appertains to the
10956 array. */
10957 returned_attrs = chainon (returned_attrs,
10958 declarator->std_attributes);
10959 break;
10961 case cdk_function:
10963 tree arg_types;
10964 int funcdecl_p;
10966 /* Declaring a function type. */
10968 input_location = declspecs->locations[ds_type_spec];
10969 abstract_virtuals_error (ACU_RETURN, type);
10970 input_location = saved_loc;
10972 /* Pick up type qualifiers which should be applied to `this'. */
10973 memfn_quals = declarator->u.function.qualifiers;
10974 /* Pick up virt-specifiers. */
10975 virt_specifiers = declarator->u.function.virt_specifiers;
10976 /* And ref-qualifier, too */
10977 rqual = declarator->u.function.ref_qualifier;
10978 /* And tx-qualifier. */
10979 tree tx_qual = declarator->u.function.tx_qualifier;
10980 /* Pick up the exception specifications. */
10981 raises = declarator->u.function.exception_specification;
10982 /* If the exception-specification is ill-formed, let's pretend
10983 there wasn't one. */
10984 if (raises == error_mark_node)
10985 raises = NULL_TREE;
10987 if (reqs)
10988 error_at (location_of (reqs), "requires-clause on return type");
10989 reqs = declarator->u.function.requires_clause;
10991 /* Say it's a definition only for the CALL_EXPR
10992 closest to the identifier. */
10993 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
10995 /* Handle a late-specified return type. */
10996 tree late_return_type = declarator->u.function.late_return_type;
10997 if (funcdecl_p)
10999 if (tree auto_node = type_uses_auto (type))
11001 if (!late_return_type)
11003 if (current_class_type
11004 && LAMBDA_TYPE_P (current_class_type))
11005 /* OK for C++11 lambdas. */;
11006 else if (cxx_dialect < cxx14)
11008 error ("%qs function uses "
11009 "%<auto%> type specifier without trailing "
11010 "return type", name);
11011 inform (input_location, "deduced return type "
11012 "only available with -std=c++14 or "
11013 "-std=gnu++14");
11015 else if (virtualp)
11017 error ("virtual function cannot "
11018 "have deduced return type");
11019 virtualp = false;
11022 else if (!is_auto (type) && sfk != sfk_conversion)
11024 error ("%qs function with trailing return type has"
11025 " %qT as its type rather than plain %<auto%>",
11026 name, type);
11027 return error_mark_node;
11029 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
11031 if (!late_return_type)
11033 if (dguide_name_p (unqualified_id))
11034 error_at (declarator->id_loc, "deduction guide "
11035 "for %qT must have trailing return "
11036 "type", TREE_TYPE (tmpl));
11037 else
11038 error_at (declarator->id_loc, "deduced class "
11039 "type %qT in function return type",
11040 type);
11041 inform (DECL_SOURCE_LOCATION (tmpl),
11042 "%qD declared here", tmpl);
11044 else if (CLASS_TYPE_P (late_return_type)
11045 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11046 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11047 == tmpl))
11048 /* OK */;
11049 else
11050 error ("trailing return type %qT of deduction guide "
11051 "is not a specialization of %qT",
11052 late_return_type, TREE_TYPE (tmpl));
11055 else if (late_return_type
11056 && sfk != sfk_conversion)
11058 if (cxx_dialect < cxx11)
11059 /* Not using maybe_warn_cpp0x because this should
11060 always be an error. */
11061 error ("trailing return type only available with "
11062 "-std=c++11 or -std=gnu++11");
11063 else
11064 error ("%qs function with trailing return type not "
11065 "declared with %<auto%> type specifier", name);
11066 return error_mark_node;
11069 type = splice_late_return_type (type, late_return_type);
11070 if (type == error_mark_node)
11071 return error_mark_node;
11073 if (late_return_type)
11075 late_return_type_p = true;
11076 type_quals = cp_type_quals (type);
11079 if (type_quals != TYPE_UNQUALIFIED)
11081 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11082 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11083 "qualifiers ignored on function return type");
11084 /* We now know that the TYPE_QUALS don't apply to the
11085 decl, but to its return type. */
11086 type_quals = TYPE_UNQUALIFIED;
11089 /* Error about some types functions can't return. */
11091 if (TREE_CODE (type) == FUNCTION_TYPE)
11093 error_at (typespec_loc, "%qs declared as function returning "
11094 "a function", name);
11095 return error_mark_node;
11097 if (TREE_CODE (type) == ARRAY_TYPE)
11099 error_at (typespec_loc, "%qs declared as function returning "
11100 "an array", name);
11101 return error_mark_node;
11104 if (ctype == NULL_TREE
11105 && decl_context == FIELD
11106 && funcdecl_p
11107 && friendp == 0)
11108 ctype = current_class_type;
11110 if (ctype && (sfk == sfk_constructor
11111 || sfk == sfk_destructor))
11113 /* We are within a class's scope. If our declarator name
11114 is the same as the class name, and we are defining
11115 a function, then it is a constructor/destructor, and
11116 therefore returns a void type. */
11118 /* ISO C++ 12.4/2. A destructor may not be declared
11119 const or volatile. A destructor may not be static.
11120 A destructor may not be declared with ref-qualifier.
11122 ISO C++ 12.1. A constructor may not be declared
11123 const or volatile. A constructor may not be
11124 virtual. A constructor may not be static.
11125 A constructor may not be declared with ref-qualifier. */
11126 if (staticp == 2)
11127 error ((flags == DTOR_FLAG)
11128 ? G_("destructor cannot be static member function")
11129 : G_("constructor cannot be static member function"));
11130 if (memfn_quals)
11132 error ((flags == DTOR_FLAG)
11133 ? G_("destructors may not be cv-qualified")
11134 : G_("constructors may not be cv-qualified"));
11135 memfn_quals = TYPE_UNQUALIFIED;
11138 if (rqual)
11140 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11141 error ((flags == DTOR_FLAG)
11142 ? G_("destructors may not be ref-qualified")
11143 : G_("constructors may not be ref-qualified"));
11144 rqual = REF_QUAL_NONE;
11147 if (decl_context == FIELD
11148 && !member_function_or_else (ctype,
11149 current_class_type,
11150 flags))
11151 return error_mark_node;
11153 if (flags != DTOR_FLAG)
11155 /* It's a constructor. */
11156 if (explicitp == 1)
11157 explicitp = 2;
11158 if (virtualp)
11160 permerror (input_location,
11161 "constructors cannot be declared %<virtual%>");
11162 virtualp = 0;
11164 if (decl_context == FIELD
11165 && sfk != sfk_constructor)
11166 return error_mark_node;
11168 if (decl_context == FIELD)
11169 staticp = 0;
11171 else if (friendp)
11173 if (virtualp)
11175 /* Cannot be both friend and virtual. */
11176 error ("virtual functions cannot be friends");
11177 friendp = 0;
11179 if (decl_context == NORMAL)
11180 error ("friend declaration not in class definition");
11181 if (current_function_decl && funcdef_flag)
11182 error ("can%'t define friend function %qs in a local "
11183 "class definition",
11184 name);
11186 else if (ctype && sfk == sfk_conversion)
11188 if (explicitp == 1)
11190 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11191 explicitp = 2;
11193 if (late_return_type_p)
11194 error ("a conversion function cannot have a trailing return type");
11196 else if (sfk == sfk_deduction_guide)
11198 if (explicitp == 1)
11199 explicitp = 2;
11202 arg_types = grokparms (declarator->u.function.parameters,
11203 &parms);
11205 if (inner_declarator
11206 && inner_declarator->kind == cdk_id
11207 && inner_declarator->u.id.sfk == sfk_destructor
11208 && arg_types != void_list_node)
11210 error ("destructors may not have parameters");
11211 arg_types = void_list_node;
11212 parms = NULL_TREE;
11215 type = build_function_type (type, arg_types);
11217 tree attrs = declarator->std_attributes;
11218 if (tx_qual)
11220 tree att = build_tree_list (tx_qual, NULL_TREE);
11221 /* transaction_safe applies to the type, but
11222 transaction_safe_dynamic applies to the function. */
11223 if (is_attribute_p ("transaction_safe", tx_qual))
11224 attrs = chainon (attrs, att);
11225 else
11226 returned_attrs = chainon (returned_attrs, att);
11228 if (attrs)
11229 /* [dcl.fct]/2:
11231 The optional attribute-specifier-seq appertains to
11232 the function type. */
11233 decl_attributes (&type, attrs, 0);
11235 if (raises)
11236 type = build_exception_variant (type, raises);
11238 break;
11240 case cdk_pointer:
11241 case cdk_reference:
11242 case cdk_ptrmem:
11243 /* Filter out pointers-to-references and references-to-references.
11244 We can get these if a TYPE_DECL is used. */
11246 if (TREE_CODE (type) == REFERENCE_TYPE)
11248 if (declarator->kind != cdk_reference)
11250 error ("cannot declare pointer to %q#T", type);
11251 type = TREE_TYPE (type);
11254 /* In C++0x, we allow reference to reference declarations
11255 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11256 and template type arguments [14.3.1/4 temp.arg.type]. The
11257 check for direct reference to reference declarations, which
11258 are still forbidden, occurs below. Reasoning behind the change
11259 can be found in DR106, DR540, and the rvalue reference
11260 proposals. */
11261 else if (cxx_dialect == cxx98)
11263 error ("cannot declare reference to %q#T", type);
11264 type = TREE_TYPE (type);
11267 else if (VOID_TYPE_P (type))
11269 if (declarator->kind == cdk_reference)
11270 error ("cannot declare reference to %q#T", type);
11271 else if (declarator->kind == cdk_ptrmem)
11272 error ("cannot declare pointer to %q#T member", type);
11275 /* We now know that the TYPE_QUALS don't apply to the decl,
11276 but to the target of the pointer. */
11277 type_quals = TYPE_UNQUALIFIED;
11279 /* This code used to handle METHOD_TYPE, but I don't think it's
11280 possible to get it here anymore. */
11281 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11282 if (declarator->kind == cdk_ptrmem
11283 && TREE_CODE (type) == FUNCTION_TYPE)
11285 memfn_quals |= type_memfn_quals (type);
11286 type = build_memfn_type (type,
11287 declarator->u.pointer.class_type,
11288 memfn_quals,
11289 rqual);
11290 if (type == error_mark_node)
11291 return error_mark_node;
11293 rqual = REF_QUAL_NONE;
11294 memfn_quals = TYPE_UNQUALIFIED;
11297 if (TREE_CODE (type) == FUNCTION_TYPE
11298 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11299 || type_memfn_rqual (type) != REF_QUAL_NONE))
11300 error (declarator->kind == cdk_reference
11301 ? G_("cannot declare reference to qualified function type %qT")
11302 : G_("cannot declare pointer to qualified function type %qT"),
11303 type);
11305 /* When the pointed-to type involves components of variable size,
11306 care must be taken to ensure that the size evaluation code is
11307 emitted early enough to dominate all the possible later uses
11308 and late enough for the variables on which it depends to have
11309 been assigned.
11311 This is expected to happen automatically when the pointed-to
11312 type has a name/declaration of it's own, but special attention
11313 is required if the type is anonymous.
11315 We handle the NORMAL and FIELD contexts here by inserting a
11316 dummy statement that just evaluates the size at a safe point
11317 and ensures it is not deferred until e.g. within a deeper
11318 conditional context (c++/43555).
11320 We expect nothing to be needed here for PARM or TYPENAME.
11321 Evaluating the size at this point for TYPENAME would
11322 actually be incorrect, as we might be in the middle of an
11323 expression with side effects on the pointed-to type size
11324 "arguments" prior to the pointer declaration point and the
11325 size evaluation could end up prior to the side effects. */
11327 if (!TYPE_NAME (type)
11328 && (decl_context == NORMAL || decl_context == FIELD)
11329 && at_function_scope_p ()
11330 && variably_modified_type_p (type, NULL_TREE))
11332 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11333 NULL_TREE, type);
11334 add_decl_expr (TYPE_NAME (type));
11337 if (declarator->kind == cdk_reference)
11339 /* In C++0x, the type we are creating a reference to might be
11340 a typedef which is itself a reference type. In that case,
11341 we follow the reference collapsing rules in
11342 [7.1.3/8 dcl.typedef] to create the final reference type:
11344 "If a typedef TD names a type that is a reference to a type
11345 T, an attempt to create the type 'lvalue reference to cv TD'
11346 creates the type 'lvalue reference to T,' while an attempt
11347 to create the type "rvalue reference to cv TD' creates the
11348 type TD."
11350 if (VOID_TYPE_P (type))
11351 /* We already gave an error. */;
11352 else if (TREE_CODE (type) == REFERENCE_TYPE)
11354 if (declarator->u.reference.rvalue_ref)
11355 /* Leave type alone. */;
11356 else
11357 type = cp_build_reference_type (TREE_TYPE (type), false);
11359 else
11360 type = cp_build_reference_type
11361 (type, declarator->u.reference.rvalue_ref);
11363 /* In C++0x, we need this check for direct reference to
11364 reference declarations, which are forbidden by
11365 [8.3.2/5 dcl.ref]. Reference to reference declarations
11366 are only allowed indirectly through typedefs and template
11367 type arguments. Example:
11369 void foo(int & &); // invalid ref-to-ref decl
11371 typedef int & int_ref;
11372 void foo(int_ref &); // valid ref-to-ref decl
11374 if (inner_declarator && inner_declarator->kind == cdk_reference)
11375 error ("cannot declare reference to %q#T, which is not "
11376 "a typedef or a template type argument", type);
11378 else if (TREE_CODE (type) == METHOD_TYPE)
11379 type = build_ptrmemfunc_type (build_pointer_type (type));
11380 else if (declarator->kind == cdk_ptrmem)
11382 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11383 != NAMESPACE_DECL);
11384 if (declarator->u.pointer.class_type == error_mark_node)
11385 /* We will already have complained. */
11386 type = error_mark_node;
11387 else
11388 type = build_ptrmem_type (declarator->u.pointer.class_type,
11389 type);
11391 else
11392 type = build_pointer_type (type);
11394 /* Process a list of type modifier keywords (such as
11395 const or volatile) that were given inside the `*' or `&'. */
11397 if (declarator->u.pointer.qualifiers)
11399 type
11400 = cp_build_qualified_type (type,
11401 declarator->u.pointer.qualifiers);
11402 type_quals = cp_type_quals (type);
11405 /* Apply C++11 attributes to the pointer, and not to the
11406 type pointed to. This is unlike what is done for GNU
11407 attributes above. It is to comply with [dcl.ptr]/1:
11409 [the optional attribute-specifier-seq (7.6.1) appertains
11410 to the pointer and not to the object pointed to]. */
11411 if (declarator->std_attributes)
11412 decl_attributes (&type, declarator->std_attributes,
11415 ctype = NULL_TREE;
11416 break;
11418 case cdk_error:
11419 break;
11421 default:
11422 gcc_unreachable ();
11426 /* A `constexpr' specifier used in an object declaration declares
11427 the object as `const'. */
11428 if (constexpr_p && innermost_code != cdk_function)
11430 /* DR1688 says that a `constexpr' specifier in combination with
11431 `volatile' is valid. */
11433 if (TREE_CODE (type) != REFERENCE_TYPE)
11435 type_quals |= TYPE_QUAL_CONST;
11436 type = cp_build_qualified_type (type, type_quals);
11440 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11441 && TREE_CODE (type) != FUNCTION_TYPE
11442 && TREE_CODE (type) != METHOD_TYPE
11443 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11445 error ("template-id %qD used as a declarator",
11446 unqualified_id);
11447 unqualified_id = dname;
11450 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11451 qualified with a class-name, turn it into a METHOD_TYPE, unless
11452 we know that the function is static. We take advantage of this
11453 opportunity to do other processing that pertains to entities
11454 explicitly declared to be class members. Note that if DECLARATOR
11455 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11456 would not have exited the loop above. */
11457 if (declarator
11458 && declarator->kind == cdk_id
11459 && declarator->u.id.qualifying_scope
11460 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11462 ctype = declarator->u.id.qualifying_scope;
11463 ctype = TYPE_MAIN_VARIANT (ctype);
11464 template_count = num_template_headers_for_class (ctype);
11466 if (ctype == current_class_type)
11468 if (friendp)
11470 permerror (input_location, "member functions are implicitly "
11471 "friends of their class");
11472 friendp = 0;
11474 else
11475 permerror (declarator->id_loc,
11476 "extra qualification %<%T::%> on member %qs",
11477 ctype, name);
11479 else if (/* If the qualifying type is already complete, then we
11480 can skip the following checks. */
11481 !COMPLETE_TYPE_P (ctype)
11482 && (/* If the function is being defined, then
11483 qualifying type must certainly be complete. */
11484 funcdef_flag
11485 /* A friend declaration of "T::f" is OK, even if
11486 "T" is a template parameter. But, if this
11487 function is not a friend, the qualifying type
11488 must be a class. */
11489 || (!friendp && !CLASS_TYPE_P (ctype))
11490 /* For a declaration, the type need not be
11491 complete, if either it is dependent (since there
11492 is no meaningful definition of complete in that
11493 case) or the qualifying class is currently being
11494 defined. */
11495 || !(dependent_type_p (ctype)
11496 || currently_open_class (ctype)))
11497 /* Check that the qualifying type is complete. */
11498 && !complete_type_or_else (ctype, NULL_TREE))
11499 return error_mark_node;
11500 else if (TREE_CODE (type) == FUNCTION_TYPE)
11502 if (current_class_type
11503 && (!friendp || funcdef_flag || initialized))
11505 error (funcdef_flag || initialized
11506 ? G_("cannot define member function %<%T::%s%> "
11507 "within %qT")
11508 : G_("cannot declare member function %<%T::%s%> "
11509 "within %qT"),
11510 ctype, name, current_class_type);
11511 return error_mark_node;
11514 else if (typedef_p && current_class_type)
11516 error ("cannot declare member %<%T::%s%> within %qT",
11517 ctype, name, current_class_type);
11518 return error_mark_node;
11522 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11523 ctype = current_class_type;
11525 /* Now TYPE has the actual type. */
11527 if (returned_attrs)
11529 if (attrlist)
11530 *attrlist = chainon (returned_attrs, *attrlist);
11531 else
11532 attrlist = &returned_attrs;
11535 if (declarator
11536 && declarator->kind == cdk_id
11537 && declarator->std_attributes
11538 && attrlist != NULL)
11540 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11541 a declarator-id appertains to the entity that is declared. */
11542 if (declarator->std_attributes != error_mark_node)
11543 *attrlist = chainon (*attrlist, declarator->std_attributes);
11544 else
11545 /* We should have already diagnosed the issue (c++/78344). */
11546 gcc_assert (seen_error ());
11549 /* Handle parameter packs. */
11550 if (parameter_pack_p)
11552 if (decl_context == PARM)
11553 /* Turn the type into a pack expansion.*/
11554 type = make_pack_expansion (type);
11555 else
11556 error ("non-parameter %qs cannot be a parameter pack", name);
11559 if ((decl_context == FIELD || decl_context == PARM)
11560 && !processing_template_decl
11561 && variably_modified_type_p (type, NULL_TREE))
11563 if (decl_context == FIELD)
11564 error ("data member may not have variably modified type %qT", type);
11565 else
11566 error ("parameter may not have variably modified type %qT", type);
11567 type = error_mark_node;
11570 if (explicitp == 1 || (explicitp && friendp))
11572 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11573 in the declaration of a constructor or conversion function within
11574 a class definition. */
11575 if (!current_class_type)
11576 error_at (declspecs->locations[ds_explicit],
11577 "%<explicit%> outside class declaration");
11578 else if (friendp)
11579 error_at (declspecs->locations[ds_explicit],
11580 "%<explicit%> in friend declaration");
11581 else
11582 error_at (declspecs->locations[ds_explicit],
11583 "only declarations of constructors and conversion operators "
11584 "can be %<explicit%>");
11585 explicitp = 0;
11588 if (storage_class == sc_mutable)
11590 if (decl_context != FIELD || friendp)
11592 error ("non-member %qs cannot be declared %<mutable%>", name);
11593 storage_class = sc_none;
11595 else if (decl_context == TYPENAME || typedef_p)
11597 error ("non-object member %qs cannot be declared %<mutable%>", name);
11598 storage_class = sc_none;
11600 else if (TREE_CODE (type) == FUNCTION_TYPE
11601 || TREE_CODE (type) == METHOD_TYPE)
11603 error ("function %qs cannot be declared %<mutable%>", name);
11604 storage_class = sc_none;
11606 else if (staticp)
11608 error ("static %qs cannot be declared %<mutable%>", name);
11609 storage_class = sc_none;
11611 else if (type_quals & TYPE_QUAL_CONST)
11613 error ("const %qs cannot be declared %<mutable%>", name);
11614 storage_class = sc_none;
11616 else if (TREE_CODE (type) == REFERENCE_TYPE)
11618 permerror (input_location, "reference %qs cannot be declared "
11619 "%<mutable%>", name);
11620 storage_class = sc_none;
11624 /* If this is declaring a typedef name, return a TYPE_DECL. */
11625 if (typedef_p && decl_context != TYPENAME)
11627 tree decl;
11629 /* This declaration:
11631 typedef void f(int) const;
11633 declares a function type which is not a member of any
11634 particular class, but which is cv-qualified; for
11635 example "f S::*" declares a pointer to a const-qualified
11636 member function of S. We record the cv-qualification in the
11637 function type. */
11638 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11640 type = apply_memfn_quals (type, memfn_quals, rqual);
11642 /* We have now dealt with these qualifiers. */
11643 memfn_quals = TYPE_UNQUALIFIED;
11644 rqual = REF_QUAL_NONE;
11647 if (type_uses_auto (type))
11649 error ("typedef declared %<auto%>");
11650 type = error_mark_node;
11653 if (reqs)
11654 error_at (location_of (reqs), "requires-clause on typedef");
11656 if (decl_context == FIELD)
11657 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11658 else
11659 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11660 if (id_declarator && declarator->u.id.qualifying_scope) {
11661 error_at (DECL_SOURCE_LOCATION (decl),
11662 "typedef name may not be a nested-name-specifier");
11663 TREE_TYPE (decl) = error_mark_node;
11666 if (decl_context != FIELD)
11668 if (!current_function_decl)
11669 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11670 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
11671 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11672 (current_function_decl)))
11673 /* The TYPE_DECL is "abstract" because there will be
11674 clones of this constructor/destructor, and there will
11675 be copies of this TYPE_DECL generated in those
11676 clones. The decloning optimization (for space) may
11677 revert this subsequently if it determines that
11678 the clones should share a common implementation. */
11679 DECL_ABSTRACT_P (decl) = true;
11681 else if (current_class_type
11682 && constructor_name_p (unqualified_id, current_class_type))
11683 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11684 "as enclosing class",
11685 unqualified_id);
11687 /* If the user declares "typedef struct {...} foo" then the
11688 struct will have an anonymous name. Fill that name in now.
11689 Nothing can refer to it, so nothing needs know about the name
11690 change. */
11691 if (type != error_mark_node
11692 && unqualified_id
11693 && TYPE_NAME (type)
11694 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11695 && TYPE_UNNAMED_P (type)
11696 && declspecs->type_definition_p
11697 && attributes_naming_typedef_ok (*attrlist)
11698 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11699 name_unnamed_type (type, decl);
11701 if (signed_p
11702 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11703 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11705 bad_specifiers (decl, BSP_TYPE, virtualp,
11706 memfn_quals != TYPE_UNQUALIFIED,
11707 inlinep, friendp, raises != NULL_TREE);
11709 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11710 /* Acknowledge that this was written:
11711 `using analias = atype;'. */
11712 TYPE_DECL_ALIAS_P (decl) = 1;
11714 return decl;
11717 /* Detect the case of an array type of unspecified size
11718 which came, as such, direct from a typedef name.
11719 We must copy the type, so that the array's domain can be
11720 individually set by the object's initializer. */
11722 if (type && typedef_type
11723 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11724 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11725 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11727 /* Detect where we're using a typedef of function type to declare a
11728 function. PARMS will not be set, so we must create it now. */
11730 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11732 tree decls = NULL_TREE;
11733 tree args;
11735 for (args = TYPE_ARG_TYPES (type);
11736 args && args != void_list_node;
11737 args = TREE_CHAIN (args))
11739 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
11740 TREE_VALUE (args));
11742 DECL_CHAIN (decl) = decls;
11743 decls = decl;
11746 parms = nreverse (decls);
11748 if (decl_context != TYPENAME)
11750 /* The qualifiers on the function type become the qualifiers on
11751 the non-static member function. */
11752 memfn_quals |= type_memfn_quals (type);
11753 rqual = type_memfn_rqual (type);
11754 type_quals = TYPE_UNQUALIFIED;
11758 /* If this is a type name (such as, in a cast or sizeof),
11759 compute the type and return it now. */
11761 if (decl_context == TYPENAME)
11763 /* Note that here we don't care about type_quals. */
11765 /* Special case: "friend class foo" looks like a TYPENAME context. */
11766 if (friendp)
11768 if (inlinep)
11770 error ("%<inline%> specified for friend class declaration");
11771 inlinep = 0;
11774 if (!current_aggr)
11776 /* Don't allow friend declaration without a class-key. */
11777 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11778 permerror (input_location, "template parameters cannot be friends");
11779 else if (TREE_CODE (type) == TYPENAME_TYPE)
11780 permerror (input_location, "friend declaration requires class-key, "
11781 "i.e. %<friend class %T::%D%>",
11782 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11783 else
11784 permerror (input_location, "friend declaration requires class-key, "
11785 "i.e. %<friend %#T%>",
11786 type);
11789 /* Only try to do this stuff if we didn't already give up. */
11790 if (type != integer_type_node)
11792 /* A friendly class? */
11793 if (current_class_type)
11794 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11795 /*complain=*/true);
11796 else
11797 error ("trying to make class %qT a friend of global scope",
11798 type);
11800 type = void_type_node;
11803 else if (memfn_quals || rqual)
11805 if (ctype == NULL_TREE
11806 && TREE_CODE (type) == METHOD_TYPE)
11807 ctype = TYPE_METHOD_BASETYPE (type);
11809 if (ctype)
11810 type = build_memfn_type (type, ctype, memfn_quals, rqual);
11811 /* Core issue #547: need to allow this in template type args.
11812 Allow it in general in C++11 for alias-declarations. */
11813 else if ((template_type_arg || cxx_dialect >= cxx11)
11814 && TREE_CODE (type) == FUNCTION_TYPE)
11815 type = apply_memfn_quals (type, memfn_quals, rqual);
11816 else
11817 error ("invalid qualifiers on non-member function type");
11820 if (reqs)
11821 error_at (location_of (reqs), "requires-clause on type-id");
11823 return type;
11825 else if (unqualified_id == NULL_TREE && decl_context != PARM
11826 && decl_context != CATCHPARM
11827 && TREE_CODE (type) != UNION_TYPE
11828 && ! bitfield
11829 && innermost_code != cdk_decomp)
11831 error ("abstract declarator %qT used as declaration", type);
11832 return error_mark_node;
11835 if (!FUNC_OR_METHOD_TYPE_P (type))
11837 /* Only functions may be declared using an operator-function-id. */
11838 if (dname && IDENTIFIER_ANY_OP_P (dname))
11840 error ("declaration of %qD as non-function", dname);
11841 return error_mark_node;
11844 if (reqs)
11845 error_at (location_of (reqs),
11846 "requires-clause on declaration of non-function type %qT",
11847 type);
11850 /* We don't check parameter types here because we can emit a better
11851 error message later. */
11852 if (decl_context != PARM)
11854 type = check_var_type (unqualified_id, type);
11855 if (type == error_mark_node)
11856 return error_mark_node;
11859 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11860 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11862 if (decl_context == PARM || decl_context == CATCHPARM)
11864 if (ctype || in_namespace)
11865 error ("cannot use %<::%> in parameter declaration");
11867 if (type_uses_auto (type)
11868 && !(cxx_dialect >= cxx17 && template_parm_flag))
11870 if (cxx_dialect >= cxx14)
11871 error ("%<auto%> parameter not permitted in this context");
11872 else
11873 error ("parameter declared %<auto%>");
11874 type = error_mark_node;
11877 /* A parameter declared as an array of T is really a pointer to T.
11878 One declared as a function is really a pointer to a function.
11879 One declared as a member is really a pointer to member. */
11881 if (TREE_CODE (type) == ARRAY_TYPE)
11883 /* Transfer const-ness of array into that of type pointed to. */
11884 type = build_pointer_type (TREE_TYPE (type));
11885 type_quals = TYPE_UNQUALIFIED;
11886 array_parameter_p = true;
11888 else if (TREE_CODE (type) == FUNCTION_TYPE)
11889 type = build_pointer_type (type);
11892 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
11893 && !(identifier_p (unqualified_id)
11894 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
11896 cp_cv_quals real_quals = memfn_quals;
11897 if (cxx_dialect < cxx14 && constexpr_p
11898 && sfk != sfk_constructor && sfk != sfk_destructor)
11899 real_quals |= TYPE_QUAL_CONST;
11900 type = build_memfn_type (type, ctype, real_quals, rqual);
11904 tree decl = NULL_TREE;
11906 if (decl_context == PARM)
11908 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
11909 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
11911 bad_specifiers (decl, BSP_PARM, virtualp,
11912 memfn_quals != TYPE_UNQUALIFIED,
11913 inlinep, friendp, raises != NULL_TREE);
11915 else if (decl_context == FIELD)
11917 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
11918 if (tree auto_node = type_uses_auto (type))
11920 location_t loc = declspecs->locations[ds_type_spec];
11921 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
11922 error_at (loc, "invalid use of template-name %qE without an "
11923 "argument list",
11924 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
11925 else
11926 error_at (loc, "non-static data member declared with "
11927 "placeholder %qT", auto_node);
11928 type = error_mark_node;
11931 /* The C99 flexible array extension. */
11932 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
11933 && TYPE_DOMAIN (type) == NULL_TREE)
11935 if (ctype
11936 && (TREE_CODE (ctype) == UNION_TYPE
11937 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
11939 error ("flexible array member in union");
11940 type = error_mark_node;
11942 else
11944 /* Array is a flexible member. */
11945 if (in_system_header_at (input_location))
11946 /* Do not warn on flexible array members in system
11947 headers because glibc uses them. */;
11948 else if (name)
11949 pedwarn (input_location, OPT_Wpedantic,
11950 "ISO C++ forbids flexible array member %qs", name);
11951 else
11952 pedwarn (input_location, OPT_Wpedantic,
11953 "ISO C++ forbids flexible array members");
11955 /* Flexible array member has a null domain. */
11956 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11960 if (type == error_mark_node)
11962 /* Happens when declaring arrays of sizes which
11963 are error_mark_node, for example. */
11964 decl = NULL_TREE;
11966 else if (in_namespace && !friendp)
11968 /* Something like struct S { int N::j; }; */
11969 error ("invalid use of %<::%>");
11970 return error_mark_node;
11972 else if (TREE_CODE (type) == FUNCTION_TYPE
11973 || TREE_CODE (type) == METHOD_TYPE)
11975 int publicp = 0;
11976 tree function_context;
11978 if (friendp == 0)
11980 /* This should never happen in pure C++ (the check
11981 could be an assert). It could happen in
11982 Objective-C++ if someone writes invalid code that
11983 uses a function declaration for an instance
11984 variable or property (instance variables and
11985 properties are parsed as FIELD_DECLs, but they are
11986 part of an Objective-C class, not a C++ class).
11987 That code is invalid and is caught by this
11988 check. */
11989 if (!ctype)
11991 error ("declaration of function %qD in invalid context",
11992 unqualified_id);
11993 return error_mark_node;
11996 /* ``A union may [ ... ] not [ have ] virtual functions.''
11997 ARM 9.5 */
11998 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12000 error ("function %qD declared %<virtual%> inside a union",
12001 unqualified_id);
12002 return error_mark_node;
12005 if (virtualp
12006 && identifier_p (unqualified_id)
12007 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
12009 error ("%qD cannot be declared %<virtual%>, since it "
12010 "is always static", unqualified_id);
12011 virtualp = 0;
12015 /* Check that the name used for a destructor makes sense. */
12016 if (sfk == sfk_destructor)
12018 tree uqname = id_declarator->u.id.unqualified_name;
12020 if (!ctype)
12022 gcc_assert (friendp);
12023 error ("expected qualified name in friend declaration "
12024 "for destructor %qD", uqname);
12025 return error_mark_node;
12028 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
12030 error ("declaration of %qD as member of %qT",
12031 uqname, ctype);
12032 return error_mark_node;
12034 if (concept_p)
12036 error ("a destructor cannot be %<concept%>");
12037 return error_mark_node;
12039 if (constexpr_p)
12041 error ("a destructor cannot be %<constexpr%>");
12042 return error_mark_node;
12045 else if (sfk == sfk_constructor && friendp && !ctype)
12047 error ("expected qualified name in friend declaration "
12048 "for constructor %qD",
12049 id_declarator->u.id.unqualified_name);
12050 return error_mark_node;
12052 if (sfk == sfk_constructor)
12053 if (concept_p)
12055 error ("a constructor cannot be %<concept%>");
12056 return error_mark_node;
12058 if (concept_p)
12060 error ("a concept cannot be a member function");
12061 concept_p = false;
12064 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12066 tree tmpl = TREE_OPERAND (unqualified_id, 0);
12067 if (variable_template_p (tmpl))
12069 error ("specialization of variable template %qD "
12070 "declared as function", tmpl);
12071 inform (DECL_SOURCE_LOCATION (tmpl),
12072 "variable template declared here");
12073 return error_mark_node;
12077 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12078 function_context = (ctype != NULL_TREE) ?
12079 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12080 publicp = (! friendp || ! staticp)
12081 && function_context == NULL_TREE;
12083 if (late_return_type_p)
12084 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12086 decl = grokfndecl (ctype, type,
12087 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12088 ? unqualified_id : dname,
12089 parms,
12090 unqualified_id,
12091 reqs,
12092 virtualp, flags, memfn_quals, rqual, raises,
12093 friendp ? -1 : 0, friendp, publicp,
12094 inlinep | (2 * constexpr_p) | (4 * concept_p),
12095 initialized == SD_DELETED, sfk,
12096 funcdef_flag, template_count, in_namespace,
12097 attrlist, declarator->id_loc);
12098 decl = set_virt_specifiers (decl, virt_specifiers);
12099 if (decl == NULL_TREE)
12100 return error_mark_node;
12101 #if 0
12102 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12103 /* The decl and setting of decl_attr is also turned off. */
12104 decl = build_decl_attribute_variant (decl, decl_attr);
12105 #endif
12107 /* [class.conv.ctor]
12109 A constructor declared without the function-specifier
12110 explicit that can be called with a single parameter
12111 specifies a conversion from the type of its first
12112 parameter to the type of its class. Such a constructor
12113 is called a converting constructor. */
12114 if (explicitp == 2)
12115 DECL_NONCONVERTING_P (decl) = 1;
12117 else if (!staticp && !dependent_type_p (type)
12118 && !COMPLETE_TYPE_P (complete_type (type))
12119 && (!complete_or_array_type_p (type)
12120 || initialized == 0))
12122 if (TREE_CODE (type) != ARRAY_TYPE
12123 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12125 if (unqualified_id)
12127 error ("field %qD has incomplete type %qT",
12128 unqualified_id, type);
12129 cxx_incomplete_type_inform (strip_array_types (type));
12131 else
12132 error ("name %qT has incomplete type", type);
12134 type = error_mark_node;
12135 decl = NULL_TREE;
12138 else
12140 if (friendp)
12142 error ("%qE is neither function nor member function; "
12143 "cannot be declared friend", unqualified_id);
12144 friendp = 0;
12146 decl = NULL_TREE;
12149 if (friendp)
12151 /* Friends are treated specially. */
12152 if (ctype == current_class_type)
12153 ; /* We already issued a permerror. */
12154 else if (decl && DECL_NAME (decl))
12156 if (template_class_depth (current_class_type) == 0)
12158 decl = check_explicit_specialization
12159 (unqualified_id, decl, template_count,
12160 2 * funcdef_flag + 4);
12161 if (decl == error_mark_node)
12162 return error_mark_node;
12165 decl = do_friend (ctype, unqualified_id, decl,
12166 *attrlist, flags,
12167 funcdef_flag);
12168 return decl;
12170 else
12171 return error_mark_node;
12174 /* Structure field. It may not be a function, except for C++. */
12176 if (decl == NULL_TREE)
12178 if (staticp)
12180 /* C++ allows static class members. All other work
12181 for this is done by grokfield. */
12182 decl = build_lang_decl_loc (declarator
12183 ? declarator->id_loc
12184 : input_location,
12185 VAR_DECL, unqualified_id, type);
12186 set_linkage_for_static_data_member (decl);
12187 if (concept_p)
12188 error ("static data member %qE declared %<concept%>",
12189 unqualified_id);
12190 else if (constexpr_p && !initialized)
12192 error ("%<constexpr%> static data member %qD must have an "
12193 "initializer", decl);
12194 constexpr_p = false;
12197 if (inlinep)
12198 mark_inline_variable (decl);
12200 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12201 && !(cxx_dialect >= cxx17 && constexpr_p))
12202 /* Even if there is an in-class initialization, DECL
12203 is considered undefined until an out-of-class
12204 definition is provided, unless this is an inline
12205 variable. */
12206 DECL_EXTERNAL (decl) = 1;
12208 if (thread_p)
12210 CP_DECL_THREAD_LOCAL_P (decl) = true;
12211 if (!processing_template_decl)
12212 set_decl_tls_model (decl, decl_default_tls_model (decl));
12213 if (declspecs->gnu_thread_keyword_p)
12214 SET_DECL_GNU_TLS_P (decl);
12217 else
12219 if (concept_p)
12220 error ("non-static data member %qE declared %<concept%>",
12221 unqualified_id);
12222 else if (constexpr_p)
12224 error ("non-static data member %qE declared %<constexpr%>",
12225 unqualified_id);
12226 constexpr_p = false;
12228 decl = build_decl (input_location,
12229 FIELD_DECL, unqualified_id, type);
12230 DECL_NONADDRESSABLE_P (decl) = bitfield;
12231 if (bitfield && !unqualified_id)
12233 TREE_NO_WARNING (decl) = 1;
12234 DECL_PADDING_P (decl) = 1;
12237 if (storage_class == sc_mutable)
12239 DECL_MUTABLE_P (decl) = 1;
12240 storage_class = sc_none;
12243 if (initialized)
12245 /* An attempt is being made to initialize a non-static
12246 member. This is new in C++11. */
12247 maybe_warn_cpp0x (CPP0X_NSDMI);
12249 /* If this has been parsed with static storage class, but
12250 errors forced staticp to be cleared, ensure NSDMI is
12251 not present. */
12252 if (declspecs->storage_class == sc_static)
12253 DECL_INITIAL (decl) = error_mark_node;
12257 bad_specifiers (decl, BSP_FIELD, virtualp,
12258 memfn_quals != TYPE_UNQUALIFIED,
12259 staticp ? false : inlinep, friendp,
12260 raises != NULL_TREE);
12263 else if (TREE_CODE (type) == FUNCTION_TYPE
12264 || TREE_CODE (type) == METHOD_TYPE)
12266 tree original_name;
12267 int publicp = 0;
12269 if (!unqualified_id)
12270 return error_mark_node;
12272 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12273 original_name = dname;
12274 else
12275 original_name = unqualified_id;
12276 // FIXME:gcc_assert (original_name == dname);
12278 if (storage_class == sc_auto)
12279 error ("storage class %<auto%> invalid for function %qs", name);
12280 else if (storage_class == sc_register)
12281 error ("storage class %<register%> invalid for function %qs", name);
12282 else if (thread_p)
12284 if (declspecs->gnu_thread_keyword_p)
12285 error ("storage class %<__thread%> invalid for function %qs",
12286 name);
12287 else
12288 error ("storage class %<thread_local%> invalid for function %qs",
12289 name);
12292 if (virt_specifiers)
12293 error ("virt-specifiers in %qs not allowed outside a class definition", name);
12294 /* Function declaration not at top level.
12295 Storage classes other than `extern' are not allowed
12296 and `extern' makes no difference. */
12297 if (! toplevel_bindings_p ()
12298 && (storage_class == sc_static
12299 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12300 && pedantic)
12302 if (storage_class == sc_static)
12303 pedwarn (input_location, OPT_Wpedantic,
12304 "%<static%> specifier invalid for function %qs "
12305 "declared out of global scope", name);
12306 else
12307 pedwarn (input_location, OPT_Wpedantic,
12308 "%<inline%> specifier invalid for function %qs "
12309 "declared out of global scope", name);
12312 if (ctype == NULL_TREE)
12314 if (virtualp)
12316 error ("virtual non-class function %qs", name);
12317 virtualp = 0;
12319 else if (sfk == sfk_constructor
12320 || sfk == sfk_destructor)
12322 error (funcdef_flag
12323 ? G_("%qs defined in a non-class scope")
12324 : G_("%qs declared in a non-class scope"), name);
12325 sfk = sfk_none;
12329 /* Record whether the function is public. */
12330 publicp = (ctype != NULL_TREE
12331 || storage_class != sc_static);
12333 if (late_return_type_p)
12334 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12336 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12337 reqs, virtualp, flags, memfn_quals, rqual, raises,
12338 1, friendp,
12339 publicp,
12340 inlinep | (2 * constexpr_p) | (4 * concept_p),
12341 initialized == SD_DELETED,
12342 sfk,
12343 funcdef_flag,
12344 template_count, in_namespace, attrlist,
12345 declarator->id_loc);
12346 if (decl == NULL_TREE)
12347 return error_mark_node;
12349 if (explicitp == 2)
12350 DECL_NONCONVERTING_P (decl) = 1;
12351 if (staticp == 1)
12353 int invalid_static = 0;
12355 /* Don't allow a static member function in a class, and forbid
12356 declaring main to be static. */
12357 if (TREE_CODE (type) == METHOD_TYPE)
12359 permerror (input_location, "cannot declare member function %qD to have "
12360 "static linkage", decl);
12361 invalid_static = 1;
12363 else if (current_function_decl)
12365 /* 7.1.1: There can be no static function declarations within a
12366 block. */
12367 error ("cannot declare static function inside another function");
12368 invalid_static = 1;
12371 if (invalid_static)
12373 staticp = 0;
12374 storage_class = sc_none;
12378 else
12380 /* It's a variable. */
12382 /* An uninitialized decl with `extern' is a reference. */
12383 decl = grokvardecl (type, dname, unqualified_id,
12384 declspecs,
12385 initialized,
12386 type_quals,
12387 inlinep,
12388 concept_p,
12389 template_count,
12390 ctype ? ctype : in_namespace);
12391 if (decl == NULL_TREE)
12392 return error_mark_node;
12394 bad_specifiers (decl, BSP_VAR, virtualp,
12395 memfn_quals != TYPE_UNQUALIFIED,
12396 inlinep, friendp, raises != NULL_TREE);
12398 if (ctype)
12400 DECL_CONTEXT (decl) = ctype;
12401 if (staticp == 1)
12403 permerror (input_location, "%<static%> may not be used when defining "
12404 "(as opposed to declaring) a static data member");
12405 staticp = 0;
12406 storage_class = sc_none;
12408 if (storage_class == sc_register && TREE_STATIC (decl))
12410 error ("static member %qD declared %<register%>", decl);
12411 storage_class = sc_none;
12413 if (storage_class == sc_extern && pedantic)
12415 pedwarn (input_location, OPT_Wpedantic,
12416 "cannot explicitly declare member %q#D to have "
12417 "extern linkage", decl);
12418 storage_class = sc_none;
12421 else if (constexpr_p && DECL_EXTERNAL (decl))
12423 error ("declaration of %<constexpr%> variable %qD "
12424 "is not a definition", decl);
12425 constexpr_p = false;
12428 if (inlinep)
12429 mark_inline_variable (decl);
12430 if (innermost_code == cdk_decomp)
12432 gcc_assert (declarator && declarator->kind == cdk_decomp);
12433 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12434 DECL_ARTIFICIAL (decl) = 1;
12435 fit_decomposition_lang_decl (decl, NULL_TREE);
12439 if (VAR_P (decl) && !initialized)
12440 if (tree auto_node = type_uses_auto (type))
12441 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12443 location_t loc = declspecs->locations[ds_type_spec];
12444 error_at (loc, "declaration of %q#D has no initializer", decl);
12445 TREE_TYPE (decl) = error_mark_node;
12448 if (storage_class == sc_extern && initialized && !funcdef_flag)
12450 if (toplevel_bindings_p ())
12452 /* It's common practice (and completely valid) to have a const
12453 be initialized and declared extern. */
12454 if (!(type_quals & TYPE_QUAL_CONST))
12455 warning (0, "%qs initialized and declared %<extern%>", name);
12457 else
12459 error ("%qs has both %<extern%> and initializer", name);
12460 return error_mark_node;
12464 /* Record `register' declaration for warnings on &
12465 and in case doing stupid register allocation. */
12467 if (storage_class == sc_register)
12469 DECL_REGISTER (decl) = 1;
12470 /* Warn about register storage specifiers on PARM_DECLs. */
12471 if (TREE_CODE (decl) == PARM_DECL)
12473 if (cxx_dialect >= cxx17)
12474 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12475 "ISO C++17 does not allow %<register%> storage "
12476 "class specifier");
12477 else
12478 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12479 "%<register%> storage class specifier used");
12482 else if (storage_class == sc_extern)
12483 DECL_THIS_EXTERN (decl) = 1;
12484 else if (storage_class == sc_static)
12485 DECL_THIS_STATIC (decl) = 1;
12487 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12488 if (constexpr_p && VAR_P (decl))
12489 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12491 /* Record constancy and volatility on the DECL itself . There's
12492 no need to do this when processing a template; we'll do this
12493 for the instantiated declaration based on the type of DECL. */
12494 if (!processing_template_decl)
12495 cp_apply_type_quals_to_decl (type_quals, decl);
12497 return decl;
12501 /* Subroutine of start_function. Ensure that each of the parameter
12502 types (as listed in PARMS) is complete, as is required for a
12503 function definition. */
12505 static void
12506 require_complete_types_for_parms (tree parms)
12508 for (; parms; parms = DECL_CHAIN (parms))
12510 if (dependent_type_p (TREE_TYPE (parms)))
12511 continue;
12512 if (!VOID_TYPE_P (TREE_TYPE (parms))
12513 && complete_type_or_else (TREE_TYPE (parms), parms))
12515 relayout_decl (parms);
12516 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12518 maybe_warn_parm_abi (TREE_TYPE (parms),
12519 DECL_SOURCE_LOCATION (parms));
12521 else
12522 /* grokparms or complete_type_or_else will have already issued
12523 an error. */
12524 TREE_TYPE (parms) = error_mark_node;
12528 /* Returns nonzero if T is a local variable. */
12531 local_variable_p (const_tree t)
12533 if ((VAR_P (t)
12534 /* A VAR_DECL with a context that is a _TYPE is a static data
12535 member. */
12536 && !TYPE_P (CP_DECL_CONTEXT (t))
12537 /* Any other non-local variable must be at namespace scope. */
12538 && !DECL_NAMESPACE_SCOPE_P (t))
12539 || (TREE_CODE (t) == PARM_DECL))
12540 return 1;
12542 return 0;
12545 /* Like local_variable_p, but suitable for use as a tree-walking
12546 function. */
12548 static tree
12549 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12550 void * /*data*/)
12552 if (local_variable_p (*tp)
12553 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12554 return *tp;
12555 else if (TYPE_P (*tp))
12556 *walk_subtrees = 0;
12558 return NULL_TREE;
12561 /* Check that ARG, which is a default-argument expression for a
12562 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12563 something goes wrong. DECL may also be a _TYPE node, rather than a
12564 DECL, if there is no DECL available. */
12566 tree
12567 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12569 tree var;
12570 tree decl_type;
12572 if (TREE_CODE (arg) == DEFAULT_ARG)
12573 /* We get a DEFAULT_ARG when looking at an in-class declaration
12574 with a default argument. Ignore the argument for now; we'll
12575 deal with it after the class is complete. */
12576 return arg;
12578 if (TYPE_P (decl))
12580 decl_type = decl;
12581 decl = NULL_TREE;
12583 else
12584 decl_type = TREE_TYPE (decl);
12586 if (arg == error_mark_node
12587 || decl == error_mark_node
12588 || TREE_TYPE (arg) == error_mark_node
12589 || decl_type == error_mark_node)
12590 /* Something already went wrong. There's no need to check
12591 further. */
12592 return error_mark_node;
12594 /* [dcl.fct.default]
12596 A default argument expression is implicitly converted to the
12597 parameter type. */
12598 ++cp_unevaluated_operand;
12599 perform_implicit_conversion_flags (decl_type, arg, complain,
12600 LOOKUP_IMPLICIT);
12601 --cp_unevaluated_operand;
12603 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12604 the call sites. */
12605 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12606 && null_ptr_cst_p (arg))
12607 return nullptr_node;
12609 /* [dcl.fct.default]
12611 Local variables shall not be used in default argument
12612 expressions.
12614 The keyword `this' shall not be used in a default argument of a
12615 member function. */
12616 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12617 if (var)
12619 if (complain & tf_warning_or_error)
12621 if (DECL_NAME (var) == this_identifier)
12622 permerror (input_location, "default argument %qE uses %qD",
12623 arg, var);
12624 else
12625 error ("default argument %qE uses local variable %qD", arg, var);
12627 return error_mark_node;
12630 /* All is well. */
12631 return arg;
12634 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12636 static tree
12637 type_is_deprecated (tree type)
12639 enum tree_code code;
12640 if (TREE_DEPRECATED (type))
12641 return type;
12642 if (TYPE_NAME (type))
12644 if (TREE_DEPRECATED (TYPE_NAME (type)))
12645 return type;
12646 else
12647 return NULL_TREE;
12650 /* Do warn about using typedefs to a deprecated class. */
12651 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12652 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12654 code = TREE_CODE (type);
12656 if (code == POINTER_TYPE || code == REFERENCE_TYPE
12657 || code == OFFSET_TYPE || code == FUNCTION_TYPE
12658 || code == METHOD_TYPE || code == ARRAY_TYPE)
12659 return type_is_deprecated (TREE_TYPE (type));
12661 if (TYPE_PTRMEMFUNC_P (type))
12662 return type_is_deprecated
12663 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12665 return NULL_TREE;
12668 /* Decode the list of parameter types for a function type.
12669 Given the list of things declared inside the parens,
12670 return a list of types.
12672 If this parameter does not end with an ellipsis, we append
12673 void_list_node.
12675 *PARMS is set to the chain of PARM_DECLs created. */
12677 tree
12678 grokparms (tree parmlist, tree *parms)
12680 tree result = NULL_TREE;
12681 tree decls = NULL_TREE;
12682 tree parm;
12683 int any_error = 0;
12685 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12687 tree type = NULL_TREE;
12688 tree init = TREE_PURPOSE (parm);
12689 tree decl = TREE_VALUE (parm);
12691 if (parm == void_list_node)
12692 break;
12694 if (! decl || TREE_TYPE (decl) == error_mark_node)
12695 continue;
12697 type = TREE_TYPE (decl);
12698 if (VOID_TYPE_P (type))
12700 if (same_type_p (type, void_type_node)
12701 && !init
12702 && !DECL_NAME (decl) && !result
12703 && TREE_CHAIN (parm) == void_list_node)
12704 /* DR 577: A parameter list consisting of a single
12705 unnamed parameter of non-dependent type 'void'. */
12706 break;
12707 else if (cv_qualified_p (type))
12708 error_at (DECL_SOURCE_LOCATION (decl),
12709 "invalid use of cv-qualified type %qT in "
12710 "parameter declaration", type);
12711 else
12712 error_at (DECL_SOURCE_LOCATION (decl),
12713 "invalid use of type %<void%> in parameter "
12714 "declaration");
12715 /* It's not a good idea to actually create parameters of
12716 type `void'; other parts of the compiler assume that a
12717 void type terminates the parameter list. */
12718 type = error_mark_node;
12719 TREE_TYPE (decl) = error_mark_node;
12722 if (type != error_mark_node)
12724 if (deprecated_state != DEPRECATED_SUPPRESS)
12726 tree deptype = type_is_deprecated (type);
12727 if (deptype)
12728 warn_deprecated_use (deptype, NULL_TREE);
12731 /* Top-level qualifiers on the parameters are
12732 ignored for function types. */
12733 type = cp_build_qualified_type (type, 0);
12734 if (TREE_CODE (type) == METHOD_TYPE)
12736 error ("parameter %qD invalidly declared method type", decl);
12737 type = build_pointer_type (type);
12738 TREE_TYPE (decl) = type;
12740 else if (abstract_virtuals_error (decl, type))
12741 any_error = 1; /* Seems like a good idea. */
12742 else if (cxx_dialect < cxx17 && POINTER_TYPE_P (type))
12744 /* Before C++17 DR 393:
12745 [dcl.fct]/6, parameter types cannot contain pointers
12746 (references) to arrays of unknown bound. */
12747 tree t = TREE_TYPE (type);
12748 int ptr = TYPE_PTR_P (type);
12750 while (1)
12752 if (TYPE_PTR_P (t))
12753 ptr = 1;
12754 else if (TREE_CODE (t) != ARRAY_TYPE)
12755 break;
12756 else if (!TYPE_DOMAIN (t))
12757 break;
12758 t = TREE_TYPE (t);
12760 if (TREE_CODE (t) == ARRAY_TYPE)
12761 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
12763 ? G_("parameter %qD includes pointer to array of "
12764 "unknown bound %qT")
12765 : G_("parameter %qD includes reference to array of "
12766 "unknown bound %qT"),
12767 decl, t);
12770 if (any_error)
12771 init = NULL_TREE;
12772 else if (init && !processing_template_decl)
12773 init = check_default_argument (decl, init, tf_warning_or_error);
12776 DECL_CHAIN (decl) = decls;
12777 decls = decl;
12778 result = tree_cons (init, type, result);
12780 decls = nreverse (decls);
12781 result = nreverse (result);
12782 if (parm)
12783 result = chainon (result, void_list_node);
12784 *parms = decls;
12786 return result;
12790 /* D is a constructor or overloaded `operator='.
12792 Let T be the class in which D is declared. Then, this function
12793 returns:
12795 -1 if D's is an ill-formed constructor or copy assignment operator
12796 whose first parameter is of type `T'.
12797 0 if D is not a copy constructor or copy assignment
12798 operator.
12799 1 if D is a copy constructor or copy assignment operator whose
12800 first parameter is a reference to non-const qualified T.
12801 2 if D is a copy constructor or copy assignment operator whose
12802 first parameter is a reference to const qualified T.
12804 This function can be used as a predicate. Positive values indicate
12805 a copy constructor and nonzero values indicate a copy assignment
12806 operator. */
12809 copy_fn_p (const_tree d)
12811 tree args;
12812 tree arg_type;
12813 int result = 1;
12815 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12817 if (TREE_CODE (d) == TEMPLATE_DECL
12818 || (DECL_TEMPLATE_INFO (d)
12819 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12820 /* Instantiations of template member functions are never copy
12821 functions. Note that member functions of templated classes are
12822 represented as template functions internally, and we must
12823 accept those as copy functions. */
12824 return 0;
12826 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12827 if (!args)
12828 return 0;
12830 arg_type = TREE_VALUE (args);
12831 if (arg_type == error_mark_node)
12832 return 0;
12834 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12836 /* Pass by value copy assignment operator. */
12837 result = -1;
12839 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
12840 && !TYPE_REF_IS_RVALUE (arg_type)
12841 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12843 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12844 result = 2;
12846 else
12847 return 0;
12849 args = TREE_CHAIN (args);
12851 if (args && args != void_list_node && !TREE_PURPOSE (args))
12852 /* There are more non-optional args. */
12853 return 0;
12855 return result;
12858 /* D is a constructor or overloaded `operator='.
12860 Let T be the class in which D is declared. Then, this function
12861 returns true when D is a move constructor or move assignment
12862 operator, false otherwise. */
12864 bool
12865 move_fn_p (const_tree d)
12867 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12869 if (cxx_dialect == cxx98)
12870 /* There are no move constructors if we are in C++98 mode. */
12871 return false;
12873 if (TREE_CODE (d) == TEMPLATE_DECL
12874 || (DECL_TEMPLATE_INFO (d)
12875 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12876 /* Instantiations of template member functions are never move
12877 functions. Note that member functions of templated classes are
12878 represented as template functions internally, and we must
12879 accept those as move functions. */
12880 return 0;
12882 return move_signature_fn_p (d);
12885 /* D is a constructor or overloaded `operator='.
12887 Then, this function returns true when D has the same signature as a move
12888 constructor or move assignment operator (because either it is such a
12889 ctor/op= or it is a template specialization with the same signature),
12890 false otherwise. */
12892 bool
12893 move_signature_fn_p (const_tree d)
12895 tree args;
12896 tree arg_type;
12897 bool result = false;
12899 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12900 if (!args)
12901 return 0;
12903 arg_type = TREE_VALUE (args);
12904 if (arg_type == error_mark_node)
12905 return 0;
12907 if (TREE_CODE (arg_type) == REFERENCE_TYPE
12908 && TYPE_REF_IS_RVALUE (arg_type)
12909 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
12910 DECL_CONTEXT (d)))
12911 result = true;
12913 args = TREE_CHAIN (args);
12915 if (args && args != void_list_node && !TREE_PURPOSE (args))
12916 /* There are more non-optional args. */
12917 return false;
12919 return result;
12922 /* Remember any special properties of member function DECL. */
12924 void
12925 grok_special_member_properties (tree decl)
12927 tree class_type;
12929 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
12930 return;
12932 class_type = DECL_CONTEXT (decl);
12933 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
12935 int ctor = copy_fn_p (decl);
12937 if (!DECL_ARTIFICIAL (decl))
12938 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
12940 if (ctor > 0)
12942 /* [class.copy]
12944 A non-template constructor for class X is a copy
12945 constructor if its first parameter is of type X&, const
12946 X&, volatile X& or const volatile X&, and either there
12947 are no other parameters or else all other parameters have
12948 default arguments. */
12949 TYPE_HAS_COPY_CTOR (class_type) = 1;
12950 if (user_provided_p (decl))
12951 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
12952 if (ctor > 1)
12953 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
12955 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
12956 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
12957 else if (move_fn_p (decl) && user_provided_p (decl))
12958 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
12959 else if (is_list_ctor (decl))
12960 TYPE_HAS_LIST_CTOR (class_type) = 1;
12962 if (DECL_DECLARED_CONSTEXPR_P (decl)
12963 && !ctor && !move_fn_p (decl))
12964 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
12966 else if (DECL_NAME (decl) == assign_op_identifier)
12968 /* [class.copy]
12970 A non-template assignment operator for class X is a copy
12971 assignment operator if its parameter is of type X, X&, const
12972 X&, volatile X& or const volatile X&. */
12974 int assop = copy_fn_p (decl);
12976 if (assop)
12978 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
12979 if (user_provided_p (decl))
12980 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
12981 if (assop != 1)
12982 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
12984 else if (move_fn_p (decl) && user_provided_p (decl))
12985 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
12987 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
12988 TYPE_HAS_CONVERSION (class_type) = true;
12990 /* Destructors are handled in check_methods. */
12993 /* Check a constructor DECL has the correct form. Complains
12994 if the class has a constructor of the form X(X). */
12996 bool
12997 grok_ctor_properties (const_tree ctype, const_tree decl)
12999 int ctor_parm = copy_fn_p (decl);
13001 if (ctor_parm < 0)
13003 /* [class.copy]
13005 A declaration of a constructor for a class X is ill-formed if
13006 its first parameter is of type (optionally cv-qualified) X
13007 and either there are no other parameters or else all other
13008 parameters have default arguments.
13010 We *don't* complain about member template instantiations that
13011 have this form, though; they can occur as we try to decide
13012 what constructor to use during overload resolution. Since
13013 overload resolution will never prefer such a constructor to
13014 the non-template copy constructor (which is either explicitly
13015 or implicitly defined), there's no need to worry about their
13016 existence. Theoretically, they should never even be
13017 instantiated, but that's hard to forestall. */
13018 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
13019 ctype, ctype);
13020 return false;
13023 return true;
13026 /* DECL is a declaration for an overloaded or conversion operator. If
13027 COMPLAIN is true, errors are issued for invalid declarations. */
13029 bool
13030 grok_op_properties (tree decl, bool complain)
13032 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13033 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
13034 tree name = DECL_NAME (decl);
13036 tree class_type = DECL_CONTEXT (decl);
13037 if (class_type && !CLASS_TYPE_P (class_type))
13038 class_type = NULL_TREE;
13040 tree_code operator_code;
13041 unsigned op_flags;
13042 if (IDENTIFIER_CONV_OP_P (name))
13044 /* Conversion operators are TYPE_EXPR for the purposes of this
13045 function. */
13046 operator_code = TYPE_EXPR;
13047 op_flags = OVL_OP_FLAG_UNARY;
13049 else
13051 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13053 operator_code = ovl_op->tree_code;
13054 op_flags = ovl_op->flags;
13055 gcc_checking_assert (operator_code != ERROR_MARK);
13056 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13059 if (op_flags & OVL_OP_FLAG_ALLOC)
13061 /* operator new and operator delete are quite special. */
13062 if (class_type)
13063 switch (op_flags)
13065 case OVL_OP_FLAG_ALLOC:
13066 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13067 break;
13069 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13070 TYPE_GETS_DELETE (class_type) |= 1;
13071 break;
13073 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13074 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13075 break;
13077 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13078 TYPE_GETS_DELETE (class_type) |= 2;
13079 break;
13081 default:
13082 gcc_unreachable ();
13085 /* [basic.std.dynamic.allocation]/1:
13087 A program is ill-formed if an allocation function is declared
13088 in a namespace scope other than global scope or declared
13089 static in global scope.
13091 The same also holds true for deallocation functions. */
13092 if (DECL_NAMESPACE_SCOPE_P (decl))
13094 if (CP_DECL_CONTEXT (decl) != global_namespace)
13096 error ("%qD may not be declared within a namespace", decl);
13097 return false;
13100 if (!TREE_PUBLIC (decl))
13102 error ("%qD may not be declared as static", decl);
13103 return false;
13107 if (op_flags & OVL_OP_FLAG_DELETE)
13108 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
13109 else
13111 DECL_IS_OPERATOR_NEW (decl) = 1;
13112 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
13115 return true;
13118 /* An operator function must either be a non-static member function
13119 or have at least one parameter of a class, a reference to a class,
13120 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13121 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13123 if (operator_code == TYPE_EXPR
13124 || operator_code == CALL_EXPR
13125 || operator_code == COMPONENT_REF
13126 || operator_code == ARRAY_REF
13127 || operator_code == NOP_EXPR)
13129 error ("%qD must be a nonstatic member function", decl);
13130 return false;
13133 if (DECL_STATIC_FUNCTION_P (decl))
13135 error ("%qD must be either a non-static member "
13136 "function or a non-member function", decl);
13137 return false;
13140 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13142 if (!arg || arg == void_list_node)
13144 if (complain)
13145 error ("%qD must have an argument of class or "
13146 "enumerated type", decl);
13147 return false;
13150 tree type = non_reference (TREE_VALUE (arg));
13151 if (type == error_mark_node)
13152 return false;
13154 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13155 because these checks are performed even on template
13156 functions. */
13157 if (MAYBE_CLASS_TYPE_P (type)
13158 || TREE_CODE (type) == ENUMERAL_TYPE)
13159 break;
13163 if (operator_code == CALL_EXPR)
13164 /* There are no further restrictions on the arguments to an overloaded
13165 "operator ()". */
13166 return true;
13168 if (operator_code == COND_EXPR)
13170 /* 13.4.0.3 */
13171 error ("ISO C++ prohibits overloading operator ?:");
13172 return false;
13175 /* Count the number of arguments and check for ellipsis. */
13176 int arity = 0;
13177 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13179 if (!arg)
13181 /* Variadic. */
13182 error ("%qD must not have variable number of arguments", decl);
13183 return false;
13185 ++arity;
13188 /* Verify correct number of arguments. */
13189 switch (op_flags)
13191 case OVL_OP_FLAG_AMBIARY:
13192 if (arity == 1)
13194 /* We have a unary instance of an ambi-ary op. Remap to the
13195 unary one. */
13196 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13197 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13198 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13199 operator_code = ovl_op->tree_code;
13200 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13202 else if (arity != 2)
13204 /* This was an ambiguous operator but is invalid. */
13205 error (methodp
13206 ? G_("%qD must have either zero or one argument")
13207 : G_("%qD must have either one or two arguments"), decl);
13208 return false;
13210 else if ((operator_code == POSTINCREMENT_EXPR
13211 || operator_code == POSTDECREMENT_EXPR)
13212 && ! processing_template_decl
13213 /* x++ and x--'s second argument must be an int. */
13214 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13215 integer_type_node))
13217 error (methodp
13218 ? G_("postfix %qD must have %<int%> as its argument")
13219 : G_("postfix %qD must have %<int%> as its second argument"),
13220 decl);
13221 return false;
13223 break;
13225 case OVL_OP_FLAG_UNARY:
13226 if (arity != 1)
13228 error (methodp
13229 ? G_("%qD must have no arguments")
13230 : G_("%qD must have exactly one argument"), decl);
13231 return false;
13233 break;
13235 case OVL_OP_FLAG_BINARY:
13236 if (arity != 2)
13238 error (methodp
13239 ? G_("%qD must have exactly one argument")
13240 : G_("%qD must have exactly two arguments"), decl);
13241 return false;
13243 break;
13245 default:
13246 gcc_unreachable ();
13249 /* There can be no default arguments. */
13250 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13251 if (TREE_PURPOSE (arg))
13253 TREE_PURPOSE (arg) = NULL_TREE;
13254 if (operator_code == POSTINCREMENT_EXPR
13255 || operator_code == POSTDECREMENT_EXPR)
13256 pedwarn (input_location, OPT_Wpedantic,
13257 "%qD cannot have default arguments", decl);
13258 else
13260 error ("%qD cannot have default arguments", decl);
13261 return false;
13265 /* At this point the declaration is well-formed. It may not be
13266 sensible though. */
13268 /* Check member function warnings only on the in-class declaration.
13269 There's no point warning on an out-of-class definition. */
13270 if (class_type && class_type != current_class_type)
13271 return true;
13273 /* Warn about conversion operators that will never be used. */
13274 if (IDENTIFIER_CONV_OP_P (name)
13275 && ! DECL_TEMPLATE_INFO (decl)
13276 && warn_conversion)
13278 tree t = TREE_TYPE (name);
13279 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
13281 if (ref)
13282 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13284 if (VOID_TYPE_P (t))
13285 warning (OPT_Wconversion,
13287 ? G_("conversion to a reference to void "
13288 "will never use a type conversion operator")
13289 : G_("conversion to void "
13290 "will never use a type conversion operator"));
13291 else if (class_type)
13293 if (t == class_type)
13294 warning (OPT_Wconversion,
13296 ? G_("conversion to a reference to the same type "
13297 "will never use a type conversion operator")
13298 : G_("conversion to the same type "
13299 "will never use a type conversion operator"));
13300 /* Don't force t to be complete here. */
13301 else if (MAYBE_CLASS_TYPE_P (t)
13302 && COMPLETE_TYPE_P (t)
13303 && DERIVED_FROM_P (t, class_type))
13304 warning (OPT_Wconversion,
13306 ? G_("conversion to a reference to a base class "
13307 "will never use a type conversion operator")
13308 : G_("conversion to a base class "
13309 "will never use a type conversion operator"));
13313 if (!warn_ecpp)
13314 return true;
13316 /* Effective C++ rules below. */
13318 /* More Effective C++ rule 7. */
13319 if (operator_code == TRUTH_ANDIF_EXPR
13320 || operator_code == TRUTH_ORIF_EXPR
13321 || operator_code == COMPOUND_EXPR)
13322 warning (OPT_Weffc__,
13323 "user-defined %qD always evaluates both arguments", decl);
13325 /* More Effective C++ rule 6. */
13326 if (operator_code == POSTINCREMENT_EXPR
13327 || operator_code == POSTDECREMENT_EXPR
13328 || operator_code == PREINCREMENT_EXPR
13329 || operator_code == PREDECREMENT_EXPR)
13331 tree arg = TREE_VALUE (argtypes);
13332 tree ret = TREE_TYPE (TREE_TYPE (decl));
13333 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
13334 arg = TREE_TYPE (arg);
13335 arg = TYPE_MAIN_VARIANT (arg);
13337 if (operator_code == PREINCREMENT_EXPR
13338 || operator_code == PREDECREMENT_EXPR)
13340 if (TREE_CODE (ret) != REFERENCE_TYPE
13341 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13342 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
13343 build_reference_type (arg));
13345 else
13347 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13348 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
13352 /* Effective C++ rule 23. */
13353 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13354 && (operator_code == PLUS_EXPR
13355 || operator_code == MINUS_EXPR
13356 || operator_code == TRUNC_DIV_EXPR
13357 || operator_code == MULT_EXPR
13358 || operator_code == TRUNC_MOD_EXPR)
13359 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
13360 warning (OPT_Weffc__, "%qD should return by value", decl);
13362 return true;
13365 /* Return a string giving the keyword associate with CODE. */
13367 static const char *
13368 tag_name (enum tag_types code)
13370 switch (code)
13372 case record_type:
13373 return "struct";
13374 case class_type:
13375 return "class";
13376 case union_type:
13377 return "union";
13378 case enum_type:
13379 return "enum";
13380 case typename_type:
13381 return "typename";
13382 default:
13383 gcc_unreachable ();
13387 /* Name lookup in an elaborated-type-specifier (after the keyword
13388 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13389 elaborated-type-specifier is invalid, issue a diagnostic and return
13390 error_mark_node; otherwise, return the *_TYPE to which it referred.
13391 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13393 tree
13394 check_elaborated_type_specifier (enum tag_types tag_code,
13395 tree decl,
13396 bool allow_template_p)
13398 tree type;
13400 /* In the case of:
13402 struct S { struct S *p; };
13404 name lookup will find the TYPE_DECL for the implicit "S::S"
13405 typedef. Adjust for that here. */
13406 if (DECL_SELF_REFERENCE_P (decl))
13407 decl = TYPE_NAME (TREE_TYPE (decl));
13409 type = TREE_TYPE (decl);
13411 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13412 is false for this case as well. */
13413 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13415 error ("using template type parameter %qT after %qs",
13416 type, tag_name (tag_code));
13417 return error_mark_node;
13419 /* Accept template template parameters. */
13420 else if (allow_template_p
13421 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13422 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13424 /* [dcl.type.elab]
13426 If the identifier resolves to a typedef-name or the
13427 simple-template-id resolves to an alias template
13428 specialization, the elaborated-type-specifier is ill-formed.
13430 In other words, the only legitimate declaration to use in the
13431 elaborated type specifier is the implicit typedef created when
13432 the type is declared. */
13433 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13434 && !DECL_SELF_REFERENCE_P (decl)
13435 && tag_code != typename_type)
13437 if (alias_template_specialization_p (type))
13438 error ("using alias template specialization %qT after %qs",
13439 type, tag_name (tag_code));
13440 else
13441 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13442 inform (DECL_SOURCE_LOCATION (decl),
13443 "%qD has a previous declaration here", decl);
13444 return error_mark_node;
13446 else if (TREE_CODE (type) != RECORD_TYPE
13447 && TREE_CODE (type) != UNION_TYPE
13448 && tag_code != enum_type
13449 && tag_code != typename_type)
13451 error ("%qT referred to as %qs", type, tag_name (tag_code));
13452 inform (location_of (type), "%qT has a previous declaration here", type);
13453 return error_mark_node;
13455 else if (TREE_CODE (type) != ENUMERAL_TYPE
13456 && tag_code == enum_type)
13458 error ("%qT referred to as enum", type);
13459 inform (location_of (type), "%qT has a previous declaration here", type);
13460 return error_mark_node;
13462 else if (!allow_template_p
13463 && TREE_CODE (type) == RECORD_TYPE
13464 && CLASSTYPE_IS_TEMPLATE (type))
13466 /* If a class template appears as elaborated type specifier
13467 without a template header such as:
13469 template <class T> class C {};
13470 void f(class C); // No template header here
13472 then the required template argument is missing. */
13473 error ("template argument required for %<%s %T%>",
13474 tag_name (tag_code),
13475 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13476 return error_mark_node;
13479 return type;
13482 /* Lookup NAME in elaborate type specifier in scope according to
13483 SCOPE and issue diagnostics if necessary.
13484 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13485 found, and ERROR_MARK_NODE for type error. */
13487 static tree
13488 lookup_and_check_tag (enum tag_types tag_code, tree name,
13489 tag_scope scope, bool template_header_p)
13491 tree t;
13492 tree decl;
13493 if (scope == ts_global)
13495 /* First try ordinary name lookup, ignoring hidden class name
13496 injected via friend declaration. */
13497 decl = lookup_name_prefer_type (name, 2);
13498 decl = strip_using_decl (decl);
13499 /* If that fails, the name will be placed in the smallest
13500 non-class, non-function-prototype scope according to 3.3.1/5.
13501 We may already have a hidden name declared as friend in this
13502 scope. So lookup again but not ignoring hidden names.
13503 If we find one, that name will be made visible rather than
13504 creating a new tag. */
13505 if (!decl)
13506 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13508 else
13509 decl = lookup_type_scope (name, scope);
13511 if (decl
13512 && (DECL_CLASS_TEMPLATE_P (decl)
13513 /* If scope is ts_current we're defining a class, so ignore a
13514 template template parameter. */
13515 || (scope != ts_current
13516 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13517 decl = DECL_TEMPLATE_RESULT (decl);
13519 if (decl && TREE_CODE (decl) == TYPE_DECL)
13521 /* Look for invalid nested type:
13522 class C {
13523 class C {};
13524 }; */
13525 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13527 error ("%qD has the same name as the class in which it is "
13528 "declared",
13529 decl);
13530 return error_mark_node;
13533 /* Two cases we need to consider when deciding if a class
13534 template is allowed as an elaborated type specifier:
13535 1. It is a self reference to its own class.
13536 2. It comes with a template header.
13538 For example:
13540 template <class T> class C {
13541 class C *c1; // DECL_SELF_REFERENCE_P is true
13542 class D;
13544 template <class U> class C; // template_header_p is true
13545 template <class T> class C<T>::D {
13546 class C *c2; // DECL_SELF_REFERENCE_P is true
13547 }; */
13549 t = check_elaborated_type_specifier (tag_code,
13550 decl,
13551 template_header_p
13552 | DECL_SELF_REFERENCE_P (decl));
13553 if (template_header_p && t && CLASS_TYPE_P (t)
13554 && (!CLASSTYPE_TEMPLATE_INFO (t)
13555 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13557 error ("%qT is not a template", t);
13558 inform (location_of (t), "previous declaration here");
13559 if (TYPE_CLASS_SCOPE_P (t)
13560 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13561 inform (input_location,
13562 "perhaps you want to explicitly add %<%T::%>",
13563 TYPE_CONTEXT (t));
13564 t = error_mark_node;
13567 return t;
13569 else if (decl && TREE_CODE (decl) == TREE_LIST)
13571 error ("reference to %qD is ambiguous", name);
13572 print_candidates (decl);
13573 return error_mark_node;
13575 else
13576 return NULL_TREE;
13579 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13580 Define the tag as a forward-reference if it is not defined.
13582 If a declaration is given, process it here, and report an error if
13583 multiple declarations are not identical.
13585 SCOPE is TS_CURRENT when this is also a definition. Only look in
13586 the current frame for the name (since C++ allows new names in any
13587 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13588 declaration. Only look beginning from the current scope outward up
13589 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13591 TEMPLATE_HEADER_P is true when this declaration is preceded by
13592 a set of template parameters. */
13594 static tree
13595 xref_tag_1 (enum tag_types tag_code, tree name,
13596 tag_scope scope, bool template_header_p)
13598 enum tree_code code;
13599 tree context = NULL_TREE;
13601 gcc_assert (identifier_p (name));
13603 switch (tag_code)
13605 case record_type:
13606 case class_type:
13607 code = RECORD_TYPE;
13608 break;
13609 case union_type:
13610 code = UNION_TYPE;
13611 break;
13612 case enum_type:
13613 code = ENUMERAL_TYPE;
13614 break;
13615 default:
13616 gcc_unreachable ();
13619 /* In case of anonymous name, xref_tag is only called to
13620 make type node and push name. Name lookup is not required. */
13621 tree t = NULL_TREE;
13622 if (scope != ts_lambda && !anon_aggrname_p (name))
13623 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
13625 if (t == error_mark_node)
13626 return error_mark_node;
13628 if (scope != ts_current && t && current_class_type
13629 && template_class_depth (current_class_type)
13630 && template_header_p)
13632 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13633 return t;
13635 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13636 definition of this tag. Since, in addition, we are currently
13637 processing a (member) template declaration of a template
13638 class, we must be very careful; consider:
13640 template <class X> struct S1
13642 template <class U> struct S2
13644 template <class V> friend struct S1;
13647 Here, the S2::S1 declaration should not be confused with the
13648 outer declaration. In particular, the inner version should
13649 have a template parameter of level 2, not level 1.
13651 On the other hand, when presented with:
13653 template <class T> struct S1
13655 template <class U> struct S2 {};
13656 template <class U> friend struct S2;
13659 the friend must find S1::S2 eventually. We accomplish this
13660 by making sure that the new type we create to represent this
13661 declaration has the right TYPE_CONTEXT. */
13662 context = TYPE_CONTEXT (t);
13663 t = NULL_TREE;
13666 if (! t)
13668 /* If no such tag is yet defined, create a forward-reference node
13669 and record it as the "definition".
13670 When a real declaration of this type is found,
13671 the forward-reference will be altered into a real type. */
13672 if (code == ENUMERAL_TYPE)
13674 error ("use of enum %q#D without previous declaration", name);
13675 return error_mark_node;
13677 else
13679 t = make_class_type (code);
13680 TYPE_CONTEXT (t) = context;
13681 if (scope == ts_lambda)
13683 /* Mark it as a lambda type. */
13684 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13685 /* And push it into current scope. */
13686 scope = ts_current;
13688 t = pushtag (name, t, scope);
13691 else
13693 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13695 /* Check that we aren't trying to overload a class with different
13696 constraints. */
13697 tree constr = NULL_TREE;
13698 if (current_template_parms)
13700 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13701 constr = build_constraints (reqs, NULL_TREE);
13703 if (!redeclare_class_template (t, current_template_parms, constr))
13704 return error_mark_node;
13706 else if (!processing_template_decl
13707 && CLASS_TYPE_P (t)
13708 && CLASSTYPE_IS_TEMPLATE (t))
13710 error ("redeclaration of %qT as a non-template", t);
13711 inform (location_of (t), "previous declaration %qD", t);
13712 return error_mark_node;
13715 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
13717 /* This is no longer an invisible friend. Make it
13718 visible. */
13719 tree decl = TYPE_NAME (t);
13721 DECL_ANTICIPATED (decl) = false;
13722 DECL_FRIEND_P (decl) = false;
13724 if (TYPE_TEMPLATE_INFO (t))
13726 tree tmpl = TYPE_TI_TEMPLATE (t);
13727 DECL_ANTICIPATED (tmpl) = false;
13728 DECL_FRIEND_P (tmpl) = false;
13733 return t;
13736 /* Wrapper for xref_tag_1. */
13738 tree
13739 xref_tag (enum tag_types tag_code, tree name,
13740 tag_scope scope, bool template_header_p)
13742 tree ret;
13743 bool subtime;
13744 subtime = timevar_cond_start (TV_NAME_LOOKUP);
13745 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13746 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13747 return ret;
13751 tree
13752 xref_tag_from_type (tree old, tree id, tag_scope scope)
13754 enum tag_types tag_kind;
13756 if (TREE_CODE (old) == RECORD_TYPE)
13757 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13758 else
13759 tag_kind = union_type;
13761 if (id == NULL_TREE)
13762 id = TYPE_IDENTIFIER (old);
13764 return xref_tag (tag_kind, id, scope, false);
13767 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13768 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
13769 access_* node, and the TREE_VALUE is the type of the base-class.
13770 Non-NULL TREE_TYPE indicates virtual inheritance. */
13772 void
13773 xref_basetypes (tree ref, tree base_list)
13775 tree *basep;
13776 tree binfo, base_binfo;
13777 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
13778 unsigned max_bases = 0; /* Maximum direct bases. */
13779 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
13780 int i;
13781 tree default_access;
13782 tree igo_prev; /* Track Inheritance Graph Order. */
13784 if (ref == error_mark_node)
13785 return;
13787 /* The base of a derived class is private by default, all others are
13788 public. */
13789 default_access = (TREE_CODE (ref) == RECORD_TYPE
13790 && CLASSTYPE_DECLARED_CLASS (ref)
13791 ? access_private_node : access_public_node);
13793 /* First, make sure that any templates in base-classes are
13794 instantiated. This ensures that if we call ourselves recursively
13795 we do not get confused about which classes are marked and which
13796 are not. */
13797 basep = &base_list;
13798 while (*basep)
13800 tree basetype = TREE_VALUE (*basep);
13802 /* The dependent_type_p call below should really be dependent_scope_p
13803 so that we give a hard error about using an incomplete type as a
13804 base, but we allow it with a pedwarn for backward
13805 compatibility. */
13806 if (processing_template_decl
13807 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13808 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13809 if (!dependent_type_p (basetype)
13810 && !complete_type_or_else (basetype, NULL))
13811 /* An incomplete type. Remove it from the list. */
13812 *basep = TREE_CHAIN (*basep);
13813 else
13815 max_bases++;
13816 if (TREE_TYPE (*basep))
13817 max_dvbases++;
13818 if (CLASS_TYPE_P (basetype))
13819 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13820 basep = &TREE_CHAIN (*basep);
13823 max_vbases += max_dvbases;
13825 TYPE_MARKED_P (ref) = 1;
13827 /* The binfo slot should be empty, unless this is an (ill-formed)
13828 redefinition. */
13829 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13831 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13833 binfo = make_tree_binfo (max_bases);
13835 TYPE_BINFO (ref) = binfo;
13836 BINFO_OFFSET (binfo) = size_zero_node;
13837 BINFO_TYPE (binfo) = ref;
13839 /* Apply base-class info set up to the variants of this type. */
13840 fixup_type_variants (ref);
13842 if (max_bases)
13844 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
13845 /* A C++98 POD cannot have base classes. */
13846 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
13848 if (TREE_CODE (ref) == UNION_TYPE)
13850 error ("derived union %qT invalid", ref);
13851 return;
13855 if (max_bases > 1)
13856 warning (OPT_Wmultiple_inheritance,
13857 "%qT defined with multiple direct bases", ref);
13859 if (max_vbases)
13861 /* An aggregate can't have virtual base classes. */
13862 CLASSTYPE_NON_AGGREGATE (ref) = true;
13864 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
13866 if (max_dvbases)
13867 warning (OPT_Wvirtual_inheritance,
13868 "%qT defined with direct virtual base", ref);
13871 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
13873 tree access = TREE_PURPOSE (base_list);
13874 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
13875 tree basetype = TREE_VALUE (base_list);
13877 if (access == access_default_node)
13878 access = default_access;
13880 /* Before C++17, an aggregate cannot have base classes. In C++17, an
13881 aggregate can't have virtual, private, or protected base classes. */
13882 if (cxx_dialect < cxx17
13883 || access != access_public_node
13884 || via_virtual)
13885 CLASSTYPE_NON_AGGREGATE (ref) = true;
13887 if (PACK_EXPANSION_P (basetype))
13888 basetype = PACK_EXPANSION_PATTERN (basetype);
13889 if (TREE_CODE (basetype) == TYPE_DECL)
13890 basetype = TREE_TYPE (basetype);
13891 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
13893 error ("base type %qT fails to be a struct or class type",
13894 basetype);
13895 goto dropped_base;
13898 base_binfo = NULL_TREE;
13899 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
13901 base_binfo = TYPE_BINFO (basetype);
13902 /* The original basetype could have been a typedef'd type. */
13903 basetype = BINFO_TYPE (base_binfo);
13905 /* Inherit flags from the base. */
13906 TYPE_HAS_NEW_OPERATOR (ref)
13907 |= TYPE_HAS_NEW_OPERATOR (basetype);
13908 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13909 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
13910 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
13911 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
13912 CLASSTYPE_DIAMOND_SHAPED_P (ref)
13913 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
13914 CLASSTYPE_REPEATED_BASE_P (ref)
13915 |= CLASSTYPE_REPEATED_BASE_P (basetype);
13918 /* We must do this test after we've seen through a typedef
13919 type. */
13920 if (TYPE_MARKED_P (basetype))
13922 if (basetype == ref)
13923 error ("recursive type %qT undefined", basetype);
13924 else
13925 error ("duplicate base type %qT invalid", basetype);
13926 goto dropped_base;
13929 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
13930 /* Regenerate the pack expansion for the bases. */
13931 basetype = make_pack_expansion (basetype);
13933 TYPE_MARKED_P (basetype) = 1;
13935 base_binfo = copy_binfo (base_binfo, basetype, ref,
13936 &igo_prev, via_virtual);
13937 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
13938 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
13940 BINFO_BASE_APPEND (binfo, base_binfo);
13941 BINFO_BASE_ACCESS_APPEND (binfo, access);
13942 continue;
13944 dropped_base:
13945 /* Update max_vbases to reflect the reality that we are dropping
13946 this base: if it reaches zero we want to undo the vec_alloc
13947 above to avoid inconsistencies during error-recovery: eg, in
13948 build_special_member_call, CLASSTYPE_VBASECLASSES non null
13949 and vtt null (c++/27952). */
13950 if (via_virtual)
13951 max_vbases--;
13952 if (CLASS_TYPE_P (basetype))
13953 max_vbases
13954 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13957 if (CLASSTYPE_VBASECLASSES (ref)
13958 && max_vbases == 0)
13959 vec_free (CLASSTYPE_VBASECLASSES (ref));
13961 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
13962 /* If we didn't get max_vbases vbases, we must have shared at
13963 least one of them, and are therefore diamond shaped. */
13964 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
13966 /* Unmark all the types. */
13967 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
13968 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13969 TYPE_MARKED_P (ref) = 0;
13971 /* Now see if we have a repeated base type. */
13972 if (!CLASSTYPE_REPEATED_BASE_P (ref))
13974 for (base_binfo = binfo; base_binfo;
13975 base_binfo = TREE_CHAIN (base_binfo))
13977 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13979 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
13980 break;
13982 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
13984 for (base_binfo = binfo; base_binfo;
13985 base_binfo = TREE_CHAIN (base_binfo))
13986 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13987 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13988 else
13989 break;
13994 /* Copies the enum-related properties from type SRC to type DST.
13995 Used with the underlying type of an enum and the enum itself. */
13996 static void
13997 copy_type_enum (tree dst, tree src)
13999 tree t;
14000 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
14002 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
14003 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
14004 TYPE_SIZE (t) = TYPE_SIZE (src);
14005 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
14006 SET_TYPE_MODE (dst, TYPE_MODE (src));
14007 TYPE_PRECISION (t) = TYPE_PRECISION (src);
14008 unsigned valign = TYPE_ALIGN (src);
14009 if (TYPE_USER_ALIGN (t))
14010 valign = MAX (valign, TYPE_ALIGN (t));
14011 else
14012 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
14013 SET_TYPE_ALIGN (t, valign);
14014 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
14018 /* Begin compiling the definition of an enumeration type.
14019 NAME is its name,
14021 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
14023 UNDERLYING_TYPE is the type that will be used as the storage for
14024 the enumeration type. This should be NULL_TREE if no storage type
14025 was specified.
14027 ATTRIBUTES are any attributes specified after the enum-key.
14029 SCOPED_ENUM_P is true if this is a scoped enumeration type.
14031 if IS_NEW is not NULL, gets TRUE iff a new type is created.
14033 Returns the type object, as yet incomplete.
14034 Also records info about it so that build_enumerator
14035 may be used to declare the individual values as they are read. */
14037 tree
14038 start_enum (tree name, tree enumtype, tree underlying_type,
14039 tree attributes, bool scoped_enum_p, bool *is_new)
14041 tree prevtype = NULL_TREE;
14042 gcc_assert (identifier_p (name));
14044 if (is_new)
14045 *is_new = false;
14046 /* [C++0x dcl.enum]p5:
14048 If not explicitly specified, the underlying type of a scoped
14049 enumeration type is int. */
14050 if (!underlying_type && scoped_enum_p)
14051 underlying_type = integer_type_node;
14053 if (underlying_type)
14054 underlying_type = cv_unqualified (underlying_type);
14056 /* If this is the real definition for a previous forward reference,
14057 fill in the contents in the same object that used to be the
14058 forward reference. */
14059 if (!enumtype)
14060 enumtype = lookup_and_check_tag (enum_type, name,
14061 /*tag_scope=*/ts_current,
14062 /*template_header_p=*/false);
14064 /* In case of a template_decl, the only check that should be deferred
14065 to instantiation time is the comparison of underlying types. */
14066 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14068 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14070 error_at (input_location, "scoped/unscoped mismatch "
14071 "in enum %q#T", enumtype);
14072 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14073 "previous definition here");
14074 enumtype = error_mark_node;
14076 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14078 error_at (input_location, "underlying type mismatch "
14079 "in enum %q#T", enumtype);
14080 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14081 "previous definition here");
14082 enumtype = error_mark_node;
14084 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14085 && !dependent_type_p (underlying_type)
14086 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
14087 && !same_type_p (underlying_type,
14088 ENUM_UNDERLYING_TYPE (enumtype)))
14090 error_at (input_location, "different underlying type "
14091 "in enum %q#T", enumtype);
14092 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14093 "previous definition here");
14094 underlying_type = NULL_TREE;
14098 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14099 || processing_template_decl)
14101 /* In case of error, make a dummy enum to allow parsing to
14102 continue. */
14103 if (enumtype == error_mark_node)
14105 name = make_anon_name ();
14106 enumtype = NULL_TREE;
14109 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14110 of an opaque enum, or an opaque enum of an already defined
14111 enumeration (C++0x only).
14112 In any other case, it'll be NULL_TREE. */
14113 if (!enumtype)
14115 if (is_new)
14116 *is_new = true;
14118 prevtype = enumtype;
14120 /* Do not push the decl more than once, unless we need to
14121 compare underlying types at instantiation time */
14122 if (!enumtype
14123 || TREE_CODE (enumtype) != ENUMERAL_TYPE
14124 || (underlying_type
14125 && dependent_type_p (underlying_type))
14126 || (ENUM_UNDERLYING_TYPE (enumtype)
14127 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
14129 enumtype = cxx_make_type (ENUMERAL_TYPE);
14130 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14132 /* std::byte aliases anything. */
14133 if (enumtype != error_mark_node
14134 && TYPE_CONTEXT (enumtype) == std_node
14135 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14136 TYPE_ALIAS_SET (enumtype) = 0;
14138 else
14139 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14140 false);
14142 if (enumtype == error_mark_node)
14143 return error_mark_node;
14145 /* The enum is considered opaque until the opening '{' of the
14146 enumerator list. */
14147 SET_OPAQUE_ENUM_P (enumtype, true);
14148 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14151 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14153 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14155 if (underlying_type)
14157 if (ENUM_UNDERLYING_TYPE (enumtype))
14158 /* We already checked that it matches, don't change it to a different
14159 typedef variant. */;
14160 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14162 copy_type_enum (enumtype, underlying_type);
14163 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14165 else if (dependent_type_p (underlying_type))
14166 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14167 else
14168 error ("underlying type %qT of %qT must be an integral type",
14169 underlying_type, enumtype);
14172 /* If into a template class, the returned enum is always the first
14173 declaration (opaque or not) seen. This way all the references to
14174 this type will be to the same declaration. The following ones are used
14175 only to check for definition errors. */
14176 if (prevtype && processing_template_decl)
14177 return prevtype;
14178 else
14179 return enumtype;
14182 /* After processing and defining all the values of an enumeration type,
14183 install their decls in the enumeration type.
14184 ENUMTYPE is the type object. */
14186 void
14187 finish_enum_value_list (tree enumtype)
14189 tree values;
14190 tree underlying_type;
14191 tree decl;
14192 tree value;
14193 tree minnode, maxnode;
14194 tree t;
14196 bool fixed_underlying_type_p
14197 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14199 /* We built up the VALUES in reverse order. */
14200 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14202 /* For an enum defined in a template, just set the type of the values;
14203 all further processing is postponed until the template is
14204 instantiated. We need to set the type so that tsubst of a CONST_DECL
14205 works. */
14206 if (processing_template_decl)
14208 for (values = TYPE_VALUES (enumtype);
14209 values;
14210 values = TREE_CHAIN (values))
14211 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14212 return;
14215 /* Determine the minimum and maximum values of the enumerators. */
14216 if (TYPE_VALUES (enumtype))
14218 minnode = maxnode = NULL_TREE;
14220 for (values = TYPE_VALUES (enumtype);
14221 values;
14222 values = TREE_CHAIN (values))
14224 decl = TREE_VALUE (values);
14226 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14227 each enumerator has the type of its enumeration. Prior to the
14228 closing brace, the type of each enumerator is the type of its
14229 initializing value. */
14230 TREE_TYPE (decl) = enumtype;
14232 /* Update the minimum and maximum values, if appropriate. */
14233 value = DECL_INITIAL (decl);
14234 if (value == error_mark_node)
14235 value = integer_zero_node;
14236 /* Figure out what the minimum and maximum values of the
14237 enumerators are. */
14238 if (!minnode)
14239 minnode = maxnode = value;
14240 else if (tree_int_cst_lt (maxnode, value))
14241 maxnode = value;
14242 else if (tree_int_cst_lt (value, minnode))
14243 minnode = value;
14246 else
14247 /* [dcl.enum]
14249 If the enumerator-list is empty, the underlying type is as if
14250 the enumeration had a single enumerator with value 0. */
14251 minnode = maxnode = integer_zero_node;
14253 if (!fixed_underlying_type_p)
14255 /* Compute the number of bits require to represent all values of the
14256 enumeration. We must do this before the type of MINNODE and
14257 MAXNODE are transformed, since tree_int_cst_min_precision relies
14258 on the TREE_TYPE of the value it is passed. */
14259 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14260 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14261 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14262 int precision = MAX (lowprec, highprec);
14263 unsigned int itk;
14264 bool use_short_enum;
14266 /* Determine the underlying type of the enumeration.
14268 [dcl.enum]
14270 The underlying type of an enumeration is an integral type that
14271 can represent all the enumerator values defined in the
14272 enumeration. It is implementation-defined which integral type is
14273 used as the underlying type for an enumeration except that the
14274 underlying type shall not be larger than int unless the value of
14275 an enumerator cannot fit in an int or unsigned int.
14277 We use "int" or an "unsigned int" as the underlying type, even if
14278 a smaller integral type would work, unless the user has
14279 explicitly requested that we use the smallest possible type. The
14280 user can request that for all enumerations with a command line
14281 flag, or for just one enumeration with an attribute. */
14283 use_short_enum = flag_short_enums
14284 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14286 /* If the precision of the type was specified with an attribute and it
14287 was too small, give an error. Otherwise, use it. */
14288 if (TYPE_PRECISION (enumtype))
14290 if (precision > TYPE_PRECISION (enumtype))
14291 error ("specified mode too small for enumeral values");
14292 else
14294 use_short_enum = true;
14295 precision = TYPE_PRECISION (enumtype);
14299 for (itk = (use_short_enum ? itk_char : itk_int);
14300 itk != itk_none;
14301 itk++)
14303 underlying_type = integer_types[itk];
14304 if (underlying_type != NULL_TREE
14305 && TYPE_PRECISION (underlying_type) >= precision
14306 && TYPE_SIGN (underlying_type) == sgn)
14307 break;
14309 if (itk == itk_none)
14311 /* DR 377
14313 IF no integral type can represent all the enumerator values, the
14314 enumeration is ill-formed. */
14315 error ("no integral type can represent all of the enumerator values "
14316 "for %qT", enumtype);
14317 precision = TYPE_PRECISION (long_long_integer_type_node);
14318 underlying_type = integer_types[itk_unsigned_long_long];
14321 /* [dcl.enum]
14323 The value of sizeof() applied to an enumeration type, an object
14324 of an enumeration type, or an enumerator, is the value of sizeof()
14325 applied to the underlying type. */
14326 copy_type_enum (enumtype, underlying_type);
14328 /* Compute the minimum and maximum values for the type.
14330 [dcl.enum]
14332 For an enumeration where emin is the smallest enumerator and emax
14333 is the largest, the values of the enumeration are the values of the
14334 underlying type in the range bmin to bmax, where bmin and bmax are,
14335 respectively, the smallest and largest values of the smallest bit-
14336 field that can store emin and emax. */
14338 /* The middle-end currently assumes that types with TYPE_PRECISION
14339 narrower than their underlying type are suitably zero or sign
14340 extended to fill their mode. Similarly, it assumes that the front
14341 end assures that a value of a particular type must be within
14342 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14344 We used to set these fields based on bmin and bmax, but that led
14345 to invalid assumptions like optimizing away bounds checking. So
14346 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14347 TYPE_MAX_VALUE to the values for the mode above and only restrict
14348 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14349 ENUM_UNDERLYING_TYPE (enumtype)
14350 = build_distinct_type_copy (underlying_type);
14351 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14352 set_min_and_max_values_for_integral_type
14353 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14355 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14356 if (flag_strict_enums)
14357 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14359 else
14360 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14362 /* Convert each of the enumerators to the type of the underlying
14363 type of the enumeration. */
14364 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14366 location_t saved_location;
14368 decl = TREE_VALUE (values);
14369 saved_location = input_location;
14370 input_location = DECL_SOURCE_LOCATION (decl);
14371 if (fixed_underlying_type_p)
14372 /* If the enumeration type has a fixed underlying type, we
14373 already checked all of the enumerator values. */
14374 value = DECL_INITIAL (decl);
14375 else
14376 value = perform_implicit_conversion (underlying_type,
14377 DECL_INITIAL (decl),
14378 tf_warning_or_error);
14379 input_location = saved_location;
14381 /* Do not clobber shared ints. */
14382 if (value != error_mark_node)
14384 value = copy_node (value);
14386 TREE_TYPE (value) = enumtype;
14388 DECL_INITIAL (decl) = value;
14391 /* Fix up all variant types of this enum type. */
14392 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14393 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14395 if (at_class_scope_p ()
14396 && COMPLETE_TYPE_P (current_class_type)
14397 && UNSCOPED_ENUM_P (enumtype))
14399 insert_late_enum_def_bindings (current_class_type, enumtype);
14400 /* TYPE_FIELDS needs fixup. */
14401 fixup_type_variants (current_class_type);
14404 /* Finish debugging output for this type. */
14405 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14407 /* Each enumerator now has the type of its enumeration. Clear the cache
14408 so that this change in types doesn't confuse us later on. */
14409 clear_cv_and_fold_caches ();
14412 /* Finishes the enum type. This is called only the first time an
14413 enumeration is seen, be it opaque or odinary.
14414 ENUMTYPE is the type object. */
14416 void
14417 finish_enum (tree enumtype)
14419 if (processing_template_decl)
14421 if (at_function_scope_p ())
14422 add_stmt (build_min (TAG_DEFN, enumtype));
14423 return;
14426 /* If this is a forward declaration, there should not be any variants,
14427 though we can get a variant in the middle of an enum-specifier with
14428 wacky code like 'enum E { e = sizeof(const E*) };' */
14429 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14430 && (TYPE_VALUES (enumtype)
14431 || !TYPE_NEXT_VARIANT (enumtype)));
14434 /* Build and install a CONST_DECL for an enumeration constant of the
14435 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14436 Apply ATTRIBUTES if available. LOC is the location of NAME.
14437 Assignment of sequential values by default is handled here. */
14439 void
14440 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14441 location_t loc)
14443 tree decl;
14444 tree context;
14445 tree type;
14447 /* scalar_constant_value will pull out this expression, so make sure
14448 it's folded as appropriate. */
14449 if (processing_template_decl)
14450 value = fold_non_dependent_expr (value);
14452 /* If the VALUE was erroneous, pretend it wasn't there; that will
14453 result in the enum being assigned the next value in sequence. */
14454 if (value == error_mark_node)
14455 value = NULL_TREE;
14457 /* Remove no-op casts from the value. */
14458 if (value)
14459 STRIP_TYPE_NOPS (value);
14461 if (! processing_template_decl)
14463 /* Validate and default VALUE. */
14464 if (value != NULL_TREE)
14466 if (!ENUM_UNDERLYING_TYPE (enumtype))
14468 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14469 value, true);
14470 if (tmp_value)
14471 value = tmp_value;
14473 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14474 (TREE_TYPE (value)))
14475 value = perform_implicit_conversion_flags
14476 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14477 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14479 if (value == error_mark_node)
14480 value = NULL_TREE;
14482 if (value != NULL_TREE)
14484 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14485 (TREE_TYPE (value)))
14487 error ("enumerator value for %qD must have integral or "
14488 "unscoped enumeration type", name);
14489 value = NULL_TREE;
14491 else
14493 value = cxx_constant_value (value);
14495 if (TREE_CODE (value) != INTEGER_CST)
14497 error ("enumerator value for %qD is not an integer "
14498 "constant", name);
14499 value = NULL_TREE;
14505 /* Default based on previous value. */
14506 if (value == NULL_TREE)
14508 if (TYPE_VALUES (enumtype))
14510 tree prev_value;
14511 bool overflowed;
14513 /* C++03 7.2/4: If no initializer is specified for the first
14514 enumerator, the type is an unspecified integral
14515 type. Otherwise the type is the same as the type of the
14516 initializing value of the preceding enumerator unless the
14517 incremented value is not representable in that type, in
14518 which case the type is an unspecified integral type
14519 sufficient to contain the incremented value. */
14520 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14521 if (error_operand_p (prev_value))
14522 value = error_mark_node;
14523 else
14525 tree type = TREE_TYPE (prev_value);
14526 signop sgn = TYPE_SIGN (type);
14527 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14528 &overflowed);
14529 if (!overflowed)
14531 bool pos = !wi::neg_p (wi, sgn);
14532 if (!wi::fits_to_tree_p (wi, type))
14534 unsigned int itk;
14535 for (itk = itk_int; itk != itk_none; itk++)
14537 type = integer_types[itk];
14538 if (type != NULL_TREE
14539 && (pos || !TYPE_UNSIGNED (type))
14540 && wi::fits_to_tree_p (wi, type))
14541 break;
14543 if (type && cxx_dialect < cxx11
14544 && itk > itk_unsigned_long)
14545 pedwarn (input_location, OPT_Wlong_long,
14546 pos ? G_("\
14547 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14548 incremented enumerator value is too large for %<long%>"));
14550 if (type == NULL_TREE)
14551 overflowed = true;
14552 else
14553 value = wide_int_to_tree (type, wi);
14556 if (overflowed)
14558 error ("overflow in enumeration values at %qD", name);
14559 value = error_mark_node;
14563 else
14564 value = integer_zero_node;
14567 /* Remove no-op casts from the value. */
14568 STRIP_TYPE_NOPS (value);
14570 /* If the underlying type of the enum is fixed, check whether
14571 the enumerator values fits in the underlying type. If it
14572 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14573 if (ENUM_UNDERLYING_TYPE (enumtype)
14574 && value
14575 && TREE_CODE (value) == INTEGER_CST)
14577 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14578 error ("enumerator value %qE is outside the range of underlying "
14579 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14581 /* Convert the value to the appropriate type. */
14582 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14586 /* C++ associates enums with global, function, or class declarations. */
14587 context = current_scope ();
14589 /* Build the actual enumeration constant. Note that the enumeration
14590 constants have the underlying type of the enum (if it is fixed)
14591 or the type of their initializer (if the underlying type of the
14592 enum is not fixed):
14594 [ C++0x dcl.enum ]
14596 If the underlying type is fixed, the type of each enumerator
14597 prior to the closing brace is the underlying type; if the
14598 initializing value of an enumerator cannot be represented by
14599 the underlying type, the program is ill-formed. If the
14600 underlying type is not fixed, the type of each enumerator is
14601 the type of its initializing value.
14603 If the underlying type is not fixed, it will be computed by
14604 finish_enum and we will reset the type of this enumerator. Of
14605 course, if we're processing a template, there may be no value. */
14606 type = value ? TREE_TYPE (value) : NULL_TREE;
14608 decl = build_decl (loc, CONST_DECL, name, type);
14610 DECL_CONTEXT (decl) = enumtype;
14611 TREE_CONSTANT (decl) = 1;
14612 TREE_READONLY (decl) = 1;
14613 DECL_INITIAL (decl) = value;
14615 if (attributes)
14616 cplus_decl_attributes (&decl, attributes, 0);
14618 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14620 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14621 on the TYPE_FIELDS list for `S'. (That's so that you can say
14622 things like `S::i' later.) */
14624 /* The enumerator may be getting declared outside of its enclosing
14625 class, like so:
14627 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14629 For which case we need to make sure that the access of `S::i'
14630 matches the access of `S::E'. */
14631 tree saved_cas = current_access_specifier;
14632 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14633 current_access_specifier = access_private_node;
14634 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14635 current_access_specifier = access_protected_node;
14636 else
14637 current_access_specifier = access_public_node;
14639 finish_member_declaration (decl);
14641 current_access_specifier = saved_cas;
14643 else
14644 pushdecl (decl);
14646 /* Add this enumeration constant to the list for this type. */
14647 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14650 /* Look for an enumerator with the given NAME within the enumeration
14651 type ENUMTYPE. This routine is used primarily for qualified name
14652 lookup into an enumerator in C++0x, e.g.,
14654 enum class Color { Red, Green, Blue };
14656 Color color = Color::Red;
14658 Returns the value corresponding to the enumerator, or
14659 NULL_TREE if no such enumerator was found. */
14660 tree
14661 lookup_enumerator (tree enumtype, tree name)
14663 tree e;
14664 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14666 e = purpose_member (name, TYPE_VALUES (enumtype));
14667 return e? TREE_VALUE (e) : NULL_TREE;
14671 /* We're defining DECL. Make sure that its type is OK. */
14673 static void
14674 check_function_type (tree decl, tree current_function_parms)
14676 tree fntype = TREE_TYPE (decl);
14677 tree return_type = complete_type (TREE_TYPE (fntype));
14679 /* In a function definition, arg types must be complete. */
14680 require_complete_types_for_parms (current_function_parms);
14682 if (dependent_type_p (return_type)
14683 || type_uses_auto (return_type))
14684 return;
14685 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14687 tree args = TYPE_ARG_TYPES (fntype);
14689 error ("return type %q#T is incomplete", return_type);
14691 /* Make it return void instead. */
14692 if (TREE_CODE (fntype) == METHOD_TYPE)
14693 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14694 void_type_node,
14695 TREE_CHAIN (args));
14696 else
14697 fntype = build_function_type (void_type_node, args);
14698 fntype
14699 = build_exception_variant (fntype,
14700 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
14701 fntype = (cp_build_type_attribute_variant
14702 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14703 TREE_TYPE (decl) = fntype;
14705 else
14707 abstract_virtuals_error (decl, TREE_TYPE (fntype));
14708 maybe_warn_parm_abi (TREE_TYPE (fntype),
14709 DECL_SOURCE_LOCATION (decl));
14713 /* True iff FN is an implicitly-defined default constructor. */
14715 static bool
14716 implicit_default_ctor_p (tree fn)
14718 return (DECL_CONSTRUCTOR_P (fn)
14719 && !user_provided_p (fn)
14720 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14723 /* Clobber the contents of *this to let the back end know that the object
14724 storage is dead when we enter the constructor or leave the destructor. */
14726 static tree
14727 build_clobber_this ()
14729 /* Clobbering an empty base is pointless, and harmful if its one byte
14730 TYPE_SIZE overlays real data. */
14731 if (is_empty_class (current_class_type))
14732 return void_node;
14734 /* If we have virtual bases, clobber the whole object, but only if we're in
14735 charge. If we don't have virtual bases, clobber the as-base type so we
14736 don't mess with tail padding. */
14737 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14739 tree ctype = current_class_type;
14740 if (!vbases)
14741 ctype = CLASSTYPE_AS_BASE (ctype);
14743 tree clobber = build_constructor (ctype, NULL);
14744 TREE_THIS_VOLATILE (clobber) = true;
14746 tree thisref = current_class_ref;
14747 if (ctype != current_class_type)
14749 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14750 thisref = convert_from_reference (thisref);
14753 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14754 if (vbases)
14755 exprstmt = build_if_in_charge (exprstmt);
14757 return exprstmt;
14760 /* Create the FUNCTION_DECL for a function definition.
14761 DECLSPECS and DECLARATOR are the parts of the declaration;
14762 they describe the function's name and the type it returns,
14763 but twisted together in a fashion that parallels the syntax of C.
14765 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14766 DECLARATOR is really the DECL for the function we are about to
14767 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14768 indicating that the function is an inline defined in-class.
14770 This function creates a binding context for the function body
14771 as well as setting up the FUNCTION_DECL in current_function_decl.
14773 For C++, we must first check whether that datum makes any sense.
14774 For example, "class A local_a(1,2);" means that variable local_a
14775 is an aggregate of type A, which should have a constructor
14776 applied to it with the argument list [1, 2].
14778 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14779 or may be a BLOCK if the function has been defined previously
14780 in this translation unit. On exit, DECL_INITIAL (decl1) will be
14781 error_mark_node if the function has never been defined, or
14782 a BLOCK if the function has been defined somewhere. */
14784 bool
14785 start_preparsed_function (tree decl1, tree attrs, int flags)
14787 tree ctype = NULL_TREE;
14788 tree fntype;
14789 tree restype;
14790 int doing_friend = 0;
14791 cp_binding_level *bl;
14792 tree current_function_parms;
14793 struct c_fileinfo *finfo
14794 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14795 bool honor_interface;
14797 /* Sanity check. */
14798 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14799 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14801 fntype = TREE_TYPE (decl1);
14802 if (TREE_CODE (fntype) == METHOD_TYPE)
14803 ctype = TYPE_METHOD_BASETYPE (fntype);
14805 /* ISO C++ 11.4/5. A friend function defined in a class is in
14806 the (lexical) scope of the class in which it is defined. */
14807 if (!ctype && DECL_FRIEND_P (decl1))
14809 ctype = DECL_FRIEND_CONTEXT (decl1);
14811 /* CTYPE could be null here if we're dealing with a template;
14812 for example, `inline friend float foo()' inside a template
14813 will have no CTYPE set. */
14814 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14815 ctype = NULL_TREE;
14816 else
14817 doing_friend = 1;
14820 if (DECL_DECLARED_INLINE_P (decl1)
14821 && lookup_attribute ("noinline", attrs))
14822 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14823 "inline function %qD given attribute noinline", decl1);
14825 /* Handle gnu_inline attribute. */
14826 if (GNU_INLINE_P (decl1))
14828 DECL_EXTERNAL (decl1) = 1;
14829 DECL_NOT_REALLY_EXTERN (decl1) = 0;
14830 DECL_INTERFACE_KNOWN (decl1) = 1;
14831 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14834 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
14835 /* This is a constructor, we must ensure that any default args
14836 introduced by this definition are propagated to the clones
14837 now. The clones are used directly in overload resolution. */
14838 adjust_clone_args (decl1);
14840 /* Sometimes we don't notice that a function is a static member, and
14841 build a METHOD_TYPE for it. Fix that up now. */
14842 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
14843 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
14845 /* Set up current_class_type, and enter the scope of the class, if
14846 appropriate. */
14847 if (ctype)
14848 push_nested_class (ctype);
14849 else if (DECL_STATIC_FUNCTION_P (decl1))
14850 push_nested_class (DECL_CONTEXT (decl1));
14852 /* Now that we have entered the scope of the class, we must restore
14853 the bindings for any template parameters surrounding DECL1, if it
14854 is an inline member template. (Order is important; consider the
14855 case where a template parameter has the same name as a field of
14856 the class.) It is not until after this point that
14857 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14858 if (flags & SF_INCLASS_INLINE)
14859 maybe_begin_member_template_processing (decl1);
14861 /* Effective C++ rule 15. */
14862 if (warn_ecpp
14863 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
14864 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
14865 && VOID_TYPE_P (TREE_TYPE (fntype)))
14866 warning (OPT_Weffc__,
14867 "%<operator=%> should return a reference to %<*this%>");
14869 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14870 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14871 if (!DECL_INITIAL (decl1))
14872 DECL_INITIAL (decl1) = error_mark_node;
14874 /* This function exists in static storage.
14875 (This does not mean `static' in the C sense!) */
14876 TREE_STATIC (decl1) = 1;
14878 /* We must call push_template_decl after current_class_type is set
14879 up. (If we are processing inline definitions after exiting a
14880 class scope, current_class_type will be NULL_TREE until set above
14881 by push_nested_class.) */
14882 if (processing_template_decl)
14884 tree newdecl1 = push_template_decl (decl1);
14885 if (newdecl1 == error_mark_node)
14887 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
14888 pop_nested_class ();
14889 return false;
14891 decl1 = newdecl1;
14894 /* Make sure the parameter and return types are reasonable. When
14895 you declare a function, these types can be incomplete, but they
14896 must be complete when you define the function. */
14897 check_function_type (decl1, DECL_ARGUMENTS (decl1));
14899 /* Build the return declaration for the function. */
14900 restype = TREE_TYPE (fntype);
14902 if (DECL_RESULT (decl1) == NULL_TREE)
14904 tree resdecl;
14906 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
14907 DECL_ARTIFICIAL (resdecl) = 1;
14908 DECL_IGNORED_P (resdecl) = 1;
14909 DECL_RESULT (decl1) = resdecl;
14911 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
14914 /* Record the decl so that the function name is defined.
14915 If we already have a decl for this name, and it is a FUNCTION_DECL,
14916 use the old decl. */
14917 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
14919 /* A specialization is not used to guide overload resolution. */
14920 if (!DECL_FUNCTION_MEMBER_P (decl1)
14921 && !(DECL_USE_TEMPLATE (decl1) &&
14922 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
14924 tree olddecl = pushdecl (decl1);
14926 if (olddecl == error_mark_node)
14927 /* If something went wrong when registering the declaration,
14928 use DECL1; we have to have a FUNCTION_DECL to use when
14929 parsing the body of the function. */
14931 else
14933 /* Otherwise, OLDDECL is either a previous declaration
14934 of the same function or DECL1 itself. */
14936 if (warn_missing_declarations
14937 && olddecl == decl1
14938 && !DECL_MAIN_P (decl1)
14939 && TREE_PUBLIC (decl1)
14940 && !DECL_DECLARED_INLINE_P (decl1))
14942 tree context;
14944 /* Check whether DECL1 is in an anonymous
14945 namespace. */
14946 for (context = DECL_CONTEXT (decl1);
14947 context;
14948 context = DECL_CONTEXT (context))
14950 if (TREE_CODE (context) == NAMESPACE_DECL
14951 && DECL_NAME (context) == NULL_TREE)
14952 break;
14955 if (context == NULL)
14956 warning_at (DECL_SOURCE_LOCATION (decl1),
14957 OPT_Wmissing_declarations,
14958 "no previous declaration for %qD", decl1);
14961 decl1 = olddecl;
14964 else
14966 /* We need to set the DECL_CONTEXT. */
14967 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
14968 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
14970 fntype = TREE_TYPE (decl1);
14971 restype = TREE_TYPE (fntype);
14973 /* If #pragma weak applies, mark the decl appropriately now.
14974 The pragma only applies to global functions. Because
14975 determining whether or not the #pragma applies involves
14976 computing the mangled name for the declaration, we cannot
14977 apply the pragma until after we have merged this declaration
14978 with any previous declarations; if the original declaration
14979 has a linkage specification, that specification applies to
14980 the definition as well, and may affect the mangled name. */
14981 if (DECL_FILE_SCOPE_P (decl1))
14982 maybe_apply_pragma_weak (decl1);
14985 /* We are now in the scope of the function being defined. */
14986 current_function_decl = decl1;
14988 /* Save the parm names or decls from this function's declarator
14989 where store_parm_decls will find them. */
14990 current_function_parms = DECL_ARGUMENTS (decl1);
14992 /* Let the user know we're compiling this function. */
14993 announce_function (decl1);
14995 gcc_assert (DECL_INITIAL (decl1));
14997 /* This function may already have been parsed, in which case just
14998 return; our caller will skip over the body without parsing. */
14999 if (DECL_INITIAL (decl1) != error_mark_node)
15000 return true;
15002 /* Initialize RTL machinery. We cannot do this until
15003 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
15004 even when processing a template; this is how we get
15005 CFUN set up, and our per-function variables initialized.
15006 FIXME factor out the non-RTL stuff. */
15007 bl = current_binding_level;
15008 allocate_struct_function (decl1, processing_template_decl);
15010 /* Initialize the language data structures. Whenever we start
15011 a new function, we destroy temporaries in the usual way. */
15012 cfun->language = ggc_cleared_alloc<language_function> ();
15013 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15014 current_binding_level = bl;
15016 if (!processing_template_decl && type_uses_auto (restype))
15018 FNDECL_USED_AUTO (decl1) = true;
15019 current_function_auto_return_pattern = restype;
15022 /* Start the statement-tree, start the tree now. */
15023 DECL_SAVED_TREE (decl1) = push_stmt_list ();
15025 /* If we are (erroneously) defining a function that we have already
15026 defined before, wipe out what we knew before. */
15027 if (!DECL_PENDING_INLINE_P (decl1))
15028 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
15030 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
15032 /* We know that this was set up by `grokclassfn'. We do not
15033 wait until `store_parm_decls', since evil parse errors may
15034 never get us to that point. Here we keep the consistency
15035 between `current_class_type' and `current_class_ptr'. */
15036 tree t = DECL_ARGUMENTS (decl1);
15038 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
15039 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
15041 cp_function_chain->x_current_class_ref
15042 = cp_build_fold_indirect_ref (t);
15043 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
15044 cp_function_chain->x_current_class_ptr = t;
15046 /* Constructors and destructors need to know whether they're "in
15047 charge" of initializing virtual base classes. */
15048 t = DECL_CHAIN (t);
15049 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15051 current_in_charge_parm = t;
15052 t = DECL_CHAIN (t);
15054 if (DECL_HAS_VTT_PARM_P (decl1))
15056 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15057 current_vtt_parm = t;
15061 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15062 /* Implicitly-defined methods (like the
15063 destructor for a class in which no destructor
15064 is explicitly declared) must not be defined
15065 until their definition is needed. So, we
15066 ignore interface specifications for
15067 compiler-generated functions. */
15068 && !DECL_ARTIFICIAL (decl1));
15070 if (processing_template_decl)
15071 /* Don't mess with interface flags. */;
15072 else if (DECL_INTERFACE_KNOWN (decl1))
15074 tree ctx = decl_function_context (decl1);
15076 if (DECL_NOT_REALLY_EXTERN (decl1))
15077 DECL_EXTERNAL (decl1) = 0;
15079 if (ctx != NULL_TREE && vague_linkage_p (ctx))
15080 /* This is a function in a local class in an extern inline
15081 or template function. */
15082 comdat_linkage (decl1);
15084 /* If this function belongs to an interface, it is public.
15085 If it belongs to someone else's interface, it is also external.
15086 This only affects inlines and template instantiations. */
15087 else if (!finfo->interface_unknown && honor_interface)
15089 if (DECL_DECLARED_INLINE_P (decl1)
15090 || DECL_TEMPLATE_INSTANTIATION (decl1))
15092 DECL_EXTERNAL (decl1)
15093 = (finfo->interface_only
15094 || (DECL_DECLARED_INLINE_P (decl1)
15095 && ! flag_implement_inlines
15096 && !DECL_VINDEX (decl1)));
15098 /* For WIN32 we also want to put these in linkonce sections. */
15099 maybe_make_one_only (decl1);
15101 else
15102 DECL_EXTERNAL (decl1) = 0;
15103 DECL_INTERFACE_KNOWN (decl1) = 1;
15104 /* If this function is in an interface implemented in this file,
15105 make sure that the back end knows to emit this function
15106 here. */
15107 if (!DECL_EXTERNAL (decl1))
15108 mark_needed (decl1);
15110 else if (finfo->interface_unknown && finfo->interface_only
15111 && honor_interface)
15113 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15114 interface, we will have both finfo->interface_unknown and
15115 finfo->interface_only set. In that case, we don't want to
15116 use the normal heuristics because someone will supply a
15117 #pragma implementation elsewhere, and deducing it here would
15118 produce a conflict. */
15119 comdat_linkage (decl1);
15120 DECL_EXTERNAL (decl1) = 0;
15121 DECL_INTERFACE_KNOWN (decl1) = 1;
15122 DECL_DEFER_OUTPUT (decl1) = 1;
15124 else
15126 /* This is a definition, not a reference.
15127 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15128 if (!GNU_INLINE_P (decl1))
15129 DECL_EXTERNAL (decl1) = 0;
15131 if ((DECL_DECLARED_INLINE_P (decl1)
15132 || DECL_TEMPLATE_INSTANTIATION (decl1))
15133 && ! DECL_INTERFACE_KNOWN (decl1))
15134 DECL_DEFER_OUTPUT (decl1) = 1;
15135 else
15136 DECL_INTERFACE_KNOWN (decl1) = 1;
15139 /* Determine the ELF visibility attribute for the function. We must not
15140 do this before calling "pushdecl", as we must allow "duplicate_decls"
15141 to merge any attributes appropriately. We also need to wait until
15142 linkage is set. */
15143 if (!DECL_CLONED_FUNCTION_P (decl1))
15144 determine_visibility (decl1);
15146 if (!processing_template_decl)
15147 maybe_instantiate_noexcept (decl1);
15149 begin_scope (sk_function_parms, decl1);
15151 ++function_depth;
15153 if (DECL_DESTRUCTOR_P (decl1)
15154 || (DECL_CONSTRUCTOR_P (decl1)
15155 && targetm.cxx.cdtor_returns_this ()))
15157 cdtor_label = create_artificial_label (input_location);
15158 LABEL_DECL_CDTOR (cdtor_label) = true;
15161 start_fname_decls ();
15163 store_parm_decls (current_function_parms);
15165 if (!processing_template_decl
15166 && (flag_lifetime_dse > 1)
15167 && DECL_CONSTRUCTOR_P (decl1)
15168 && !DECL_CLONED_FUNCTION_P (decl1)
15169 /* Clobbering an empty base is harmful if it overlays real data. */
15170 && !is_empty_class (current_class_type)
15171 /* We can't clobber safely for an implicitly-defined default constructor
15172 because part of the initialization might happen before we enter the
15173 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15174 && !implicit_default_ctor_p (decl1))
15175 finish_expr_stmt (build_clobber_this ());
15177 if (!processing_template_decl
15178 && DECL_CONSTRUCTOR_P (decl1)
15179 && sanitize_flags_p (SANITIZE_VPTR)
15180 && !DECL_CLONED_FUNCTION_P (decl1)
15181 && !implicit_default_ctor_p (decl1))
15182 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15184 start_lambda_scope (decl1);
15186 return true;
15190 /* Like start_preparsed_function, except that instead of a
15191 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15193 Returns true on success. If the DECLARATOR is not suitable
15194 for a function, we return false, which tells the parser to
15195 skip the entire function. */
15197 bool
15198 start_function (cp_decl_specifier_seq *declspecs,
15199 const cp_declarator *declarator,
15200 tree attrs)
15202 tree decl1;
15204 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15205 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15206 if (decl1 == error_mark_node)
15207 return false;
15208 /* If the declarator is not suitable for a function definition,
15209 cause a syntax error. */
15210 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15212 error ("invalid function declaration");
15213 return false;
15216 if (DECL_MAIN_P (decl1))
15217 /* main must return int. grokfndecl should have corrected it
15218 (and issued a diagnostic) if the user got it wrong. */
15219 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15220 integer_type_node));
15222 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15225 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15226 FN. */
15228 static bool
15229 use_eh_spec_block (tree fn)
15231 return (flag_exceptions && flag_enforce_eh_specs
15232 && !processing_template_decl
15233 && !type_throw_all_p (TREE_TYPE (fn))
15234 /* We insert the EH_SPEC_BLOCK only in the original
15235 function; then, it is copied automatically to the
15236 clones. */
15237 && !DECL_CLONED_FUNCTION_P (fn)
15238 /* Implicitly-generated constructors and destructors have
15239 exception specifications. However, those specifications
15240 are the union of the possible exceptions specified by the
15241 constructors/destructors for bases and members, so no
15242 unallowed exception will ever reach this function. By
15243 not creating the EH_SPEC_BLOCK we save a little memory,
15244 and we avoid spurious warnings about unreachable
15245 code. */
15246 && !DECL_DEFAULTED_FN (fn));
15249 /* Store the parameter declarations into the current function declaration.
15250 This is called after parsing the parameter declarations, before
15251 digesting the body of the function.
15253 Also install to binding contour return value identifier, if any. */
15255 static void
15256 store_parm_decls (tree current_function_parms)
15258 tree fndecl = current_function_decl;
15259 tree parm;
15261 /* This is a chain of any other decls that came in among the parm
15262 declarations. If a parm is declared with enum {foo, bar} x;
15263 then CONST_DECLs for foo and bar are put here. */
15264 tree nonparms = NULL_TREE;
15266 if (current_function_parms)
15268 /* This case is when the function was defined with an ANSI prototype.
15269 The parms already have decls, so we need not do anything here
15270 except record them as in effect
15271 and complain if any redundant old-style parm decls were written. */
15273 tree specparms = current_function_parms;
15274 tree next;
15276 /* Must clear this because it might contain TYPE_DECLs declared
15277 at class level. */
15278 current_binding_level->names = NULL;
15280 /* If we're doing semantic analysis, then we'll call pushdecl
15281 for each of these. We must do them in reverse order so that
15282 they end in the correct forward order. */
15283 specparms = nreverse (specparms);
15285 for (parm = specparms; parm; parm = next)
15287 next = DECL_CHAIN (parm);
15288 if (TREE_CODE (parm) == PARM_DECL)
15289 pushdecl (parm);
15290 else
15292 /* If we find an enum constant or a type tag,
15293 put it aside for the moment. */
15294 TREE_CHAIN (parm) = NULL_TREE;
15295 nonparms = chainon (nonparms, parm);
15299 /* Get the decls in their original chain order and record in the
15300 function. This is all and only the PARM_DECLs that were
15301 pushed into scope by the loop above. */
15302 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15304 else
15305 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15307 /* Now store the final chain of decls for the arguments
15308 as the decl-chain of the current lexical scope.
15309 Put the enumerators in as well, at the front so that
15310 DECL_ARGUMENTS is not modified. */
15311 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15313 if (use_eh_spec_block (current_function_decl))
15314 current_eh_spec_block = begin_eh_spec_block ();
15318 /* We have finished doing semantic analysis on DECL, but have not yet
15319 generated RTL for its body. Save away our current state, so that
15320 when we want to generate RTL later we know what to do. */
15322 static void
15323 save_function_data (tree decl)
15325 struct language_function *f;
15327 /* Save the language-specific per-function data so that we can
15328 get it back when we really expand this function. */
15329 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15331 /* Make a copy. */
15332 f = ggc_alloc<language_function> ();
15333 memcpy (f, cp_function_chain, sizeof (struct language_function));
15334 DECL_SAVED_FUNCTION_DATA (decl) = f;
15336 /* Clear out the bits we don't need. */
15337 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15338 f->bindings = NULL;
15339 f->x_local_names = NULL;
15340 f->base.local_typedefs = NULL;
15344 /* Set the return value of the constructor (if present). */
15346 static void
15347 finish_constructor_body (void)
15349 tree val;
15350 tree exprstmt;
15352 if (targetm.cxx.cdtor_returns_this ())
15354 /* Any return from a constructor will end up here. */
15355 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15357 val = DECL_ARGUMENTS (current_function_decl);
15358 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15359 DECL_RESULT (current_function_decl), val);
15360 /* Return the address of the object. */
15361 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15362 add_stmt (exprstmt);
15366 /* Do all the processing for the beginning of a destructor; set up the
15367 vtable pointers and cleanups for bases and members. */
15369 static void
15370 begin_destructor_body (void)
15372 tree compound_stmt;
15374 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15375 issued an error message. We still want to try to process the
15376 body of the function, but initialize_vtbl_ptrs will crash if
15377 TYPE_BINFO is NULL. */
15378 if (COMPLETE_TYPE_P (current_class_type))
15380 compound_stmt = begin_compound_stmt (0);
15381 /* Make all virtual function table pointers in non-virtual base
15382 classes point to CURRENT_CLASS_TYPE's virtual function
15383 tables. */
15384 initialize_vtbl_ptrs (current_class_ptr);
15385 finish_compound_stmt (compound_stmt);
15387 if (flag_lifetime_dse
15388 /* Clobbering an empty base is harmful if it overlays real data. */
15389 && !is_empty_class (current_class_type))
15391 if (sanitize_flags_p (SANITIZE_VPTR)
15392 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15393 && TYPE_CONTAINS_VPTR_P (current_class_type))
15395 tree binfo = TYPE_BINFO (current_class_type);
15396 tree ref
15397 = cp_build_fold_indirect_ref (current_class_ptr);
15399 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15400 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15401 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15402 NOP_EXPR, vtbl,
15403 tf_warning_or_error);
15404 finish_decl_cleanup (NULL_TREE, stmt);
15406 else
15407 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15410 /* And insert cleanups for our bases and members so that they
15411 will be properly destroyed if we throw. */
15412 push_base_cleanups ();
15416 /* At the end of every destructor we generate code to delete the object if
15417 necessary. Do that now. */
15419 static void
15420 finish_destructor_body (void)
15422 tree exprstmt;
15424 /* Any return from a destructor will end up here; that way all base
15425 and member cleanups will be run when the function returns. */
15426 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15428 if (targetm.cxx.cdtor_returns_this ())
15430 tree val;
15432 val = DECL_ARGUMENTS (current_function_decl);
15433 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15434 DECL_RESULT (current_function_decl), val);
15435 /* Return the address of the object. */
15436 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15437 add_stmt (exprstmt);
15441 /* Do the necessary processing for the beginning of a function body, which
15442 in this case includes member-initializers, but not the catch clauses of
15443 a function-try-block. Currently, this means opening a binding level
15444 for the member-initializers (in a ctor), member cleanups (in a dtor),
15445 and capture proxies (in a lambda operator()). */
15447 tree
15448 begin_function_body (void)
15450 tree stmt;
15452 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15453 return NULL_TREE;
15455 if (processing_template_decl)
15456 /* Do nothing now. */;
15457 else
15458 /* Always keep the BLOCK node associated with the outermost pair of
15459 curly braces of a function. These are needed for correct
15460 operation of dwarfout.c. */
15461 keep_next_level (true);
15463 stmt = begin_compound_stmt (BCS_FN_BODY);
15465 if (processing_template_decl)
15466 /* Do nothing now. */;
15467 else if (DECL_DESTRUCTOR_P (current_function_decl))
15468 begin_destructor_body ();
15470 return stmt;
15473 /* Do the processing for the end of a function body. Currently, this means
15474 closing out the cleanups for fully-constructed bases and members, and in
15475 the case of the destructor, deleting the object if desired. Again, this
15476 is only meaningful for [cd]tors, since they are the only functions where
15477 there is a significant distinction between the main body and any
15478 function catch clauses. Handling, say, main() return semantics here
15479 would be wrong, as flowing off the end of a function catch clause for
15480 main() would also need to return 0. */
15482 void
15483 finish_function_body (tree compstmt)
15485 if (compstmt == NULL_TREE)
15486 return;
15488 /* Close the block. */
15489 finish_compound_stmt (compstmt);
15491 if (processing_template_decl)
15492 /* Do nothing now. */;
15493 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15494 finish_constructor_body ();
15495 else if (DECL_DESTRUCTOR_P (current_function_decl))
15496 finish_destructor_body ();
15499 /* Given a function, returns the BLOCK corresponding to the outermost level
15500 of curly braces, skipping the artificial block created for constructor
15501 initializers. */
15503 tree
15504 outer_curly_brace_block (tree fndecl)
15506 tree block = DECL_INITIAL (fndecl);
15507 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15508 return block;
15509 block = BLOCK_SUBBLOCKS (block);
15510 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15511 return block;
15512 block = BLOCK_SUBBLOCKS (block);
15513 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15514 return block;
15517 /* If FNDECL is a class's key method, add the class to the list of
15518 keyed classes that should be emitted. */
15520 static void
15521 record_key_method_defined (tree fndecl)
15523 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15524 && DECL_VIRTUAL_P (fndecl)
15525 && !processing_template_decl)
15527 tree fnclass = DECL_CONTEXT (fndecl);
15528 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15529 vec_safe_push (keyed_classes, fnclass);
15533 /* Subroutine of finish_function.
15534 Save the body of constexpr functions for possible
15535 future compile time evaluation. */
15537 static void
15538 maybe_save_function_definition (tree fun)
15540 if (!processing_template_decl
15541 && DECL_DECLARED_CONSTEXPR_P (fun)
15542 && !cp_function_chain->invalid_constexpr
15543 && !DECL_CLONED_FUNCTION_P (fun))
15544 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15547 /* Finish up a function declaration and compile that function
15548 all the way to assembler language output. The free the storage
15549 for the function definition. INLINE_P is TRUE if we just
15550 finished processing the body of an in-class inline function
15551 definition. (This processing will have taken place after the
15552 class definition is complete.) */
15554 tree
15555 finish_function (bool inline_p)
15557 tree fndecl = current_function_decl;
15558 tree fntype, ctype = NULL_TREE;
15560 /* When we get some parse errors, we can end up without a
15561 current_function_decl, so cope. */
15562 if (fndecl == NULL_TREE)
15563 return error_mark_node;
15565 finish_lambda_scope ();
15567 if (c_dialect_objc ())
15568 objc_finish_function ();
15570 record_key_method_defined (fndecl);
15572 fntype = TREE_TYPE (fndecl);
15574 /* TREE_READONLY (fndecl) = 1;
15575 This caused &foo to be of type ptr-to-const-function
15576 which then got a warning when stored in a ptr-to-function variable. */
15578 gcc_assert (building_stmt_list_p ());
15579 /* The current function is being defined, so its DECL_INITIAL should
15580 be set, and unless there's a multiple definition, it should be
15581 error_mark_node. */
15582 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15584 /* For a cloned function, we've already got all the code we need;
15585 there's no need to add any extra bits. */
15586 if (!DECL_CLONED_FUNCTION_P (fndecl))
15588 /* Make it so that `main' always returns 0 by default. */
15589 if (DECL_MAIN_P (current_function_decl))
15590 finish_return_stmt (integer_zero_node);
15592 if (use_eh_spec_block (current_function_decl))
15593 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15594 (TREE_TYPE (current_function_decl)),
15595 current_eh_spec_block);
15598 /* If we're saving up tree structure, tie off the function now. */
15599 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15601 finish_fname_decls ();
15603 /* If this function can't throw any exceptions, remember that. */
15604 if (!processing_template_decl
15605 && !cp_function_chain->can_throw
15606 && !flag_non_call_exceptions
15607 && !decl_replaceable_p (fndecl))
15608 TREE_NOTHROW (fndecl) = 1;
15610 /* This must come after expand_function_end because cleanups might
15611 have declarations (from inline functions) that need to go into
15612 this function's blocks. */
15614 /* If the current binding level isn't the outermost binding level
15615 for this function, either there is a bug, or we have experienced
15616 syntax errors and the statement tree is malformed. */
15617 if (current_binding_level->kind != sk_function_parms)
15619 /* Make sure we have already experienced errors. */
15620 gcc_assert (errorcount);
15622 /* Throw away the broken statement tree and extra binding
15623 levels. */
15624 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15626 while (current_binding_level->kind != sk_function_parms)
15628 if (current_binding_level->kind == sk_class)
15629 pop_nested_class ();
15630 else
15631 poplevel (0, 0, 0);
15634 poplevel (1, 0, 1);
15636 /* Statements should always be full-expressions at the outermost set
15637 of curly braces for a function. */
15638 gcc_assert (stmts_are_full_exprs_p ());
15640 /* If there are no return statements in a function with auto return type,
15641 the return type is void. But if the declared type is something like
15642 auto*, this is an error. */
15643 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15644 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15646 if (is_auto (current_function_auto_return_pattern))
15648 apply_deduced_return_type (fndecl, void_type_node);
15649 fntype = TREE_TYPE (fndecl);
15651 else if (!current_function_returns_value
15652 && !current_function_returns_null)
15654 error ("no return statements in function returning %qT",
15655 current_function_auto_return_pattern);
15656 inform (input_location, "only plain %<auto%> return type can be "
15657 "deduced to %<void%>");
15661 // If this is a concept, check that the definition is reasonable.
15662 if (DECL_DECLARED_CONCEPT_P (fndecl))
15663 check_function_concept (fndecl);
15665 /* Lambda closure members are implicitly constexpr if possible. */
15666 if (cxx_dialect >= cxx17
15667 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15668 DECL_DECLARED_CONSTEXPR_P (fndecl)
15669 = ((processing_template_decl
15670 || is_valid_constexpr_fn (fndecl, /*complain*/false))
15671 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15673 /* Save constexpr function body before it gets munged by
15674 the NRV transformation. */
15675 maybe_save_function_definition (fndecl);
15677 /* Invoke the pre-genericize plugin before we start munging things. */
15678 if (!processing_template_decl)
15679 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15681 /* Perform delayed folding before NRV transformation. */
15682 if (!processing_template_decl)
15683 cp_fold_function (fndecl);
15685 /* Set up the named return value optimization, if we can. Candidate
15686 variables are selected in check_return_expr. */
15687 if (current_function_return_value)
15689 tree r = current_function_return_value;
15690 tree outer;
15692 if (r != error_mark_node
15693 /* This is only worth doing for fns that return in memory--and
15694 simpler, since we don't have to worry about promoted modes. */
15695 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15696 /* Only allow this for variables declared in the outer scope of
15697 the function so we know that their lifetime always ends with a
15698 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15699 we were to do this optimization in tree-ssa. */
15700 && (outer = outer_curly_brace_block (fndecl))
15701 && chain_member (r, BLOCK_VARS (outer)))
15702 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15704 current_function_return_value = NULL_TREE;
15707 /* Remember that we were in class scope. */
15708 if (current_class_name)
15709 ctype = current_class_type;
15711 /* Must mark the RESULT_DECL as being in this function. */
15712 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15714 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15715 to the FUNCTION_DECL node itself. */
15716 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15718 /* Save away current state, if appropriate. */
15719 if (!processing_template_decl)
15720 save_function_data (fndecl);
15722 /* Complain if there's just no return statement. */
15723 if (warn_return_type
15724 && !VOID_TYPE_P (TREE_TYPE (fntype))
15725 && !dependent_type_p (TREE_TYPE (fntype))
15726 && !current_function_returns_value && !current_function_returns_null
15727 /* Don't complain if we abort or throw. */
15728 && !current_function_returns_abnormally
15729 /* Don't complain if there's an infinite loop. */
15730 && !current_function_infinite_loop
15731 /* Don't complain if we are declared noreturn. */
15732 && !TREE_THIS_VOLATILE (fndecl)
15733 && !DECL_NAME (DECL_RESULT (fndecl))
15734 && !TREE_NO_WARNING (fndecl)
15735 /* Structor return values (if any) are set by the compiler. */
15736 && !DECL_CONSTRUCTOR_P (fndecl)
15737 && !DECL_DESTRUCTOR_P (fndecl)
15738 && targetm.warn_func_return (fndecl))
15740 warning (OPT_Wreturn_type,
15741 "no return statement in function returning non-void");
15742 TREE_NO_WARNING (fndecl) = 1;
15745 /* Store the end of the function, so that we get good line number
15746 info for the epilogue. */
15747 cfun->function_end_locus = input_location;
15749 /* Complain about parameters that are only set, but never otherwise used. */
15750 if (warn_unused_but_set_parameter
15751 && !processing_template_decl
15752 && errorcount == unused_but_set_errorcount
15753 && !DECL_CLONED_FUNCTION_P (fndecl))
15755 tree decl;
15757 for (decl = DECL_ARGUMENTS (fndecl);
15758 decl;
15759 decl = DECL_CHAIN (decl))
15760 if (TREE_USED (decl)
15761 && TREE_CODE (decl) == PARM_DECL
15762 && !DECL_READ_P (decl)
15763 && DECL_NAME (decl)
15764 && !DECL_ARTIFICIAL (decl)
15765 && !TREE_NO_WARNING (decl)
15766 && !DECL_IN_SYSTEM_HEADER (decl)
15767 && TREE_TYPE (decl) != error_mark_node
15768 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
15769 && (!CLASS_TYPE_P (TREE_TYPE (decl))
15770 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15771 warning_at (DECL_SOURCE_LOCATION (decl),
15772 OPT_Wunused_but_set_parameter,
15773 "parameter %qD set but not used", decl);
15774 unused_but_set_errorcount = errorcount;
15777 /* Complain about locally defined typedefs that are not used in this
15778 function. */
15779 maybe_warn_unused_local_typedefs ();
15781 /* Possibly warn about unused parameters. */
15782 if (warn_unused_parameter
15783 && !processing_template_decl
15784 && !DECL_CLONED_FUNCTION_P (fndecl))
15785 do_warn_unused_parameter (fndecl);
15787 /* Genericize before inlining. */
15788 if (!processing_template_decl)
15790 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15791 cp_genericize (fndecl);
15792 /* Clear out the bits we don't need. */
15793 f->x_current_class_ptr = NULL;
15794 f->x_current_class_ref = NULL;
15795 f->x_eh_spec_block = NULL;
15796 f->x_in_charge_parm = NULL;
15797 f->x_vtt_parm = NULL;
15798 f->x_return_value = NULL;
15799 f->bindings = NULL;
15800 f->extern_decl_map = NULL;
15801 f->infinite_loops = NULL;
15803 /* Clear out the bits we don't need. */
15804 local_names = NULL;
15806 /* We're leaving the context of this function, so zap cfun. It's still in
15807 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
15808 set_cfun (NULL);
15809 current_function_decl = NULL;
15811 /* If this is an in-class inline definition, we may have to pop the
15812 bindings for the template parameters that we added in
15813 maybe_begin_member_template_processing when start_function was
15814 called. */
15815 if (inline_p)
15816 maybe_end_member_template_processing ();
15818 /* Leave the scope of the class. */
15819 if (ctype)
15820 pop_nested_class ();
15822 --function_depth;
15824 /* Clean up. */
15825 current_function_decl = NULL_TREE;
15827 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
15828 return fndecl;
15831 /* Create the FUNCTION_DECL for a function definition.
15832 DECLSPECS and DECLARATOR are the parts of the declaration;
15833 they describe the return type and the name of the function,
15834 but twisted together in a fashion that parallels the syntax of C.
15836 This function creates a binding context for the function body
15837 as well as setting up the FUNCTION_DECL in current_function_decl.
15839 Returns a FUNCTION_DECL on success.
15841 If the DECLARATOR is not suitable for a function (it defines a datum
15842 instead), we return 0, which tells yyparse to report a parse error.
15844 May return void_type_node indicating that this method is actually
15845 a friend. See grokfield for more details.
15847 Came here with a `.pushlevel' .
15849 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15850 CHANGES TO CODE IN `grokfield'. */
15852 tree
15853 grokmethod (cp_decl_specifier_seq *declspecs,
15854 const cp_declarator *declarator, tree attrlist)
15856 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
15857 &attrlist);
15859 if (fndecl == error_mark_node)
15860 return error_mark_node;
15862 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
15864 error ("invalid member function declaration");
15865 return error_mark_node;
15868 if (attrlist)
15869 cplus_decl_attributes (&fndecl, attrlist, 0);
15871 /* Pass friends other than inline friend functions back. */
15872 if (fndecl == void_type_node)
15873 return fndecl;
15875 if (DECL_IN_AGGR_P (fndecl))
15877 if (DECL_CLASS_SCOPE_P (fndecl))
15878 error ("%qD is already defined in class %qT", fndecl,
15879 DECL_CONTEXT (fndecl));
15880 return error_mark_node;
15883 check_template_shadow (fndecl);
15885 if (TREE_PUBLIC (fndecl))
15886 DECL_COMDAT (fndecl) = 1;
15887 DECL_DECLARED_INLINE_P (fndecl) = 1;
15888 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
15890 /* We process method specializations in finish_struct_1. */
15891 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
15893 fndecl = push_template_decl (fndecl);
15894 if (fndecl == error_mark_node)
15895 return fndecl;
15898 if (! DECL_FRIEND_P (fndecl))
15900 if (DECL_CHAIN (fndecl))
15902 fndecl = copy_node (fndecl);
15903 TREE_CHAIN (fndecl) = NULL_TREE;
15907 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
15909 DECL_IN_AGGR_P (fndecl) = 1;
15910 return fndecl;
15914 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
15915 we can lay it out later, when and if its type becomes complete.
15917 Also handle constexpr variables where the initializer involves
15918 an unlowered PTRMEM_CST because the class isn't complete yet. */
15920 void
15921 maybe_register_incomplete_var (tree var)
15923 gcc_assert (VAR_P (var));
15925 /* Keep track of variables with incomplete types. */
15926 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
15927 && DECL_EXTERNAL (var))
15929 tree inner_type = TREE_TYPE (var);
15931 while (TREE_CODE (inner_type) == ARRAY_TYPE)
15932 inner_type = TREE_TYPE (inner_type);
15933 inner_type = TYPE_MAIN_VARIANT (inner_type);
15935 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
15936 /* RTTI TD entries are created while defining the type_info. */
15937 || (TYPE_LANG_SPECIFIC (inner_type)
15938 && TYPE_BEING_DEFINED (inner_type)))
15940 incomplete_var iv = {var, inner_type};
15941 vec_safe_push (incomplete_vars, iv);
15943 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
15944 && decl_constant_var_p (var)
15945 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
15947 /* When the outermost open class is complete we can resolve any
15948 pointers-to-members. */
15949 tree context = outermost_open_class ();
15950 incomplete_var iv = {var, context};
15951 vec_safe_push (incomplete_vars, iv);
15956 /* Called when a class type (given by TYPE) is defined. If there are
15957 any existing VAR_DECLs whose type has been completed by this
15958 declaration, update them now. */
15960 void
15961 complete_vars (tree type)
15963 unsigned ix;
15964 incomplete_var *iv;
15966 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
15968 if (same_type_p (type, iv->incomplete_type))
15970 tree var = iv->decl;
15971 tree type = TREE_TYPE (var);
15973 if (type != error_mark_node
15974 && (TYPE_MAIN_VARIANT (strip_array_types (type))
15975 == iv->incomplete_type))
15977 /* Complete the type of the variable. The VAR_DECL itself
15978 will be laid out in expand_expr. */
15979 complete_type (type);
15980 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
15983 /* Remove this entry from the list. */
15984 incomplete_vars->unordered_remove (ix);
15986 else
15987 ix++;
15990 /* Check for pending declarations which may have abstract type. */
15991 complete_type_check_abstract (type);
15994 /* If DECL is of a type which needs a cleanup, build and return an
15995 expression to perform that cleanup here. Return NULL_TREE if no
15996 cleanup need be done. DECL can also be a _REF when called from
15997 split_nonconstant_init_1. */
15999 tree
16000 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
16002 tree type;
16003 tree attr;
16004 tree cleanup;
16006 /* Assume no cleanup is required. */
16007 cleanup = NULL_TREE;
16009 if (error_operand_p (decl))
16010 return cleanup;
16012 /* Handle "__attribute__((cleanup))". We run the cleanup function
16013 before the destructor since the destructor is what actually
16014 terminates the lifetime of the object. */
16015 if (DECL_P (decl))
16016 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
16017 else
16018 attr = NULL_TREE;
16019 if (attr)
16021 tree id;
16022 tree fn;
16023 tree arg;
16025 /* Get the name specified by the user for the cleanup function. */
16026 id = TREE_VALUE (TREE_VALUE (attr));
16027 /* Look up the name to find the cleanup function to call. It is
16028 important to use lookup_name here because that is what is
16029 used in c-common.c:handle_cleanup_attribute when performing
16030 initial checks on the attribute. Note that those checks
16031 include ensuring that the function found is not an overloaded
16032 function, or an object with an overloaded call operator,
16033 etc.; we can rely on the fact that the function found is an
16034 ordinary FUNCTION_DECL. */
16035 fn = lookup_name (id);
16036 arg = build_address (decl);
16037 if (!mark_used (decl, complain) && !(complain & tf_error))
16038 return error_mark_node;
16039 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
16040 if (cleanup == error_mark_node)
16041 return error_mark_node;
16043 /* Handle ordinary C++ destructors. */
16044 type = TREE_TYPE (decl);
16045 if (type_build_dtor_call (type))
16047 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16048 tree addr;
16049 tree call;
16051 if (TREE_CODE (type) == ARRAY_TYPE)
16052 addr = decl;
16053 else
16054 addr = build_address (decl);
16056 call = build_delete (TREE_TYPE (addr), addr,
16057 sfk_complete_destructor, flags, 0, complain);
16058 if (call == error_mark_node)
16059 cleanup = error_mark_node;
16060 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16061 /* Discard the call. */;
16062 else if (cleanup)
16063 cleanup = cp_build_compound_expr (cleanup, call, complain);
16064 else
16065 cleanup = call;
16068 /* build_delete sets the location of the destructor call to the
16069 current location, even though the destructor is going to be
16070 called later, at the end of the current scope. This can lead to
16071 a "jumpy" behavior for users of debuggers when they step around
16072 the end of the block. So let's unset the location of the
16073 destructor call instead. */
16074 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16076 if (cleanup
16077 && DECL_P (decl)
16078 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16079 /* Treat objects with destructors as used; the destructor may do
16080 something substantive. */
16081 && !mark_used (decl, complain) && !(complain & tf_error))
16082 return error_mark_node;
16084 return cleanup;
16088 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16089 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16090 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16092 tree
16093 static_fn_type (tree memfntype)
16095 tree fntype;
16096 tree args;
16098 if (TYPE_PTRMEMFUNC_P (memfntype))
16099 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16100 if (POINTER_TYPE_P (memfntype)
16101 || TREE_CODE (memfntype) == FUNCTION_DECL)
16102 memfntype = TREE_TYPE (memfntype);
16103 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16104 return memfntype;
16105 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16106 args = TYPE_ARG_TYPES (memfntype);
16107 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
16108 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16109 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
16110 fntype = (cp_build_type_attribute_variant
16111 (fntype, TYPE_ATTRIBUTES (memfntype)));
16112 fntype = (build_exception_variant
16113 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
16114 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
16115 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
16116 return fntype;
16119 /* DECL was originally constructed as a non-static member function,
16120 but turned out to be static. Update it accordingly. */
16122 void
16123 revert_static_member_fn (tree decl)
16125 tree stype = static_fn_type (decl);
16126 cp_cv_quals quals = type_memfn_quals (stype);
16127 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16129 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16130 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16132 TREE_TYPE (decl) = stype;
16134 if (DECL_ARGUMENTS (decl))
16135 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16136 DECL_STATIC_FUNCTION_P (decl) = 1;
16139 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16140 one of the language-independent trees. */
16142 enum cp_tree_node_structure_enum
16143 cp_tree_node_structure (union lang_tree_node * t)
16145 switch (TREE_CODE (&t->generic))
16147 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16148 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16149 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16150 case OVERLOAD: return TS_CP_OVERLOAD;
16151 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16152 case PTRMEM_CST: return TS_CP_PTRMEM;
16153 case BASELINK: return TS_CP_BASELINK;
16154 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16155 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16156 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16157 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16158 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16159 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16160 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16161 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16162 default: return TS_CP_GENERIC;
16166 /* Build the void_list_node (void_type_node having been created). */
16167 tree
16168 build_void_list_node (void)
16170 tree t = build_tree_list (NULL_TREE, void_type_node);
16171 return t;
16174 bool
16175 cp_missing_noreturn_ok_p (tree decl)
16177 /* A missing noreturn is ok for the `main' function. */
16178 return DECL_MAIN_P (decl);
16181 /* Return the decl used to identify the COMDAT group into which DECL should
16182 be placed. */
16184 tree
16185 cxx_comdat_group (tree decl)
16187 /* Virtual tables, construction virtual tables, and virtual table
16188 tables all go in a single COMDAT group, named after the primary
16189 virtual table. */
16190 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16191 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16192 /* For all other DECLs, the COMDAT group is the mangled name of the
16193 declaration itself. */
16194 else
16196 while (DECL_THUNK_P (decl))
16198 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16199 into the same section as the target function. In that case
16200 we must return target's name. */
16201 tree target = THUNK_TARGET (decl);
16202 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16203 && DECL_SECTION_NAME (target) != NULL
16204 && DECL_ONE_ONLY (target))
16205 decl = target;
16206 else
16207 break;
16211 return decl;
16214 /* Returns the return type for FN as written by the user, which may include
16215 a placeholder for a deduced return type. */
16217 tree
16218 fndecl_declared_return_type (tree fn)
16220 fn = STRIP_TEMPLATE (fn);
16221 if (FNDECL_USED_AUTO (fn))
16223 struct language_function *f = NULL;
16224 if (DECL_STRUCT_FUNCTION (fn))
16225 f = DECL_STRUCT_FUNCTION (fn)->language;
16226 if (f == NULL)
16227 f = DECL_SAVED_FUNCTION_DATA (fn);
16228 return f->x_auto_return_pattern;
16230 return TREE_TYPE (TREE_TYPE (fn));
16233 /* Returns true iff DECL is a variable or function declared with an auto type
16234 that has not yet been deduced to a real type. */
16236 bool
16237 undeduced_auto_decl (tree decl)
16239 if (cxx_dialect < cxx11)
16240 return false;
16241 return ((VAR_OR_FUNCTION_DECL_P (decl)
16242 || TREE_CODE (decl) == TEMPLATE_DECL)
16243 && type_uses_auto (TREE_TYPE (decl)));
16246 /* Complain if DECL has an undeduced return type. */
16248 bool
16249 require_deduced_type (tree decl, tsubst_flags_t complain)
16251 if (undeduced_auto_decl (decl))
16253 if (complain & tf_error)
16254 error ("use of %qD before deduction of %<auto%>", decl);
16255 return false;
16257 return true;
16260 #include "gt-cp-decl.h"