PR72792 PR72793 relax requirements on rebind members
[official-gcc.git] / gcc / cp / decl.c
blob792ebcc978c09810b42658c2ee4c73fc1e3d10ea
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2017 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 "cilk.h"
52 #include "builtins.h"
54 /* Possible cases of bad specifiers type used by bad_specifiers. */
55 enum bad_spec_place {
56 BSP_VAR, /* variable */
57 BSP_PARM, /* parameter */
58 BSP_TYPE, /* type */
59 BSP_FIELD /* field */
62 static const char *redeclaration_error_message (tree, tree);
64 static int decl_jump_unsafe (tree);
65 static void require_complete_types_for_parms (tree);
66 static int ambi_op_p (enum tree_code);
67 static int unary_op_p (enum tree_code);
68 static void push_local_name (tree);
69 static tree grok_reference_init (tree, tree, tree, int);
70 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
71 int, int, int, bool, int, tree);
72 static int check_static_variable_definition (tree, tree);
73 static void record_unknown_type (tree, const char *);
74 static tree builtin_function_1 (tree, tree, bool);
75 static int member_function_or_else (tree, tree, enum overload_flags);
76 static void check_for_uninitialized_const_var (tree);
77 static tree local_variable_p_walkfn (tree *, int *, void *);
78 static const char *tag_name (enum tag_types);
79 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
80 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
81 static void maybe_deduce_size_from_array_init (tree, tree);
82 static void layout_var_decl (tree);
83 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
84 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
85 static void save_function_data (tree);
86 static void copy_type_enum (tree , tree);
87 static void check_function_type (tree, tree);
88 static void finish_constructor_body (void);
89 static void begin_destructor_body (void);
90 static void finish_destructor_body (void);
91 static void record_key_method_defined (tree);
92 static tree create_array_type_for_decl (tree, tree, tree);
93 static tree get_atexit_node (void);
94 static tree get_dso_handle_node (void);
95 static tree start_cleanup_fn (void);
96 static void end_cleanup_fn (void);
97 static tree cp_make_fname_decl (location_t, tree, int);
98 static void initialize_predefined_identifiers (void);
99 static tree check_special_function_return_type
100 (special_function_kind, tree, tree, int, const location_t*);
101 static tree push_cp_library_fn (enum tree_code, tree, int);
102 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
103 static void store_parm_decls (tree);
104 static void initialize_local_var (tree, tree);
105 static void expand_static_init (tree, tree);
107 /* The following symbols are subsumed in the cp_global_trees array, and
108 listed here individually for documentation purposes.
110 C++ extensions
111 tree wchar_decl_node;
113 tree vtable_entry_type;
114 tree delta_type_node;
115 tree __t_desc_type_node;
117 tree class_type_node;
118 tree unknown_type_node;
120 Array type `vtable_entry_type[]'
122 tree vtbl_type_node;
123 tree vtbl_ptr_type_node;
125 Namespaces,
127 tree std_node;
128 tree abi_node;
130 A FUNCTION_DECL which can call `abort'. Not necessarily the
131 one that the user will declare, but sufficient to be called
132 by routines that want to abort the program.
134 tree abort_fndecl;
136 Used by RTTI
137 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
138 tree tinfo_var_id; */
140 tree cp_global_trees[CPTI_MAX];
142 /* Indicates that there is a type value in some namespace, although
143 that is not necessarily in scope at the moment. */
145 tree global_type_node;
147 /* The node that holds the "name" of the global scope. */
148 tree global_scope_name;
150 #define local_names cp_function_chain->x_local_names
152 /* A list of objects which have constructors or destructors
153 which reside in the global scope. The decl is stored in
154 the TREE_VALUE slot and the initializer is stored
155 in the TREE_PURPOSE slot. */
156 tree static_aggregates;
158 /* Like static_aggregates, but for thread_local variables. */
159 tree tls_aggregates;
161 /* -- end of C++ */
163 /* A node for the integer constant 2. */
165 tree integer_two_node;
167 /* Used only for jumps to as-yet undefined labels, since jumps to
168 defined labels can have their validity checked immediately. */
170 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
171 struct named_label_use_entry *next;
172 /* The binding level to which this entry is *currently* attached.
173 This is initially the binding level in which the goto appeared,
174 but is modified as scopes are closed. */
175 cp_binding_level *binding_level;
176 /* The head of the names list that was current when the goto appeared,
177 or the inner scope popped. These are the decls that will *not* be
178 skipped when jumping to the label. */
179 tree names_in_scope;
180 /* The location of the goto, for error reporting. */
181 location_t o_goto_locus;
182 /* True if an OpenMP structured block scope has been closed since
183 the goto appeared. This means that the branch from the label will
184 illegally exit an OpenMP scope. */
185 bool in_omp_scope;
188 /* A list of all LABEL_DECLs in the function that have names. Here so
189 we can clear out their names' definitions at the end of the
190 function, and so we can check the validity of jumps to these labels. */
192 struct GTY((for_user)) named_label_entry {
193 /* The decl itself. */
194 tree label_decl;
196 /* The binding level to which the label is *currently* attached.
197 This is initially set to the binding level in which the label
198 is defined, but is modified as scopes are closed. */
199 cp_binding_level *binding_level;
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;
204 /* A vector of all decls from all binding levels that would be
205 crossed by a backward branch to the label. */
206 vec<tree, va_gc> *bad_decls;
208 /* A list of uses of the label, before the label is defined. */
209 struct named_label_use_entry *uses;
211 /* The following bits are set after the label is defined, and are
212 updated as scopes are popped. They indicate that a backward jump
213 to the label will illegally enter a scope of the given flavor. */
214 bool in_try_scope;
215 bool in_catch_scope;
216 bool in_omp_scope;
217 bool in_transaction_scope;
218 bool in_constexpr_if;
221 #define named_labels cp_function_chain->x_named_labels
223 /* The number of function bodies which we are currently processing.
224 (Zero if we are at namespace scope, one inside the body of a
225 function, two inside the body of a function in a local class, etc.) */
226 int function_depth;
228 /* Whether the exception-specifier is part of a function type (i.e. C++17). */
229 bool flag_noexcept_type;
231 /* States indicating how grokdeclarator() should handle declspecs marked
232 with __attribute__((deprecated)). An object declared as
233 __attribute__((deprecated)) suppresses warnings of uses of other
234 deprecated items. */
235 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
238 /* A list of VAR_DECLs whose type was incomplete at the time the
239 variable was declared. */
241 struct GTY(()) incomplete_var {
242 tree decl;
243 tree incomplete_type;
247 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
249 /* Returns the kind of template specialization we are currently
250 processing, given that it's declaration contained N_CLASS_SCOPES
251 explicit scope qualifications. */
253 tmpl_spec_kind
254 current_tmpl_spec_kind (int n_class_scopes)
256 int n_template_parm_scopes = 0;
257 int seen_specialization_p = 0;
258 int innermost_specialization_p = 0;
259 cp_binding_level *b;
261 /* Scan through the template parameter scopes. */
262 for (b = current_binding_level;
263 b->kind == sk_template_parms;
264 b = b->level_chain)
266 /* If we see a specialization scope inside a parameter scope,
267 then something is wrong. That corresponds to a declaration
268 like:
270 template <class T> template <> ...
272 which is always invalid since [temp.expl.spec] forbids the
273 specialization of a class member template if the enclosing
274 class templates are not explicitly specialized as well. */
275 if (b->explicit_spec_p)
277 if (n_template_parm_scopes == 0)
278 innermost_specialization_p = 1;
279 else
280 seen_specialization_p = 1;
282 else if (seen_specialization_p == 1)
283 return tsk_invalid_member_spec;
285 ++n_template_parm_scopes;
288 /* Handle explicit instantiations. */
289 if (processing_explicit_instantiation)
291 if (n_template_parm_scopes != 0)
292 /* We've seen a template parameter list during an explicit
293 instantiation. For example:
295 template <class T> template void f(int);
297 This is erroneous. */
298 return tsk_invalid_expl_inst;
299 else
300 return tsk_expl_inst;
303 if (n_template_parm_scopes < n_class_scopes)
304 /* We've not seen enough template headers to match all the
305 specialized classes present. For example:
307 template <class T> void R<T>::S<T>::f(int);
309 This is invalid; there needs to be one set of template
310 parameters for each class. */
311 return tsk_insufficient_parms;
312 else if (n_template_parm_scopes == n_class_scopes)
313 /* We're processing a non-template declaration (even though it may
314 be a member of a template class.) For example:
316 template <class T> void S<T>::f(int);
318 The `class T' matches the `S<T>', leaving no template headers
319 corresponding to the `f'. */
320 return tsk_none;
321 else if (n_template_parm_scopes > n_class_scopes + 1)
322 /* We've got too many template headers. For example:
324 template <> template <class T> void f (T);
326 There need to be more enclosing classes. */
327 return tsk_excessive_parms;
328 else
329 /* This must be a template. It's of the form:
331 template <class T> template <class U> void S<T>::f(U);
333 This is a specialization if the innermost level was a
334 specialization; otherwise it's just a definition of the
335 template. */
336 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
339 /* Exit the current scope. */
341 void
342 finish_scope (void)
344 poplevel (0, 0, 0);
347 /* When a label goes out of scope, check to see if that label was used
348 in a valid manner, and issue any appropriate warnings or errors. */
350 static void
351 pop_label (tree label, tree old_value)
353 if (!processing_template_decl)
355 if (DECL_INITIAL (label) == NULL_TREE)
357 location_t location;
359 error ("label %q+D used but not defined", label);
360 location = input_location;
361 /* FIXME want (LOCATION_FILE (input_location), (line)0) */
362 /* Avoid crashing later. */
363 define_label (location, DECL_NAME (label));
365 else
366 warn_for_unused_label (label);
369 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
372 /* Push all named labels into a vector, so that we can sort it on DECL_UID
373 to avoid code generation differences. */
376 note_label (named_label_entry **slot, vec<named_label_entry **> &labels)
378 labels.quick_push (slot);
379 return 1;
382 /* Helper function to sort named label entries in a vector by DECL_UID. */
384 static int
385 sort_labels (const void *a, const void *b)
387 named_label_entry **slot1 = *(named_label_entry **const *) a;
388 named_label_entry **slot2 = *(named_label_entry **const *) b;
389 if (DECL_UID ((*slot1)->label_decl) < DECL_UID ((*slot2)->label_decl))
390 return -1;
391 if (DECL_UID ((*slot1)->label_decl) > DECL_UID ((*slot2)->label_decl))
392 return 1;
393 return 0;
396 /* At the end of a function, all labels declared within the function
397 go out of scope. BLOCK is the top-level block for the
398 function. */
400 static void
401 pop_labels (tree block)
403 if (named_labels)
405 auto_vec<named_label_entry **, 32> labels;
406 named_label_entry **slot;
407 unsigned int i;
409 /* Push all the labels into a vector and sort them by DECL_UID,
410 so that gaps between DECL_UIDs don't affect code generation. */
411 labels.reserve_exact (named_labels->elements ());
412 named_labels->traverse<vec<named_label_entry **> &, note_label> (labels);
413 labels.qsort (sort_labels);
414 FOR_EACH_VEC_ELT (labels, i, slot)
416 struct named_label_entry *ent = *slot;
418 pop_label (ent->label_decl, NULL_TREE);
420 /* Put the labels into the "variables" of the top-level block,
421 so debugger can see them. */
422 DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
423 BLOCK_VARS (block) = ent->label_decl;
425 named_labels->clear_slot (slot);
427 named_labels = NULL;
431 /* At the end of a block with local labels, restore the outer definition. */
433 static void
434 pop_local_label (tree label, tree old_value)
436 struct named_label_entry dummy;
438 pop_label (label, old_value);
440 dummy.label_decl = label;
441 named_label_entry **slot = named_labels->find_slot (&dummy, NO_INSERT);
442 named_labels->clear_slot (slot);
445 /* The following two routines are used to interface to Objective-C++.
446 The binding level is purposely treated as an opaque type. */
448 void *
449 objc_get_current_scope (void)
451 return current_binding_level;
454 /* The following routine is used by the NeXT-style SJLJ exceptions;
455 variables get marked 'volatile' so as to not be clobbered by
456 _setjmp()/_longjmp() calls. All variables in the current scope,
457 as well as parent scopes up to (but not including) ENCLOSING_BLK
458 shall be thusly marked. */
460 void
461 objc_mark_locals_volatile (void *enclosing_blk)
463 cp_binding_level *scope;
465 for (scope = current_binding_level;
466 scope && scope != enclosing_blk;
467 scope = scope->level_chain)
469 tree decl;
471 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
472 objc_volatilize_decl (decl);
474 /* Do not climb up past the current function. */
475 if (scope->kind == sk_function_parms)
476 break;
480 /* True if B is the level for the condition of a constexpr if. */
482 static bool
483 level_for_constexpr_if (cp_binding_level *b)
485 return (b->kind == sk_cond && b->this_entity
486 && TREE_CODE (b->this_entity) == IF_STMT
487 && IF_STMT_CONSTEXPR_P (b->this_entity));
490 /* Update data for defined and undefined labels when leaving a scope. */
493 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
495 named_label_entry *ent = *slot;
496 cp_binding_level *obl = bl->level_chain;
498 if (ent->binding_level == bl)
500 tree decl;
502 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
503 TREE_LISTs representing OVERLOADs, so be careful. */
504 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
505 ? DECL_CHAIN (decl)
506 : TREE_CHAIN (decl)))
507 if (decl_jump_unsafe (decl))
508 vec_safe_push (ent->bad_decls, decl);
510 ent->binding_level = obl;
511 ent->names_in_scope = obl->names;
512 switch (bl->kind)
514 case sk_try:
515 ent->in_try_scope = true;
516 break;
517 case sk_catch:
518 ent->in_catch_scope = true;
519 break;
520 case sk_omp:
521 ent->in_omp_scope = true;
522 break;
523 case sk_transaction:
524 ent->in_transaction_scope = true;
525 break;
526 case sk_block:
527 if (level_for_constexpr_if (bl->level_chain))
528 ent->in_constexpr_if = true;
529 break;
530 default:
531 break;
534 else if (ent->uses)
536 struct named_label_use_entry *use;
538 for (use = ent->uses; use ; use = use->next)
539 if (use->binding_level == bl)
541 use->binding_level = obl;
542 use->names_in_scope = obl->names;
543 if (bl->kind == sk_omp)
544 use->in_omp_scope = true;
548 return 1;
551 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
552 when errors were reported, except for -Werror-unused-but-set-*. */
553 static int unused_but_set_errorcount;
555 /* Exit a binding level.
556 Pop the level off, and restore the state of the identifier-decl mappings
557 that were in effect when this level was entered.
559 If KEEP == 1, this level had explicit declarations, so
560 and create a "block" (a BLOCK node) for the level
561 to record its declarations and subblocks for symbol table output.
563 If FUNCTIONBODY is nonzero, this level is the body of a function,
564 so create a block as if KEEP were set and also clear out all
565 label names.
567 If REVERSE is nonzero, reverse the order of decls before putting
568 them into the BLOCK. */
570 tree
571 poplevel (int keep, int reverse, int functionbody)
573 tree link;
574 /* The chain of decls was accumulated in reverse order.
575 Put it into forward order, just for cleanliness. */
576 tree decls;
577 tree subblocks;
578 tree block;
579 tree decl;
580 int leaving_for_scope;
581 scope_kind kind;
582 unsigned ix;
583 cp_label_binding *label_bind;
585 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
586 restart:
588 block = NULL_TREE;
590 gcc_assert (current_binding_level->kind != sk_class);
592 if (current_binding_level->kind == sk_cleanup)
593 functionbody = 0;
594 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
596 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
598 /* We used to use KEEP == 2 to indicate that the new block should go
599 at the beginning of the list of blocks at this binding level,
600 rather than the end. This hack is no longer used. */
601 gcc_assert (keep == 0 || keep == 1);
603 if (current_binding_level->keep)
604 keep = 1;
606 /* Any uses of undefined labels, and any defined labels, now operate
607 under constraints of next binding contour. */
608 if (cfun && !functionbody && named_labels)
609 named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
610 (current_binding_level);
612 /* Get the decls in the order they were written.
613 Usually current_binding_level->names is in reverse order.
614 But parameter decls were previously put in forward order. */
616 if (reverse)
617 current_binding_level->names
618 = decls = nreverse (current_binding_level->names);
619 else
620 decls = current_binding_level->names;
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 == 1;
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 = getdecls (); 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;
658 tree type = TREE_TYPE (decl);
659 if (VAR_P (decl)
660 && (! TREE_USED (decl) || !DECL_READ_P (decl))
661 && ! DECL_IN_SYSTEM_HEADER (decl)
662 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
663 && type != error_mark_node
664 && (!CLASS_TYPE_P (type)
665 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
666 || lookup_attribute ("warn_unused",
667 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
669 if (! TREE_USED (decl))
670 warning_at (DECL_SOURCE_LOCATION (decl),
671 OPT_Wunused_variable, "unused variable %qD", decl);
672 else if (DECL_CONTEXT (decl) == current_function_decl
673 // For -Wunused-but-set-variable leave references alone.
674 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
675 && errorcount == unused_but_set_errorcount)
677 warning_at (DECL_SOURCE_LOCATION (decl),
678 OPT_Wunused_but_set_variable,
679 "variable %qD set but not used", decl);
680 unused_but_set_errorcount = errorcount;
685 /* Remove declarations for all the DECLs in this level. */
686 for (link = decls; link; link = TREE_CHAIN (link))
688 if (leaving_for_scope && VAR_P (link)
689 /* It's hard to make this ARM compatibility hack play nicely with
690 lambdas, and it really isn't necessary in C++11 mode. */
691 && cxx_dialect < cxx11
692 && DECL_NAME (link))
694 tree name = DECL_NAME (link);
695 cxx_binding *ob;
696 tree ns_binding;
698 ob = outer_binding (name,
699 IDENTIFIER_BINDING (name),
700 /*class_p=*/true);
701 if (!ob)
702 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
703 else
704 ns_binding = NULL_TREE;
706 if (ob && ob->scope == current_binding_level->level_chain)
707 /* We have something like:
709 int i;
710 for (int i; ;);
712 and we are leaving the `for' scope. There's no reason to
713 keep the binding of the inner `i' in this case. */
714 pop_binding (name, link);
715 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
716 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
717 /* Here, we have something like:
719 typedef int I;
721 void f () {
722 for (int I; ;);
725 We must pop the for-scope binding so we know what's a
726 type and what isn't. */
727 pop_binding (name, link);
728 else
730 /* Mark this VAR_DECL as dead so that we can tell we left it
731 there only for backward compatibility. */
732 DECL_DEAD_FOR_LOCAL (link) = 1;
734 /* Keep track of what should have happened when we
735 popped the binding. */
736 if (ob && ob->value)
738 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
739 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
742 /* Add it to the list of dead variables in the next
743 outermost binding to that we can remove these when we
744 leave that binding. */
745 vec_safe_push (
746 current_binding_level->level_chain->dead_vars_from_for,
747 link);
749 /* Although we don't pop the cxx_binding, we do clear
750 its SCOPE since the scope is going away now. */
751 IDENTIFIER_BINDING (name)->scope
752 = current_binding_level->level_chain;
755 else
757 tree name;
759 /* Remove the binding. */
760 decl = link;
762 if (TREE_CODE (decl) == TREE_LIST)
763 decl = TREE_VALUE (decl);
764 name = decl;
766 if (TREE_CODE (name) == OVERLOAD)
767 name = OVL_FUNCTION (name);
769 gcc_assert (DECL_P (name));
770 pop_binding (DECL_NAME (name), decl);
774 /* Remove declarations for any `for' variables from inner scopes
775 that we kept around. */
776 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
777 ix, decl)
778 pop_binding (DECL_NAME (decl), decl);
780 /* Restore the IDENTIFIER_TYPE_VALUEs. */
781 for (link = current_binding_level->type_shadowed;
782 link; link = TREE_CHAIN (link))
783 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
785 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
786 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->shadowed_labels,
787 ix, label_bind)
788 pop_local_label (label_bind->label, label_bind->prev_value);
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. */
796 if (block)
798 tree* d;
800 for (d = &BLOCK_VARS (block); *d; )
802 if (TREE_CODE (*d) == TREE_LIST)
803 *d = TREE_CHAIN (*d);
804 else
805 d = &DECL_CHAIN (*d);
809 /* If the level being exited is the top level of a function,
810 check over all the labels. */
811 if (functionbody)
813 if (block)
815 /* Since this is the top level block of a function, the vars are
816 the function's parameters. Don't leave them in the BLOCK
817 because they are found in the FUNCTION_DECL instead. */
818 BLOCK_VARS (block) = 0;
819 pop_labels (block);
821 else
822 pop_labels (subblocks);
825 kind = current_binding_level->kind;
826 if (kind == sk_cleanup)
828 tree stmt;
830 /* If this is a temporary binding created for a cleanup, then we'll
831 have pushed a statement list level. Pop that, create a new
832 BIND_EXPR for the block, and insert it into the stream. */
833 stmt = pop_stmt_list (current_binding_level->statement_list);
834 stmt = c_build_bind_expr (input_location, block, stmt);
835 add_stmt (stmt);
838 leave_scope ();
839 if (functionbody)
841 /* The current function is being defined, so its DECL_INITIAL
842 should be error_mark_node. */
843 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
844 DECL_INITIAL (current_function_decl) = block ? block : subblocks;
845 if (subblocks)
847 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
849 if (BLOCK_SUBBLOCKS (subblocks))
850 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
852 else
853 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
856 else if (block)
857 current_binding_level->blocks
858 = block_chainon (current_binding_level->blocks, block);
860 /* If we did not make a block for the level just exited,
861 any blocks made for inner levels
862 (since they cannot be recorded as subblocks in that level)
863 must be carried forward so they will later become subblocks
864 of something else. */
865 else if (subblocks)
866 current_binding_level->blocks
867 = block_chainon (current_binding_level->blocks, subblocks);
869 /* Each and every BLOCK node created here in `poplevel' is important
870 (e.g. for proper debugging information) so if we created one
871 earlier, mark it as "used". */
872 if (block)
873 TREE_USED (block) = 1;
875 /* All temporary bindings created for cleanups are popped silently. */
876 if (kind == sk_cleanup)
877 goto restart;
879 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
880 return block;
883 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
884 itself, calling F for each. The DATA is passed to F as well. */
886 static int
887 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
889 int result = 0;
890 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
892 result |= (*f) (name_space, data);
894 for (; current; current = DECL_CHAIN (current))
895 result |= walk_namespaces_r (current, f, data);
897 return result;
900 /* Walk all the namespaces, calling F for each. The DATA is passed to
901 F as well. */
904 walk_namespaces (walk_namespaces_fn f, void* data)
906 return walk_namespaces_r (global_namespace, f, data);
909 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
912 wrapup_globals_for_namespace (tree name_space, void* data ATTRIBUTE_UNUSED)
914 cp_binding_level *level = NAMESPACE_LEVEL (name_space);
915 vec<tree, va_gc> *statics = level->static_decls;
916 tree *vec = statics->address ();
917 int len = statics->length ();
919 if (warn_unused_function)
921 tree decl;
922 unsigned int i;
923 FOR_EACH_VEC_SAFE_ELT (statics, i, decl)
924 if (TREE_CODE (decl) == FUNCTION_DECL
925 && DECL_INITIAL (decl) == 0
926 && DECL_EXTERNAL (decl)
927 && !TREE_PUBLIC (decl)
928 && !DECL_ARTIFICIAL (decl)
929 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
930 && !TREE_NO_WARNING (decl))
932 warning_at (DECL_SOURCE_LOCATION (decl),
933 OPT_Wunused_function,
934 "%qF declared %<static%> but never defined", decl);
935 TREE_NO_WARNING (decl) = 1;
939 /* Write out any globals that need to be output. */
940 return wrapup_global_declarations (vec, len);
943 /* Diagnose odr-used extern inline variables without definitions
944 in the current TU. */
946 diagnose_inline_vars_for_namespace (tree name_space, void *)
948 cp_binding_level *level = NAMESPACE_LEVEL (name_space);
949 vec<tree, va_gc> *statics = level->static_decls;
950 tree decl;
951 unsigned int i;
953 FOR_EACH_VEC_SAFE_ELT (statics, i, decl)
954 if (VAR_P (decl)
955 && DECL_EXTERNAL (decl)
956 && DECL_INLINE_VAR_P (decl)
957 && DECL_ODR_USED (decl))
958 error_at (DECL_SOURCE_LOCATION (decl),
959 "odr-used inline variable %qD is not defined", decl);
961 return 0;
964 /* In C++, you don't have to write `struct S' to refer to `S'; you
965 can just use `S'. We accomplish this by creating a TYPE_DECL as
966 if the user had written `typedef struct S S'. Create and return
967 the TYPE_DECL for TYPE. */
969 tree
970 create_implicit_typedef (tree name, tree type)
972 tree decl;
974 decl = build_decl (input_location, TYPE_DECL, name, type);
975 DECL_ARTIFICIAL (decl) = 1;
976 /* There are other implicit type declarations, like the one *within*
977 a class that allows you to write `S::S'. We must distinguish
978 amongst these. */
979 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
980 TYPE_NAME (type) = decl;
981 TYPE_STUB_DECL (type) = decl;
983 return decl;
986 /* Remember a local name for name-mangling purposes. */
988 static void
989 push_local_name (tree decl)
991 size_t i, nelts;
992 tree t, name;
994 timevar_start (TV_NAME_LOOKUP);
996 name = DECL_NAME (decl);
998 nelts = vec_safe_length (local_names);
999 for (i = 0; i < nelts; i++)
1001 t = (*local_names)[i];
1002 if (DECL_NAME (t) == name)
1004 if (!DECL_LANG_SPECIFIC (decl))
1005 retrofit_lang_decl (decl);
1006 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
1007 if (DECL_DISCRIMINATOR_SET_P (t))
1008 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
1009 else
1010 DECL_DISCRIMINATOR (decl) = 1;
1012 (*local_names)[i] = decl;
1013 timevar_stop (TV_NAME_LOOKUP);
1014 return;
1018 vec_safe_push (local_names, decl);
1019 timevar_stop (TV_NAME_LOOKUP);
1022 /* Subroutine of duplicate_decls: return truthvalue of whether
1023 or not types of these decls match.
1025 For C++, we must compare the parameter list so that `int' can match
1026 `int&' in a parameter position, but `int&' is not confused with
1027 `const int&'. */
1030 decls_match (tree newdecl, tree olddecl)
1032 int types_match;
1034 if (newdecl == olddecl)
1035 return 1;
1037 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
1038 /* If the two DECLs are not even the same kind of thing, we're not
1039 interested in their types. */
1040 return 0;
1042 gcc_assert (DECL_P (newdecl));
1044 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1046 tree f1 = TREE_TYPE (newdecl);
1047 tree f2 = TREE_TYPE (olddecl);
1048 tree p1 = TYPE_ARG_TYPES (f1);
1049 tree p2 = TYPE_ARG_TYPES (f2);
1050 tree r2;
1052 /* Specializations of different templates are different functions
1053 even if they have the same type. */
1054 tree t1 = (DECL_USE_TEMPLATE (newdecl)
1055 ? DECL_TI_TEMPLATE (newdecl)
1056 : NULL_TREE);
1057 tree t2 = (DECL_USE_TEMPLATE (olddecl)
1058 ? DECL_TI_TEMPLATE (olddecl)
1059 : NULL_TREE);
1060 if (t1 != t2)
1061 return 0;
1063 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1064 && ! (DECL_EXTERN_C_P (newdecl)
1065 && DECL_EXTERN_C_P (olddecl)))
1066 return 0;
1068 /* A new declaration doesn't match a built-in one unless it
1069 is also extern "C". */
1070 if (DECL_IS_BUILTIN (olddecl)
1071 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1072 return 0;
1074 if (TREE_CODE (f1) != TREE_CODE (f2))
1075 return 0;
1077 /* A declaration with deduced return type should use its pre-deduction
1078 type for declaration matching. */
1079 r2 = fndecl_declared_return_type (olddecl);
1081 if (same_type_p (TREE_TYPE (f1), r2))
1083 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1084 && (DECL_BUILT_IN (olddecl)
1085 #ifndef NO_IMPLICIT_EXTERN_C
1086 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1087 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1088 #endif
1091 types_match = self_promoting_args_p (p1);
1092 if (p1 == void_list_node)
1093 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1095 #ifndef NO_IMPLICIT_EXTERN_C
1096 else if (!prototype_p (f1)
1097 && (DECL_EXTERN_C_P (olddecl)
1098 && DECL_IN_SYSTEM_HEADER (olddecl)
1099 && !DECL_CLASS_SCOPE_P (olddecl))
1100 && (DECL_EXTERN_C_P (newdecl)
1101 && DECL_IN_SYSTEM_HEADER (newdecl)
1102 && !DECL_CLASS_SCOPE_P (newdecl)))
1104 types_match = self_promoting_args_p (p2);
1105 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1107 #endif
1108 else
1109 types_match =
1110 compparms (p1, p2)
1111 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1112 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1113 || comp_type_attributes (TREE_TYPE (newdecl),
1114 TREE_TYPE (olddecl)) != 0);
1116 else
1117 types_match = 0;
1119 /* The decls dont match if they correspond to two different versions
1120 of the same function. Disallow extern "C" functions to be
1121 versions for now. */
1122 if (types_match
1123 && !DECL_EXTERN_C_P (newdecl)
1124 && !DECL_EXTERN_C_P (olddecl)
1125 && targetm.target_option.function_versions (newdecl, olddecl))
1127 /* Mark functions as versions if necessary. Modify the mangled decl
1128 name if necessary. */
1129 if (DECL_FUNCTION_VERSIONED (newdecl)
1130 && DECL_FUNCTION_VERSIONED (olddecl))
1131 return 0;
1132 if (!DECL_FUNCTION_VERSIONED (newdecl))
1134 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1135 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1136 mangle_decl (newdecl);
1138 if (!DECL_FUNCTION_VERSIONED (olddecl))
1140 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1141 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1142 mangle_decl (olddecl);
1144 cgraph_node::record_function_versions (olddecl, newdecl);
1145 return 0;
1148 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1150 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1151 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1153 if (TREE_CODE (newres) != TREE_CODE (oldres))
1154 return 0;
1156 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1157 DECL_TEMPLATE_PARMS (olddecl)))
1158 return 0;
1160 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1161 types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres))
1162 && equivalently_constrained (olddecl, newdecl));
1163 else
1164 // We don't need to check equivalently_constrained for variable and
1165 // function templates because we check it on the results.
1166 types_match = decls_match (oldres, newres);
1168 else
1170 /* Need to check scope for variable declaration (VAR_DECL).
1171 For typedef (TYPE_DECL), scope is ignored. */
1172 if (VAR_P (newdecl)
1173 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1174 /* [dcl.link]
1175 Two declarations for an object with C language linkage
1176 with the same name (ignoring the namespace that qualify
1177 it) that appear in different namespace scopes refer to
1178 the same object. */
1179 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1180 return 0;
1182 if (TREE_TYPE (newdecl) == error_mark_node)
1183 types_match = TREE_TYPE (olddecl) == error_mark_node;
1184 else if (TREE_TYPE (olddecl) == NULL_TREE)
1185 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1186 else if (TREE_TYPE (newdecl) == NULL_TREE)
1187 types_match = 0;
1188 else
1189 types_match = comptypes (TREE_TYPE (newdecl),
1190 TREE_TYPE (olddecl),
1191 COMPARE_REDECLARATION);
1194 // Normal functions can be constrained, as can variable partial
1195 // specializations.
1196 if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl))
1197 types_match = equivalently_constrained (newdecl, olddecl);
1199 return types_match;
1202 /* If NEWDECL is `static' and an `extern' was seen previously,
1203 warn about it. OLDDECL is the previous declaration.
1205 Note that this does not apply to the C++ case of declaring
1206 a variable `extern const' and then later `const'.
1208 Don't complain about built-in functions, since they are beyond
1209 the user's control. */
1211 void
1212 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1214 if (TREE_CODE (newdecl) == TYPE_DECL
1215 || TREE_CODE (newdecl) == TEMPLATE_DECL
1216 || TREE_CODE (newdecl) == CONST_DECL
1217 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1218 return;
1220 /* Don't get confused by static member functions; that's a different
1221 use of `static'. */
1222 if (TREE_CODE (newdecl) == FUNCTION_DECL
1223 && DECL_STATIC_FUNCTION_P (newdecl))
1224 return;
1226 /* If the old declaration was `static', or the new one isn't, then
1227 everything is OK. */
1228 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1229 return;
1231 /* It's OK to declare a builtin function as `static'. */
1232 if (TREE_CODE (olddecl) == FUNCTION_DECL
1233 && DECL_ARTIFICIAL (olddecl))
1234 return;
1236 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1237 "%qD was declared %<extern%> and later %<static%>", newdecl))
1238 inform (DECL_SOURCE_LOCATION (olddecl),
1239 "previous declaration of %qD", olddecl);
1242 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1243 function templates. If their exception specifications do not
1244 match, issue a diagnostic. */
1246 static void
1247 check_redeclaration_exception_specification (tree new_decl,
1248 tree old_decl)
1250 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1251 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1253 /* Two default specs are equivalent, don't force evaluation. */
1254 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1255 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1256 return;
1258 maybe_instantiate_noexcept (new_decl);
1259 maybe_instantiate_noexcept (old_decl);
1260 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1261 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1263 /* [except.spec]
1265 If any declaration of a function has an exception-specification,
1266 all declarations, including the definition and an explicit
1267 specialization, of that function shall have an
1268 exception-specification with the same set of type-ids. */
1269 if (! DECL_IS_BUILTIN (old_decl)
1270 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1272 const char *msg
1273 = "declaration of %qF has a different exception specifier";
1274 bool complained = true;
1275 location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1276 if (DECL_IN_SYSTEM_HEADER (old_decl))
1277 complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl);
1278 else if (!flag_exceptions)
1279 /* We used to silently permit mismatched eh specs with
1280 -fno-exceptions, so make them a pedwarn now. */
1281 complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl);
1282 else
1283 error_at (new_loc, msg, new_decl);
1284 if (complained)
1285 inform (DECL_SOURCE_LOCATION (old_decl),
1286 "from previous declaration %qF", old_decl);
1290 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1291 Otherwise issue diagnostics. */
1293 static bool
1294 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1296 old_decl = STRIP_TEMPLATE (old_decl);
1297 new_decl = STRIP_TEMPLATE (new_decl);
1298 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1299 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1300 return true;
1301 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1302 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1303 return true;
1304 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1306 if (DECL_BUILT_IN (old_decl))
1308 /* Hide a built-in declaration. */
1309 DECL_DECLARED_CONSTEXPR_P (old_decl)
1310 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1311 return true;
1313 /* 7.1.5 [dcl.constexpr]
1314 Note: An explicit specialization can differ from the template
1315 declaration with respect to the constexpr specifier. */
1316 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1317 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1318 return true;
1320 error_at (DECL_SOURCE_LOCATION (new_decl),
1321 "redeclaration %qD differs in %<constexpr%> "
1322 "from previous declaration", new_decl);
1323 inform (DECL_SOURCE_LOCATION (old_decl),
1324 "previous declaration %qD", old_decl);
1325 return false;
1327 return true;
1330 // If OLDDECL and NEWDECL are concept declarations with the same type
1331 // (i.e., and template parameters), but different requirements,
1332 // emit diagnostics and return true. Otherwise, return false.
1333 static inline bool
1334 check_concept_refinement (tree olddecl, tree newdecl)
1336 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1337 return false;
1339 tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1340 tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1341 if (TREE_CODE (d1) != TREE_CODE (d2))
1342 return false;
1344 tree t1 = TREE_TYPE (d1);
1345 tree t2 = TREE_TYPE (d2);
1346 if (TREE_CODE (d1) == FUNCTION_DECL)
1348 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1349 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1350 DECL_TEMPLATE_PARMS (newdecl))
1351 && !equivalently_constrained (olddecl, newdecl))
1353 error ("cannot specialize concept %q#D", olddecl);
1354 return true;
1357 return false;
1360 /* DECL is a redeclaration of a function or function template. If
1361 it does have default arguments issue a diagnostic. Note: this
1362 function is used to enforce the requirements in C++11 8.3.6 about
1363 no default arguments in redeclarations. */
1365 static void
1366 check_redeclaration_no_default_args (tree decl)
1368 gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1370 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1371 t && t != void_list_node; t = TREE_CHAIN (t))
1372 if (TREE_PURPOSE (t))
1374 permerror (DECL_SOURCE_LOCATION (decl),
1375 "redeclaration of %q#D may not have default "
1376 "arguments", decl);
1377 return;
1381 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1382 && lookup_attribute ("gnu_inline", \
1383 DECL_ATTRIBUTES (fn)))
1385 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1386 If the redeclaration is invalid, a diagnostic is issued, and the
1387 error_mark_node is returned. Otherwise, OLDDECL is returned.
1389 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1390 returned.
1392 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1394 tree
1395 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1397 unsigned olddecl_uid = DECL_UID (olddecl);
1398 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1399 int new_defines_function = 0;
1400 tree new_template_info;
1402 if (newdecl == olddecl)
1403 return olddecl;
1405 types_match = decls_match (newdecl, olddecl);
1407 /* If either the type of the new decl or the type of the old decl is an
1408 error_mark_node, then that implies that we have already issued an
1409 error (earlier) for some bogus type specification, and in that case,
1410 it is rather pointless to harass the user with yet more error message
1411 about the same declaration, so just pretend the types match here. */
1412 if (TREE_TYPE (newdecl) == error_mark_node
1413 || TREE_TYPE (olddecl) == error_mark_node)
1414 return error_mark_node;
1416 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1417 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1419 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1420 && TREE_CODE (olddecl) != TEMPLATE_DECL
1421 && check_raw_literal_operator (olddecl))
1422 error ("literal operator template %q+D conflicts with"
1423 " raw literal operator %qD", newdecl, olddecl);
1424 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1425 && TREE_CODE (olddecl) == TEMPLATE_DECL
1426 && check_raw_literal_operator (newdecl))
1427 error ("raw literal operator %q+D conflicts with"
1428 " literal operator template %qD", newdecl, olddecl);
1431 if (DECL_P (olddecl)
1432 && TREE_CODE (newdecl) == FUNCTION_DECL
1433 && TREE_CODE (olddecl) == FUNCTION_DECL
1434 && diagnose_mismatched_attributes (olddecl, newdecl))
1436 if (DECL_INITIAL (olddecl))
1437 inform (DECL_SOURCE_LOCATION (olddecl),
1438 "previous definition of %qD was here", olddecl);
1439 else
1440 inform (DECL_SOURCE_LOCATION (olddecl),
1441 "previous declaration of %qD was here", olddecl);
1444 /* Check for redeclaration and other discrepancies. */
1445 if (TREE_CODE (olddecl) == FUNCTION_DECL
1446 && DECL_ARTIFICIAL (olddecl))
1448 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1449 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1451 /* Avoid warnings redeclaring built-ins which have not been
1452 explicitly declared. */
1453 if (DECL_ANTICIPATED (olddecl))
1454 return NULL_TREE;
1456 /* If you declare a built-in or predefined function name as static,
1457 the old definition is overridden, but optionally warn this was a
1458 bad choice of name. */
1459 if (! TREE_PUBLIC (newdecl))
1461 warning (OPT_Wshadow,
1462 DECL_BUILT_IN (olddecl)
1463 ? G_("shadowing built-in function %q#D")
1464 : G_("shadowing library function %q#D"), olddecl);
1465 /* Discard the old built-in function. */
1466 return NULL_TREE;
1468 /* If the built-in is not ansi, then programs can override
1469 it even globally without an error. */
1470 else if (! DECL_BUILT_IN (olddecl))
1471 warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1472 "library function %q#D redeclared as non-function %q#D",
1473 olddecl, newdecl);
1474 else
1475 error ("declaration of %q+#D conflicts with built-in "
1476 "declaration %q#D", newdecl, olddecl);
1477 return NULL_TREE;
1479 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1481 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1482 error_at (DECL_SOURCE_LOCATION (newdecl),
1483 "redeclaration of %<pragma omp declare reduction%>");
1484 inform (DECL_SOURCE_LOCATION (olddecl),
1485 "previous %<pragma omp declare reduction%> declaration");
1486 return error_mark_node;
1488 else if (!types_match)
1490 /* Avoid warnings redeclaring built-ins which have not been
1491 explicitly declared. */
1492 if (DECL_ANTICIPATED (olddecl))
1494 tree t1, t2;
1496 /* A new declaration doesn't match a built-in one unless it
1497 is also extern "C". */
1498 gcc_assert (DECL_IS_BUILTIN (olddecl));
1499 gcc_assert (DECL_EXTERN_C_P (olddecl));
1500 if (!DECL_EXTERN_C_P (newdecl))
1501 return NULL_TREE;
1503 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1504 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1505 t1 || t2;
1506 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1507 if (!t1 || !t2)
1508 break;
1509 /* Deal with fileptr_type_node. FILE type is not known
1510 at the time we create the builtins. */
1511 else if (TREE_VALUE (t2) == fileptr_type_node)
1513 tree t = TREE_VALUE (t1);
1515 if (TYPE_PTR_P (t)
1516 && TYPE_IDENTIFIER (TREE_TYPE (t))
1517 == get_identifier ("FILE")
1518 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1520 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1522 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1523 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1524 types_match = decls_match (newdecl, olddecl);
1525 if (types_match)
1526 return duplicate_decls (newdecl, olddecl,
1527 newdecl_is_friend);
1528 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1531 /* Likewise for const struct tm*. */
1532 else if (TREE_VALUE (t2) == const_tm_ptr_type_node)
1534 tree t = TREE_VALUE (t1);
1536 if (TYPE_PTR_P (t)
1537 && TYPE_IDENTIFIER (TREE_TYPE (t))
1538 == get_identifier ("tm")
1539 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1541 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1543 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1544 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1545 types_match = decls_match (newdecl, olddecl);
1546 if (types_match)
1547 return duplicate_decls (newdecl, olddecl,
1548 newdecl_is_friend);
1549 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1552 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1553 break;
1555 warning_at (DECL_SOURCE_LOCATION (newdecl),
1556 OPT_Wbuiltin_declaration_mismatch,
1557 "declaration of %q+#D conflicts with built-in "
1558 "declaration %q#D", newdecl, olddecl);
1560 else if ((DECL_EXTERN_C_P (newdecl)
1561 && DECL_EXTERN_C_P (olddecl))
1562 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1563 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1565 /* A near match; override the builtin. */
1567 if (TREE_PUBLIC (newdecl))
1568 warning_at (DECL_SOURCE_LOCATION (newdecl),
1569 OPT_Wbuiltin_declaration_mismatch,
1570 "new declaration %q#D ambiguates built-in "
1571 "declaration %q#D", newdecl, olddecl);
1572 else
1573 warning (OPT_Wshadow,
1574 DECL_BUILT_IN (olddecl)
1575 ? G_("shadowing built-in function %q#D")
1576 : G_("shadowing library function %q#D"), olddecl);
1578 else
1579 /* Discard the old built-in function. */
1580 return NULL_TREE;
1582 /* Replace the old RTL to avoid problems with inlining. */
1583 COPY_DECL_RTL (newdecl, olddecl);
1585 /* Even if the types match, prefer the new declarations type for
1586 built-ins which have not been explicitly declared, for
1587 exception lists, etc... */
1588 else if (DECL_IS_BUILTIN (olddecl))
1590 tree type = TREE_TYPE (newdecl);
1591 tree attribs = (*targetm.merge_type_attributes)
1592 (TREE_TYPE (olddecl), type);
1594 type = cp_build_type_attribute_variant (type, attribs);
1595 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1598 /* If a function is explicitly declared "throw ()", propagate that to
1599 the corresponding builtin. */
1600 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1601 && DECL_ANTICIPATED (olddecl)
1602 && TREE_NOTHROW (newdecl)
1603 && !TREE_NOTHROW (olddecl))
1605 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1606 tree tmpdecl = builtin_decl_explicit (fncode);
1607 if (tmpdecl && tmpdecl != olddecl && types_match)
1608 TREE_NOTHROW (tmpdecl) = 1;
1611 /* Whether or not the builtin can throw exceptions has no
1612 bearing on this declarator. */
1613 TREE_NOTHROW (olddecl) = 0;
1615 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1617 /* If a builtin function is redeclared as `static', merge
1618 the declarations, but make the original one static. */
1619 DECL_THIS_STATIC (olddecl) = 1;
1620 TREE_PUBLIC (olddecl) = 0;
1622 /* Make the old declaration consistent with the new one so
1623 that all remnants of the builtin-ness of this function
1624 will be banished. */
1625 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1626 COPY_DECL_RTL (newdecl, olddecl);
1629 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1631 /* C++ Standard, 3.3, clause 4:
1632 "[Note: a namespace name or a class template name must be unique
1633 in its declarative region (7.3.2, clause 14). ]" */
1634 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1635 && TREE_CODE (newdecl) != NAMESPACE_DECL
1636 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1637 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1638 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1639 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1641 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1642 && TREE_CODE (newdecl) != TYPE_DECL)
1643 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1644 && TREE_CODE (olddecl) != TYPE_DECL))
1646 /* We do nothing special here, because C++ does such nasty
1647 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1648 get shadowed, and know that if we need to find a TYPE_DECL
1649 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1650 slot of the identifier. */
1651 return NULL_TREE;
1654 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1655 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1656 || (TREE_CODE (olddecl) == FUNCTION_DECL
1657 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1658 return NULL_TREE;
1661 error ("%q#D redeclared as different kind of symbol", newdecl);
1662 if (TREE_CODE (olddecl) == TREE_LIST)
1663 olddecl = TREE_VALUE (olddecl);
1664 inform (DECL_SOURCE_LOCATION (olddecl),
1665 "previous declaration %q#D", olddecl);
1667 return error_mark_node;
1669 else if (!types_match)
1671 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1672 /* These are certainly not duplicate declarations; they're
1673 from different scopes. */
1674 return NULL_TREE;
1676 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1678 /* The name of a class template may not be declared to refer to
1679 any other template, class, function, object, namespace, value,
1680 or type in the same scope. */
1681 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1682 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1684 error ("conflicting declaration of template %q+#D", newdecl);
1685 inform (DECL_SOURCE_LOCATION (olddecl),
1686 "previous declaration %q#D", olddecl);
1687 return error_mark_node;
1689 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1690 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1691 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1692 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1693 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1694 DECL_TEMPLATE_PARMS (olddecl))
1695 /* Template functions can be disambiguated by
1696 return type. */
1697 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1698 TREE_TYPE (TREE_TYPE (olddecl)))
1699 // Template functions can also be disambiguated by
1700 // constraints.
1701 && equivalently_constrained (olddecl, newdecl))
1703 error ("ambiguating new declaration %q+#D", newdecl);
1704 inform (DECL_SOURCE_LOCATION (olddecl),
1705 "old declaration %q#D", olddecl);
1707 else if (check_concept_refinement (olddecl, newdecl))
1708 return error_mark_node;
1709 return NULL_TREE;
1711 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1713 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1715 error ("conflicting declaration of C function %q+#D",
1716 newdecl);
1717 inform (DECL_SOURCE_LOCATION (olddecl),
1718 "previous declaration %q#D", olddecl);
1719 return NULL_TREE;
1721 /* For function versions, params and types match, but they
1722 are not ambiguous. */
1723 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1724 && !DECL_FUNCTION_VERSIONED (olddecl))
1725 // The functions have the same parameter types.
1726 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1727 TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1728 // And the same constraints.
1729 && equivalently_constrained (newdecl, olddecl))
1731 error ("ambiguating new declaration of %q+#D", newdecl);
1732 inform (DECL_SOURCE_LOCATION (olddecl),
1733 "old declaration %q#D", olddecl);
1734 return error_mark_node;
1736 else
1737 return NULL_TREE;
1739 else
1741 error ("conflicting declaration %q+#D", newdecl);
1742 inform (DECL_SOURCE_LOCATION (olddecl),
1743 "previous declaration as %q#D", olddecl);
1744 return error_mark_node;
1747 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1748 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1749 && (!DECL_TEMPLATE_INFO (newdecl)
1750 || (DECL_TI_TEMPLATE (newdecl)
1751 != DECL_TI_TEMPLATE (olddecl))))
1752 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1753 && (!DECL_TEMPLATE_INFO (olddecl)
1754 || (DECL_TI_TEMPLATE (olddecl)
1755 != DECL_TI_TEMPLATE (newdecl))))))
1756 /* It's OK to have a template specialization and a non-template
1757 with the same type, or to have specializations of two
1758 different templates with the same type. Note that if one is a
1759 specialization, and the other is an instantiation of the same
1760 template, that we do not exit at this point. That situation
1761 can occur if we instantiate a template class, and then
1762 specialize one of its methods. This situation is valid, but
1763 the declarations must be merged in the usual way. */
1764 return NULL_TREE;
1765 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1766 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1767 && !DECL_USE_TEMPLATE (newdecl))
1768 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1769 && !DECL_USE_TEMPLATE (olddecl))))
1770 /* One of the declarations is a template instantiation, and the
1771 other is not a template at all. That's OK. */
1772 return NULL_TREE;
1773 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1775 /* In [namespace.alias] we have:
1777 In a declarative region, a namespace-alias-definition can be
1778 used to redefine a namespace-alias declared in that declarative
1779 region to refer only to the namespace to which it already
1780 refers.
1782 Therefore, if we encounter a second alias directive for the same
1783 alias, we can just ignore the second directive. */
1784 if (DECL_NAMESPACE_ALIAS (newdecl)
1785 && (DECL_NAMESPACE_ALIAS (newdecl)
1786 == DECL_NAMESPACE_ALIAS (olddecl)))
1787 return olddecl;
1788 /* [namespace.alias]
1790 A namespace-name or namespace-alias shall not be declared as
1791 the name of any other entity in the same declarative region.
1792 A namespace-name defined at global scope shall not be
1793 declared as the name of any other entity in any global scope
1794 of the program. */
1795 error ("conflicting declaration of namespace %q+D", newdecl);
1796 inform (DECL_SOURCE_LOCATION (olddecl),
1797 "previous declaration of namespace %qD here", olddecl);
1798 return error_mark_node;
1800 else
1802 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1803 if (errmsg)
1805 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1806 if (DECL_NAME (olddecl) != NULL_TREE)
1807 inform (DECL_SOURCE_LOCATION (olddecl),
1808 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1809 ? G_("%q#D previously defined here")
1810 : G_("%q#D previously declared here"), olddecl);
1811 return error_mark_node;
1813 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1814 && DECL_INITIAL (olddecl) != NULL_TREE
1815 && !prototype_p (TREE_TYPE (olddecl))
1816 && prototype_p (TREE_TYPE (newdecl)))
1818 /* Prototype decl follows defn w/o prototype. */
1819 if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1820 "prototype specified for %q#D", newdecl))
1821 inform (DECL_SOURCE_LOCATION (olddecl),
1822 "previous non-prototype definition here");
1824 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1825 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1827 /* [dcl.link]
1828 If two declarations of the same function or object
1829 specify different linkage-specifications ..., the program
1830 is ill-formed.... Except for functions with C++ linkage,
1831 a function declaration without a linkage specification
1832 shall not precede the first linkage specification for
1833 that function. A function can be declared without a
1834 linkage specification after an explicit linkage
1835 specification has been seen; the linkage explicitly
1836 specified in the earlier declaration is not affected by
1837 such a function declaration.
1839 DR 563 raises the question why the restrictions on
1840 functions should not also apply to objects. Older
1841 versions of G++ silently ignore the linkage-specification
1842 for this example:
1844 namespace N {
1845 extern int i;
1846 extern "C" int i;
1849 which is clearly wrong. Therefore, we now treat objects
1850 like functions. */
1851 if (current_lang_depth () == 0)
1853 /* There is no explicit linkage-specification, so we use
1854 the linkage from the previous declaration. */
1855 if (!DECL_LANG_SPECIFIC (newdecl))
1856 retrofit_lang_decl (newdecl);
1857 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1859 else
1861 error ("conflicting declaration of %q+#D with %qL linkage",
1862 newdecl, DECL_LANGUAGE (newdecl));
1863 inform (DECL_SOURCE_LOCATION (olddecl),
1864 "previous declaration with %qL linkage",
1865 DECL_LANGUAGE (olddecl));
1869 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1871 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1873 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */
1874 if (DECL_FUNCTION_MEMBER_P (olddecl)
1875 && (/* grokfndecl passes member function templates too
1876 as FUNCTION_DECLs. */
1877 DECL_TEMPLATE_INFO (olddecl)
1878 /* C++11 8.3.6/6.
1879 Default arguments for a member function of a class
1880 template shall be specified on the initial declaration
1881 of the member function within the class template. */
1882 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1883 check_redeclaration_no_default_args (newdecl);
1884 else
1886 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1887 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1888 int i = 1;
1890 for (; t1 && t1 != void_list_node;
1891 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1892 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1894 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1895 TREE_PURPOSE (t2)))
1897 if (permerror (input_location,
1898 "default argument given for parameter "
1899 "%d of %q#D", i, newdecl))
1900 inform (DECL_SOURCE_LOCATION (olddecl),
1901 "previous specification in %q#D here",
1902 olddecl);
1904 else
1906 error ("default argument given for parameter %d "
1907 "of %q#D", i, newdecl);
1908 inform (DECL_SOURCE_LOCATION (olddecl),
1909 "previous specification in %q#D here",
1910 olddecl);
1917 /* Do not merge an implicit typedef with an explicit one. In:
1919 class A;
1921 typedef class A A __attribute__ ((foo));
1923 the attribute should apply only to the typedef. */
1924 if (TREE_CODE (olddecl) == TYPE_DECL
1925 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1926 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1927 return NULL_TREE;
1929 /* If new decl is `static' and an `extern' was seen previously,
1930 warn about it. */
1931 warn_extern_redeclared_static (newdecl, olddecl);
1933 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1934 return error_mark_node;
1936 /* We have committed to returning 1 at this point. */
1937 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1939 /* Now that functions must hold information normally held
1940 by field decls, there is extra work to do so that
1941 declaration information does not get destroyed during
1942 definition. */
1943 if (DECL_VINDEX (olddecl))
1944 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1945 if (DECL_CONTEXT (olddecl))
1946 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1947 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1948 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1949 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1950 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1951 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1952 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1953 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1954 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1955 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1956 SET_OVERLOADED_OPERATOR_CODE
1957 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1958 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1960 /* Optionally warn about more than one declaration for the same
1961 name, but don't warn about a function declaration followed by a
1962 definition. */
1963 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1964 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1965 /* Don't warn about extern decl followed by definition. */
1966 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1967 /* Don't warn about friends, let add_friend take care of it. */
1968 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1969 /* Don't warn about declaration followed by specialization. */
1970 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1971 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1973 if (warning_at (DECL_SOURCE_LOCATION (newdecl),
1974 OPT_Wredundant_decls,
1975 "redundant redeclaration of %qD in same scope",
1976 newdecl))
1977 inform (DECL_SOURCE_LOCATION (olddecl),
1978 "previous declaration of %qD", olddecl);
1981 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1982 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1984 if (DECL_DELETED_FN (newdecl))
1986 error ("deleted definition of %q+D", newdecl);
1987 inform (DECL_SOURCE_LOCATION (olddecl),
1988 "previous declaration of %qD", olddecl);
1990 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1994 /* Deal with C++: must preserve virtual function table size. */
1995 if (TREE_CODE (olddecl) == TYPE_DECL)
1997 tree newtype = TREE_TYPE (newdecl);
1998 tree oldtype = TREE_TYPE (olddecl);
2000 if (newtype != error_mark_node && oldtype != error_mark_node
2001 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
2002 CLASSTYPE_FRIEND_CLASSES (newtype)
2003 = CLASSTYPE_FRIEND_CLASSES (oldtype);
2005 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
2008 /* Copy all the DECL_... slots specified in the new decl
2009 except for any that we copy here from the old type. */
2010 DECL_ATTRIBUTES (newdecl)
2011 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
2013 if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
2015 olddecl_friend = DECL_FRIEND_P (olddecl);
2016 hidden_friend = (DECL_ANTICIPATED (olddecl)
2017 && DECL_HIDDEN_FRIEND_P (olddecl)
2018 && newdecl_is_friend);
2019 if (!hidden_friend)
2021 DECL_ANTICIPATED (olddecl) = 0;
2022 DECL_HIDDEN_FRIEND_P (olddecl) = 0;
2026 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2028 tree old_result;
2029 tree new_result;
2030 old_result = DECL_TEMPLATE_RESULT (olddecl);
2031 new_result = DECL_TEMPLATE_RESULT (newdecl);
2032 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2033 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
2034 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
2035 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2037 DECL_ATTRIBUTES (old_result)
2038 = (*targetm.merge_decl_attributes) (old_result, new_result);
2040 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2042 /* Per C++11 8.3.6/4, default arguments cannot be added in later
2043 declarations of a function template. */
2044 if (DECL_SOURCE_LOCATION (newdecl)
2045 != DECL_SOURCE_LOCATION (olddecl))
2046 check_redeclaration_no_default_args (newdecl);
2048 check_default_args (newdecl);
2050 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2051 && DECL_INITIAL (new_result))
2053 if (DECL_INITIAL (old_result))
2054 DECL_UNINLINABLE (old_result) = 1;
2055 else
2056 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2057 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2058 DECL_NOT_REALLY_EXTERN (old_result)
2059 = DECL_NOT_REALLY_EXTERN (new_result);
2060 DECL_INTERFACE_KNOWN (old_result)
2061 = DECL_INTERFACE_KNOWN (new_result);
2062 DECL_DECLARED_INLINE_P (old_result)
2063 = DECL_DECLARED_INLINE_P (new_result);
2064 DECL_DISREGARD_INLINE_LIMITS (old_result)
2065 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2068 else
2070 DECL_DECLARED_INLINE_P (old_result)
2071 |= DECL_DECLARED_INLINE_P (new_result);
2072 DECL_DISREGARD_INLINE_LIMITS (old_result)
2073 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2074 check_redeclaration_exception_specification (newdecl, olddecl);
2078 /* If the new declaration is a definition, update the file and
2079 line information on the declaration, and also make
2080 the old declaration the same definition. */
2081 if (DECL_INITIAL (new_result) != NULL_TREE)
2083 DECL_SOURCE_LOCATION (olddecl)
2084 = DECL_SOURCE_LOCATION (old_result)
2085 = DECL_SOURCE_LOCATION (newdecl);
2086 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2087 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2089 tree parm;
2090 DECL_ARGUMENTS (old_result)
2091 = DECL_ARGUMENTS (new_result);
2092 for (parm = DECL_ARGUMENTS (old_result); parm;
2093 parm = DECL_CHAIN (parm))
2094 DECL_CONTEXT (parm) = old_result;
2098 return olddecl;
2101 if (types_match)
2103 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2104 check_redeclaration_exception_specification (newdecl, olddecl);
2106 /* Automatically handles default parameters. */
2107 tree oldtype = TREE_TYPE (olddecl);
2108 tree newtype;
2110 /* For typedefs use the old type, as the new type's DECL_NAME points
2111 at newdecl, which will be ggc_freed. */
2112 if (TREE_CODE (newdecl) == TYPE_DECL)
2114 /* But NEWTYPE might have an attribute, honor that. */
2115 tree tem = TREE_TYPE (newdecl);
2116 newtype = oldtype;
2118 if (TYPE_USER_ALIGN (tem))
2120 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2121 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2122 TYPE_USER_ALIGN (newtype) = true;
2125 /* And remove the new type from the variants list. */
2126 if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2128 tree remove = TREE_TYPE (newdecl);
2129 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2130 t = TYPE_NEXT_VARIANT (t))
2131 if (TYPE_NEXT_VARIANT (t) == remove)
2133 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2134 break;
2138 else
2139 /* Merge the data types specified in the two decls. */
2140 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2142 if (VAR_P (newdecl))
2144 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2145 /* For already initialized vars, TREE_READONLY could have been
2146 cleared in cp_finish_decl, because the var needs runtime
2147 initialization or destruction. Make sure not to set
2148 TREE_READONLY on it again. */
2149 if (DECL_INITIALIZED_P (olddecl)
2150 && !DECL_EXTERNAL (olddecl)
2151 && !TREE_READONLY (olddecl))
2152 TREE_READONLY (newdecl) = 0;
2153 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2154 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2155 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2156 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2157 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2158 if (DECL_CLASS_SCOPE_P (olddecl))
2159 DECL_DECLARED_CONSTEXPR_P (newdecl)
2160 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2162 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2163 if (DECL_LANG_SPECIFIC (olddecl)
2164 && CP_DECL_THREADPRIVATE_P (olddecl))
2166 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2167 if (!DECL_LANG_SPECIFIC (newdecl))
2168 retrofit_lang_decl (newdecl);
2170 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2174 /* An explicit specialization of a function template or of a member
2175 function of a class template can be declared transaction_safe
2176 independently of whether the corresponding template entity is declared
2177 transaction_safe. */
2178 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2179 && DECL_TEMPLATE_INSTANTIATION (olddecl)
2180 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2181 && tx_safe_fn_type_p (newtype)
2182 && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2183 newtype = tx_unsafe_fn_variant (newtype);
2185 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2187 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2188 check_default_args (newdecl);
2190 /* Lay the type out, unless already done. */
2191 if (! same_type_p (newtype, oldtype)
2192 && TREE_TYPE (newdecl) != error_mark_node
2193 && !(processing_template_decl && uses_template_parms (newdecl)))
2194 layout_type (TREE_TYPE (newdecl));
2196 if ((VAR_P (newdecl)
2197 || TREE_CODE (newdecl) == PARM_DECL
2198 || TREE_CODE (newdecl) == RESULT_DECL
2199 || TREE_CODE (newdecl) == FIELD_DECL
2200 || TREE_CODE (newdecl) == TYPE_DECL)
2201 && !(processing_template_decl && uses_template_parms (newdecl)))
2202 layout_decl (newdecl, 0);
2204 /* Merge the type qualifiers. */
2205 if (TREE_READONLY (newdecl))
2206 TREE_READONLY (olddecl) = 1;
2207 if (TREE_THIS_VOLATILE (newdecl))
2208 TREE_THIS_VOLATILE (olddecl) = 1;
2209 if (TREE_NOTHROW (newdecl))
2210 TREE_NOTHROW (olddecl) = 1;
2212 /* Merge deprecatedness. */
2213 if (TREE_DEPRECATED (newdecl))
2214 TREE_DEPRECATED (olddecl) = 1;
2216 /* Preserve function specific target and optimization options */
2217 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2219 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2220 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2221 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2222 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2224 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2225 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2226 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2227 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2230 /* Merge the initialization information. */
2231 if (DECL_INITIAL (newdecl) == NULL_TREE
2232 && DECL_INITIAL (olddecl) != NULL_TREE)
2234 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2235 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2236 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2238 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2239 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2243 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2245 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2246 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2247 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2248 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2249 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2250 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2251 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2252 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2253 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2254 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2255 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2256 /* Keep the old RTL. */
2257 COPY_DECL_RTL (olddecl, newdecl);
2259 else if (VAR_P (newdecl)
2260 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2262 /* Keep the old RTL. We cannot keep the old RTL if the old
2263 declaration was for an incomplete object and the new
2264 declaration is not since many attributes of the RTL will
2265 change. */
2266 COPY_DECL_RTL (olddecl, newdecl);
2269 /* If cannot merge, then use the new type and qualifiers,
2270 and don't preserve the old rtl. */
2271 else
2273 /* Clean out any memory we had of the old declaration. */
2274 tree oldstatic = value_member (olddecl, static_aggregates);
2275 if (oldstatic)
2276 TREE_VALUE (oldstatic) = error_mark_node;
2278 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2279 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2280 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2281 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2282 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2285 /* Merge the storage class information. */
2286 merge_weak (newdecl, olddecl);
2288 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2289 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2290 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2291 if (! DECL_EXTERNAL (olddecl))
2292 DECL_EXTERNAL (newdecl) = 0;
2293 if (! DECL_COMDAT (olddecl))
2294 DECL_COMDAT (newdecl) = 0;
2296 new_template_info = NULL_TREE;
2297 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2299 bool new_redefines_gnu_inline = false;
2301 if (new_defines_function
2302 && ((DECL_INTERFACE_KNOWN (olddecl)
2303 && TREE_CODE (olddecl) == FUNCTION_DECL)
2304 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2305 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2306 == FUNCTION_DECL))))
2308 tree fn = olddecl;
2310 if (TREE_CODE (fn) == TEMPLATE_DECL)
2311 fn = DECL_TEMPLATE_RESULT (olddecl);
2313 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2316 if (!new_redefines_gnu_inline)
2318 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2319 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2320 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2322 DECL_TEMPLATE_INSTANTIATED (newdecl)
2323 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2324 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2326 /* If the OLDDECL is an instantiation and/or specialization,
2327 then the NEWDECL must be too. But, it may not yet be marked
2328 as such if the caller has created NEWDECL, but has not yet
2329 figured out that it is a redeclaration. */
2330 if (!DECL_USE_TEMPLATE (newdecl))
2331 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2333 /* Don't really know how much of the language-specific
2334 values we should copy from old to new. */
2335 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2336 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2337 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2338 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2340 if (LANG_DECL_HAS_MIN (newdecl))
2342 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2343 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2344 if (DECL_TEMPLATE_INFO (newdecl))
2346 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2347 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2348 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2349 /* Remember the presence of explicit specialization args. */
2350 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2351 = TINFO_USED_TEMPLATE_ID (new_template_info);
2353 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2355 /* Only functions have these fields. */
2356 if (DECL_DECLARES_FUNCTION_P (newdecl))
2358 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2359 DECL_BEFRIENDING_CLASSES (newdecl)
2360 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2361 DECL_BEFRIENDING_CLASSES (olddecl));
2362 /* DECL_THUNKS is only valid for virtual functions,
2363 otherwise it is a DECL_FRIEND_CONTEXT. */
2364 if (DECL_VIRTUAL_P (newdecl))
2365 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2367 /* Only variables have this field. */
2368 else if (VAR_P (newdecl)
2369 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2370 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2373 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2375 tree parm;
2377 /* Merge parameter attributes. */
2378 tree oldarg, newarg;
2379 for (oldarg = DECL_ARGUMENTS(olddecl),
2380 newarg = DECL_ARGUMENTS(newdecl);
2381 oldarg && newarg;
2382 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2383 DECL_ATTRIBUTES (newarg)
2384 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2385 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2388 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2389 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2391 /* If newdecl is not a specialization, then it is not a
2392 template-related function at all. And that means that we
2393 should have exited above, returning 0. */
2394 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2396 if (DECL_ODR_USED (olddecl))
2397 /* From [temp.expl.spec]:
2399 If a template, a member template or the member of a class
2400 template is explicitly specialized then that
2401 specialization shall be declared before the first use of
2402 that specialization that would cause an implicit
2403 instantiation to take place, in every translation unit in
2404 which such a use occurs. */
2405 error ("explicit specialization of %qD after first use",
2406 olddecl);
2408 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2409 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2410 && DECL_DECLARED_INLINE_P (newdecl));
2412 /* Don't propagate visibility from the template to the
2413 specialization here. We'll do that in determine_visibility if
2414 appropriate. */
2415 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2417 /* [temp.expl.spec/14] We don't inline explicit specialization
2418 just because the primary template says so. */
2420 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2421 the always_inline attribute. */
2422 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2423 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2425 if (DECL_DECLARED_INLINE_P (newdecl))
2426 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2427 else
2428 DECL_ATTRIBUTES (newdecl)
2429 = remove_attribute ("always_inline",
2430 DECL_ATTRIBUTES (newdecl));
2433 else if (new_defines_function && DECL_INITIAL (olddecl))
2435 /* Never inline re-defined extern inline functions.
2436 FIXME: this could be better handled by keeping both
2437 function as separate declarations. */
2438 DECL_UNINLINABLE (newdecl) = 1;
2440 else
2442 if (DECL_PENDING_INLINE_P (olddecl))
2444 DECL_PENDING_INLINE_P (newdecl) = 1;
2445 DECL_PENDING_INLINE_INFO (newdecl)
2446 = DECL_PENDING_INLINE_INFO (olddecl);
2448 else if (DECL_PENDING_INLINE_P (newdecl))
2450 else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
2451 DECL_SAVED_FUNCTION_DATA (newdecl)
2452 = DECL_SAVED_FUNCTION_DATA (olddecl);
2454 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2456 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2457 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2459 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2460 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2461 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2462 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2465 /* Preserve abstractness on cloned [cd]tors. */
2466 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2468 /* Update newdecl's parms to point at olddecl. */
2469 for (parm = DECL_ARGUMENTS (newdecl); parm;
2470 parm = DECL_CHAIN (parm))
2471 DECL_CONTEXT (parm) = olddecl;
2473 if (! types_match)
2475 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2476 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2477 COPY_DECL_RTL (newdecl, olddecl);
2479 if (! types_match || new_defines_function)
2481 /* These need to be copied so that the names are available.
2482 Note that if the types do match, we'll preserve inline
2483 info and other bits, but if not, we won't. */
2484 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2485 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2487 /* If redeclaring a builtin function, it stays built in
2488 if newdecl is a gnu_inline definition, or if newdecl is just
2489 a declaration. */
2490 if (DECL_BUILT_IN (olddecl)
2491 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2493 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2494 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2495 /* If we're keeping the built-in definition, keep the rtl,
2496 regardless of declaration matches. */
2497 COPY_DECL_RTL (olddecl, newdecl);
2498 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2500 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2501 switch (fncode)
2503 /* If a compatible prototype of these builtin functions
2504 is seen, assume the runtime implements it with the
2505 expected semantics. */
2506 case BUILT_IN_STPCPY:
2507 if (builtin_decl_explicit_p (fncode))
2508 set_builtin_decl_implicit_p (fncode, true);
2509 break;
2510 default:
2511 if (builtin_decl_explicit_p (fncode))
2512 set_builtin_decl_declared_p (fncode, true);
2513 break;
2517 if (new_defines_function)
2518 /* If defining a function declared with other language
2519 linkage, use the previously declared language linkage. */
2520 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2521 else if (types_match)
2523 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2524 /* Don't clear out the arguments if we're just redeclaring a
2525 function. */
2526 if (DECL_ARGUMENTS (olddecl))
2527 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2530 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2531 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2533 /* Now preserve various other info from the definition. */
2534 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2535 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2536 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2537 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2539 /* Warn about conflicting visibility specifications. */
2540 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2541 && DECL_VISIBILITY_SPECIFIED (newdecl)
2542 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2544 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2545 "%qD: visibility attribute ignored because it "
2546 "conflicts with previous declaration", newdecl))
2547 inform (DECL_SOURCE_LOCATION (olddecl),
2548 "previous declaration of %qD", olddecl);
2550 /* Choose the declaration which specified visibility. */
2551 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2553 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2554 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2556 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2557 so keep this behavior. */
2558 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2560 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2561 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2563 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2564 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2566 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2567 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2569 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2570 if (TREE_CODE (newdecl) == FIELD_DECL)
2571 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2573 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2574 with that from NEWDECL below. */
2575 if (DECL_LANG_SPECIFIC (olddecl))
2577 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2578 != DECL_LANG_SPECIFIC (newdecl));
2579 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2582 /* Merge the USED information. */
2583 if (TREE_USED (olddecl))
2584 TREE_USED (newdecl) = 1;
2585 else if (TREE_USED (newdecl))
2586 TREE_USED (olddecl) = 1;
2587 if (VAR_P (newdecl))
2589 if (DECL_READ_P (olddecl))
2590 DECL_READ_P (newdecl) = 1;
2591 else if (DECL_READ_P (newdecl))
2592 DECL_READ_P (olddecl) = 1;
2594 if (DECL_PRESERVE_P (olddecl))
2595 DECL_PRESERVE_P (newdecl) = 1;
2596 else if (DECL_PRESERVE_P (newdecl))
2597 DECL_PRESERVE_P (olddecl) = 1;
2599 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2600 to olddecl and deleted. */
2601 if (TREE_CODE (newdecl) == FUNCTION_DECL
2602 && DECL_FUNCTION_VERSIONED (olddecl))
2604 /* Set the flag for newdecl so that it gets copied to olddecl. */
2605 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2606 /* newdecl will be purged after copying to olddecl and is no longer
2607 a version. */
2608 cgraph_node::delete_function_version (newdecl);
2611 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2613 int function_size;
2614 struct symtab_node *snode = symtab_node::get (olddecl);
2616 function_size = sizeof (struct tree_decl_common);
2618 memcpy ((char *) olddecl + sizeof (struct tree_common),
2619 (char *) newdecl + sizeof (struct tree_common),
2620 function_size - sizeof (struct tree_common));
2622 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2623 (char *) newdecl + sizeof (struct tree_decl_common),
2624 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2626 /* Preserve symtab node mapping. */
2627 olddecl->decl_with_vis.symtab_node = snode;
2629 if (new_template_info)
2630 /* If newdecl is a template instantiation, it is possible that
2631 the following sequence of events has occurred:
2633 o A friend function was declared in a class template. The
2634 class template was instantiated.
2636 o The instantiation of the friend declaration was
2637 recorded on the instantiation list, and is newdecl.
2639 o Later, however, instantiate_class_template called pushdecl
2640 on the newdecl to perform name injection. But, pushdecl in
2641 turn called duplicate_decls when it discovered that another
2642 declaration of a global function with the same name already
2643 existed.
2645 o Here, in duplicate_decls, we decided to clobber newdecl.
2647 If we're going to do that, we'd better make sure that
2648 olddecl, and not newdecl, is on the list of
2649 instantiations so that if we try to do the instantiation
2650 again we won't get the clobbered declaration. */
2651 reregister_specialization (newdecl,
2652 new_template_info,
2653 olddecl);
2655 else
2657 size_t size = tree_code_size (TREE_CODE (newdecl));
2659 memcpy ((char *) olddecl + sizeof (struct tree_common),
2660 (char *) newdecl + sizeof (struct tree_common),
2661 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2662 switch (TREE_CODE (newdecl))
2664 case LABEL_DECL:
2665 case VAR_DECL:
2666 case RESULT_DECL:
2667 case PARM_DECL:
2668 case FIELD_DECL:
2669 case TYPE_DECL:
2670 case CONST_DECL:
2672 struct symtab_node *snode = NULL;
2674 if (VAR_P (newdecl)
2675 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2676 || DECL_EXTERNAL (olddecl)))
2677 snode = symtab_node::get (olddecl);
2678 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2679 (char *) newdecl + sizeof (struct tree_decl_common),
2680 size - sizeof (struct tree_decl_common)
2681 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2682 if (VAR_P (newdecl))
2683 olddecl->decl_with_vis.symtab_node = snode;
2685 break;
2686 default:
2687 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2688 (char *) newdecl + sizeof (struct tree_decl_common),
2689 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2690 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2691 break;
2695 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2697 if (DECL_EXTERNAL (olddecl)
2698 || TREE_PUBLIC (olddecl)
2699 || TREE_STATIC (olddecl))
2701 /* Merge the section attribute.
2702 We want to issue an error if the sections conflict but that must be
2703 done later in decl_attributes since we are called before attributes
2704 are assigned. */
2705 if (DECL_SECTION_NAME (newdecl) != NULL)
2706 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2708 if (DECL_ONE_ONLY (newdecl))
2710 struct symtab_node *oldsym, *newsym;
2711 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2712 oldsym = cgraph_node::get_create (olddecl);
2713 else
2714 oldsym = varpool_node::get_create (olddecl);
2715 newsym = symtab_node::get (newdecl);
2716 oldsym->set_comdat_group (newsym->get_comdat_group ());
2720 if (VAR_P (newdecl)
2721 && CP_DECL_THREAD_LOCAL_P (newdecl))
2723 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2724 if (!processing_template_decl)
2725 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2729 DECL_UID (olddecl) = olddecl_uid;
2730 if (olddecl_friend)
2731 DECL_FRIEND_P (olddecl) = 1;
2732 if (hidden_friend)
2734 DECL_ANTICIPATED (olddecl) = 1;
2735 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2738 /* NEWDECL contains the merged attribute lists.
2739 Update OLDDECL to be the same. */
2740 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2742 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2743 so that encode_section_info has a chance to look at the new decl
2744 flags and attributes. */
2745 if (DECL_RTL_SET_P (olddecl)
2746 && (TREE_CODE (olddecl) == FUNCTION_DECL
2747 || (VAR_P (olddecl)
2748 && TREE_STATIC (olddecl))))
2749 make_decl_rtl (olddecl);
2751 /* The NEWDECL will no longer be needed. Because every out-of-class
2752 declaration of a member results in a call to duplicate_decls,
2753 freeing these nodes represents in a significant savings.
2755 Before releasing the node, be sore to remove function from symbol
2756 table that might have been inserted there to record comdat group.
2757 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2758 structure is shared in between newdecl and oldecl. */
2759 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2760 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2761 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2763 struct symtab_node *snode = symtab_node::get (newdecl);
2764 if (snode)
2765 snode->remove ();
2768 /* Remove the associated constraints for newdecl, if any, before
2769 reclaiming memory. */
2770 if (flag_concepts)
2771 remove_constraints (newdecl);
2773 ggc_free (newdecl);
2775 return olddecl;
2778 /* Return zero if the declaration NEWDECL is valid
2779 when the declaration OLDDECL (assumed to be for the same name)
2780 has already been seen.
2781 Otherwise return an error message format string with a %s
2782 where the identifier should go. */
2784 static const char *
2785 redeclaration_error_message (tree newdecl, tree olddecl)
2787 if (TREE_CODE (newdecl) == TYPE_DECL)
2789 /* Because C++ can put things into name space for free,
2790 constructs like "typedef struct foo { ... } foo"
2791 would look like an erroneous redeclaration. */
2792 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2793 return NULL;
2794 else
2795 return G_("redefinition of %q#D");
2797 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2799 /* If this is a pure function, its olddecl will actually be
2800 the original initialization to `0' (which we force to call
2801 abort()). Don't complain about redefinition in this case. */
2802 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2803 && DECL_INITIAL (olddecl) == NULL_TREE)
2804 return NULL;
2806 /* If both functions come from different namespaces, this is not
2807 a redeclaration - this is a conflict with a used function. */
2808 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2809 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2810 && ! decls_match (olddecl, newdecl))
2811 return G_("%qD conflicts with used function");
2813 /* We'll complain about linkage mismatches in
2814 warn_extern_redeclared_static. */
2816 /* Defining the same name twice is no good. */
2817 if (decl_defined_p (olddecl)
2818 && decl_defined_p (newdecl))
2820 if (DECL_NAME (olddecl) == NULL_TREE)
2821 return G_("%q#D not declared in class");
2822 else if (!GNU_INLINE_P (olddecl)
2823 || GNU_INLINE_P (newdecl))
2824 return G_("redefinition of %q#D");
2827 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2829 bool olda = GNU_INLINE_P (olddecl);
2830 bool newa = GNU_INLINE_P (newdecl);
2832 if (olda != newa)
2834 if (newa)
2835 return G_("%q+D redeclared inline with "
2836 "%<gnu_inline%> attribute");
2837 else
2838 return G_("%q+D redeclared inline without "
2839 "%<gnu_inline%> attribute");
2843 check_abi_tag_redeclaration
2844 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2845 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2847 return NULL;
2849 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2851 tree nt, ot;
2853 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2855 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2856 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2857 return G_("redefinition of %q#D");
2858 return NULL;
2861 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2862 || (DECL_TEMPLATE_RESULT (newdecl)
2863 == DECL_TEMPLATE_RESULT (olddecl)))
2864 return NULL;
2866 nt = DECL_TEMPLATE_RESULT (newdecl);
2867 if (DECL_TEMPLATE_INFO (nt))
2868 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2869 ot = DECL_TEMPLATE_RESULT (olddecl);
2870 if (DECL_TEMPLATE_INFO (ot))
2871 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2872 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2873 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2874 return G_("redefinition of %q#D");
2876 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2878 bool olda = GNU_INLINE_P (ot);
2879 bool newa = GNU_INLINE_P (nt);
2881 if (olda != newa)
2883 if (newa)
2884 return G_("%q+D redeclared inline with "
2885 "%<gnu_inline%> attribute");
2886 else
2887 return G_("%q+D redeclared inline without "
2888 "%<gnu_inline%> attribute");
2892 /* Core issue #226 (C++0x):
2894 If a friend function template declaration specifies a
2895 default template-argument, that declaration shall be a
2896 definition and shall be the only declaration of the
2897 function template in the translation unit. */
2898 if ((cxx_dialect != cxx98)
2899 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2900 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2901 /*is_primary=*/true,
2902 /*is_partial=*/false,
2903 /*is_friend_decl=*/2))
2904 return G_("redeclaration of friend %q#D "
2905 "may not have default template arguments");
2907 return NULL;
2909 else if (VAR_P (newdecl)
2910 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2911 && (! DECL_LANG_SPECIFIC (olddecl)
2912 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2913 || CP_DECL_THREAD_LOCAL_P (newdecl)))
2915 /* Only variables can be thread-local, and all declarations must
2916 agree on this property. */
2917 if (CP_DECL_THREAD_LOCAL_P (newdecl))
2918 return G_("thread-local declaration of %q#D follows "
2919 "non-thread-local declaration");
2920 else
2921 return G_("non-thread-local declaration of %q#D follows "
2922 "thread-local declaration");
2924 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2926 /* The objects have been declared at namespace scope. If either
2927 is a member of an anonymous union, then this is an invalid
2928 redeclaration. For example:
2930 int i;
2931 union { int i; };
2933 is invalid. */
2934 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2935 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2936 return G_("redeclaration of %q#D");
2937 /* If at least one declaration is a reference, there is no
2938 conflict. For example:
2940 int i = 3;
2941 extern int i;
2943 is valid. */
2944 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2945 return NULL;
2947 /* Static data member declared outside a class definition
2948 if the variable is defined within the class with constexpr
2949 specifier is declaration rather than definition (and
2950 deprecated). */
2951 if (cxx_dialect >= cxx1z
2952 && DECL_CLASS_SCOPE_P (olddecl)
2953 && DECL_DECLARED_CONSTEXPR_P (olddecl)
2954 && !DECL_INITIAL (newdecl))
2956 DECL_EXTERNAL (newdecl) = 1;
2957 /* For now, only warn with explicit -Wdeprecated. */
2958 if (global_options_set.x_warn_deprecated
2959 && warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
2960 "redundant redeclaration of %<constexpr%> static "
2961 "data member %qD", newdecl))
2962 inform (DECL_SOURCE_LOCATION (olddecl),
2963 "previous declaration of %qD", olddecl);
2964 return NULL;
2967 /* Reject two definitions. */
2968 return G_("redefinition of %q#D");
2970 else
2972 /* Objects declared with block scope: */
2973 /* Reject two definitions, and reject a definition
2974 together with an external reference. */
2975 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2976 return G_("redeclaration of %q#D");
2977 return NULL;
2981 /* Hash and equality functions for the named_label table. */
2983 hashval_t
2984 named_label_hasher::hash (named_label_entry *ent)
2986 return DECL_UID (ent->label_decl);
2989 bool
2990 named_label_hasher::equal (named_label_entry *a, named_label_entry *b)
2992 return a->label_decl == b->label_decl;
2995 /* Create a new label, named ID. */
2997 static tree
2998 make_label_decl (tree id, int local_p)
3000 struct named_label_entry *ent;
3001 tree decl;
3003 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3005 DECL_CONTEXT (decl) = current_function_decl;
3006 SET_DECL_MODE (decl, VOIDmode);
3007 C_DECLARED_LABEL_FLAG (decl) = local_p;
3009 /* Say where one reference is to the label, for the sake of the
3010 error if it is not defined. */
3011 DECL_SOURCE_LOCATION (decl) = input_location;
3013 /* Record the fact that this identifier is bound to this label. */
3014 SET_IDENTIFIER_LABEL_VALUE (id, decl);
3016 /* Create the label htab for the function on demand. */
3017 if (!named_labels)
3018 named_labels = hash_table<named_label_hasher>::create_ggc (13);
3020 /* Record this label on the list of labels used in this function.
3021 We do this before calling make_label_decl so that we get the
3022 IDENTIFIER_LABEL_VALUE before the new label is declared. */
3023 ent = ggc_cleared_alloc<named_label_entry> ();
3024 ent->label_decl = decl;
3026 named_label_entry **slot = named_labels->find_slot (ent, INSERT);
3027 gcc_assert (*slot == NULL);
3028 *slot = ent;
3030 return decl;
3033 /* Look for a label named ID in the current function. If one cannot
3034 be found, create one. (We keep track of used, but undefined,
3035 labels, and complain about them at the end of a function.) */
3037 static tree
3038 lookup_label_1 (tree id)
3040 tree decl;
3042 /* You can't use labels at global scope. */
3043 if (current_function_decl == NULL_TREE)
3045 error ("label %qE referenced outside of any function", id);
3046 return NULL_TREE;
3049 /* See if we've already got this label. */
3050 decl = IDENTIFIER_LABEL_VALUE (id);
3051 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
3052 return decl;
3054 decl = make_label_decl (id, /*local_p=*/0);
3055 return decl;
3058 /* Wrapper for lookup_label_1. */
3060 tree
3061 lookup_label (tree id)
3063 tree ret;
3064 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3065 ret = lookup_label_1 (id);
3066 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3067 return ret;
3070 /* Declare a local label named ID. */
3072 tree
3073 declare_local_label (tree id)
3075 tree decl;
3076 cp_label_binding bind;
3078 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
3079 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
3080 bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
3082 decl = make_label_decl (id, /*local_p=*/1);
3083 bind.label = decl;
3084 vec_safe_push (current_binding_level->shadowed_labels, bind);
3086 return decl;
3089 /* Returns nonzero if it is ill-formed to jump past the declaration of
3090 DECL. Returns 2 if it's also a real problem. */
3092 static int
3093 decl_jump_unsafe (tree decl)
3095 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3096 with automatic storage duration is not in scope to a point where it is
3097 in scope is ill-formed unless the variable has scalar type, class type
3098 with a trivial default constructor and a trivial destructor, a
3099 cv-qualified version of one of these types, or an array of one of the
3100 preceding types and is declared without an initializer (8.5). */
3101 tree type = TREE_TYPE (decl);
3103 if (!VAR_P (decl) || TREE_STATIC (decl)
3104 || type == error_mark_node)
3105 return 0;
3107 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3108 || variably_modified_type_p (type, NULL_TREE))
3109 return 2;
3111 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3112 return 1;
3114 return 0;
3117 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3118 to the user. */
3120 static bool
3121 identify_goto (tree decl, location_t loc, const location_t *locus,
3122 diagnostic_t diag_kind)
3124 bool complained
3125 = (decl ? emit_diagnostic (diag_kind, loc, 0, "jump to label %qD", decl)
3126 : emit_diagnostic (diag_kind, loc, 0, "jump to case label"));
3127 if (complained && locus)
3128 inform (*locus, " from here");
3129 return complained;
3132 /* Check that a single previously seen jump to a newly defined label
3133 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3134 the jump context; NAMES are the names in scope in LEVEL at the jump
3135 context; LOCUS is the source position of the jump or 0. Returns
3136 true if all is well. */
3138 static bool
3139 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3140 bool exited_omp, const location_t *locus)
3142 cp_binding_level *b;
3143 bool complained = false;
3144 int identified = 0;
3145 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3147 if (exited_omp)
3149 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3150 if (complained)
3151 inform (input_location, " exits OpenMP structured block");
3152 saw_omp = true;
3153 identified = 2;
3156 for (b = current_binding_level; b ; b = b->level_chain)
3158 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3160 for (new_decls = b->names; new_decls != old_decls;
3161 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3162 : TREE_CHAIN (new_decls)))
3164 int problem = decl_jump_unsafe (new_decls);
3165 if (! problem)
3166 continue;
3168 if (!identified)
3170 complained = identify_goto (decl, input_location, locus,
3171 DK_PERMERROR);
3172 identified = 1;
3174 if (complained)
3176 if (problem > 1)
3177 inform (DECL_SOURCE_LOCATION (new_decls),
3178 " crosses initialization of %q#D", new_decls);
3179 else
3180 inform (DECL_SOURCE_LOCATION (new_decls),
3181 " enters scope of %q#D which has "
3182 "non-trivial destructor", new_decls);
3186 if (b == level)
3187 break;
3188 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
3190 if (identified < 2)
3192 complained = identify_goto (decl, input_location, locus,
3193 DK_ERROR);
3194 identified = 2;
3196 if (complained)
3198 if (b->kind == sk_try)
3199 inform (input_location, " enters try block");
3200 else
3201 inform (input_location, " enters catch block");
3203 saw_eh = true;
3205 if (b->kind == sk_omp && !saw_omp)
3207 if (identified < 2)
3209 complained = identify_goto (decl, input_location, locus,
3210 DK_ERROR);
3211 identified = 2;
3213 if (complained)
3214 inform (input_location, " enters OpenMP structured block");
3215 saw_omp = true;
3217 if (b->kind == sk_transaction && !saw_tm)
3219 if (identified < 2)
3221 complained = identify_goto (decl, input_location, locus,
3222 DK_ERROR);
3223 identified = 2;
3225 if (complained)
3226 inform (input_location,
3227 " enters synchronized or atomic statement");
3228 saw_tm = true;
3230 if (!saw_cxif && b->kind == sk_block
3231 && level_for_constexpr_if (b->level_chain))
3233 if (identified < 2)
3235 complained = identify_goto (decl, input_location, locus,
3236 DK_ERROR);
3237 identified = 2;
3239 if (complained)
3240 inform (EXPR_LOCATION (b->level_chain->this_entity),
3241 " enters constexpr if statement");
3242 saw_cxif = true;
3246 return !identified;
3249 static void
3250 check_previous_goto (tree decl, struct named_label_use_entry *use)
3252 check_previous_goto_1 (decl, use->binding_level,
3253 use->names_in_scope, use->in_omp_scope,
3254 &use->o_goto_locus);
3257 static bool
3258 check_switch_goto (cp_binding_level* level)
3260 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3263 /* Check that a new jump to a label DECL is OK. Called by
3264 finish_goto_stmt. */
3266 void
3267 check_goto (tree decl)
3269 struct named_label_entry *ent, dummy;
3270 bool saw_catch = false, complained = false;
3271 int identified = 0;
3272 tree bad;
3273 unsigned ix;
3275 /* We can't know where a computed goto is jumping.
3276 So we assume that it's OK. */
3277 if (TREE_CODE (decl) != LABEL_DECL)
3278 return;
3280 /* We didn't record any information about this label when we created it,
3281 and there's not much point since it's trivial to analyze as a return. */
3282 if (decl == cdtor_label)
3283 return;
3285 dummy.label_decl = decl;
3286 ent = named_labels->find (&dummy);
3287 gcc_assert (ent != NULL);
3289 /* If the label hasn't been defined yet, defer checking. */
3290 if (! DECL_INITIAL (decl))
3292 struct named_label_use_entry *new_use;
3294 /* Don't bother creating another use if the last goto had the
3295 same data, and will therefore create the same set of errors. */
3296 if (ent->uses
3297 && ent->uses->names_in_scope == current_binding_level->names)
3298 return;
3300 new_use = ggc_alloc<named_label_use_entry> ();
3301 new_use->binding_level = current_binding_level;
3302 new_use->names_in_scope = current_binding_level->names;
3303 new_use->o_goto_locus = input_location;
3304 new_use->in_omp_scope = false;
3306 new_use->next = ent->uses;
3307 ent->uses = new_use;
3308 return;
3311 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3312 || ent->in_constexpr_if
3313 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3315 diagnostic_t diag_kind = DK_PERMERROR;
3316 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3317 || ent->in_transaction_scope || ent->in_omp_scope)
3318 diag_kind = DK_ERROR;
3319 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3320 &input_location, diag_kind);
3321 identified = 1 + (diag_kind == DK_ERROR);
3324 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3326 int u = decl_jump_unsafe (bad);
3328 if (u > 1 && DECL_ARTIFICIAL (bad))
3330 /* Can't skip init of __exception_info. */
3331 if (identified == 1)
3333 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3334 &input_location, DK_ERROR);
3335 identified = 2;
3337 if (complained)
3338 inform (DECL_SOURCE_LOCATION (bad), " enters catch block");
3339 saw_catch = true;
3341 else if (complained)
3343 if (u > 1)
3344 inform (DECL_SOURCE_LOCATION (bad),
3345 " skips initialization of %q#D", bad);
3346 else
3347 inform (DECL_SOURCE_LOCATION (bad),
3348 " enters scope of %q#D which has "
3349 "non-trivial destructor", bad);
3353 if (complained)
3355 if (ent->in_try_scope)
3356 inform (input_location, " enters try block");
3357 else if (ent->in_catch_scope && !saw_catch)
3358 inform (input_location, " enters catch block");
3359 else if (ent->in_transaction_scope)
3360 inform (input_location, " enters synchronized or atomic statement");
3361 else if (ent->in_constexpr_if)
3362 inform (input_location, " enters constexpr if statement");
3365 if (ent->in_omp_scope)
3367 if (complained)
3368 inform (input_location, " enters OpenMP structured block");
3370 else if (flag_openmp)
3372 cp_binding_level *b;
3373 for (b = current_binding_level; b ; b = b->level_chain)
3375 if (b == ent->binding_level)
3376 break;
3377 if (b->kind == sk_omp)
3379 if (identified < 2)
3381 complained = identify_goto (decl,
3382 DECL_SOURCE_LOCATION (decl),
3383 &input_location, DK_ERROR);
3384 identified = 2;
3386 if (complained)
3387 inform (input_location, " exits OpenMP structured block");
3388 break;
3394 /* Check that a return is ok wrt OpenMP structured blocks.
3395 Called by finish_return_stmt. Returns true if all is well. */
3397 bool
3398 check_omp_return (void)
3400 cp_binding_level *b;
3401 for (b = current_binding_level; b ; b = b->level_chain)
3402 if (b->kind == sk_omp)
3404 error ("invalid exit from OpenMP structured block");
3405 return false;
3407 else if (b->kind == sk_function_parms)
3408 break;
3409 return true;
3412 /* Define a label, specifying the location in the source file.
3413 Return the LABEL_DECL node for the label. */
3415 static tree
3416 define_label_1 (location_t location, tree name)
3418 struct named_label_entry *ent, dummy;
3419 cp_binding_level *p;
3420 tree decl;
3422 decl = lookup_label (name);
3424 dummy.label_decl = decl;
3425 ent = named_labels->find (&dummy);
3426 gcc_assert (ent != NULL);
3428 /* After labels, make any new cleanups in the function go into their
3429 own new (temporary) binding contour. */
3430 for (p = current_binding_level;
3431 p->kind != sk_function_parms;
3432 p = p->level_chain)
3433 p->more_cleanups_ok = 0;
3435 if (name == get_identifier ("wchar_t"))
3436 permerror (input_location, "label named wchar_t");
3438 if (DECL_INITIAL (decl) != NULL_TREE)
3440 error ("duplicate label %qD", decl);
3441 return error_mark_node;
3443 else
3445 struct named_label_use_entry *use;
3447 /* Mark label as having been defined. */
3448 DECL_INITIAL (decl) = error_mark_node;
3449 /* Say where in the source. */
3450 DECL_SOURCE_LOCATION (decl) = location;
3452 ent->binding_level = current_binding_level;
3453 ent->names_in_scope = current_binding_level->names;
3455 for (use = ent->uses; use ; use = use->next)
3456 check_previous_goto (decl, use);
3457 ent->uses = NULL;
3460 return decl;
3463 /* Wrapper for define_label_1. */
3465 tree
3466 define_label (location_t location, tree name)
3468 tree ret;
3469 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3470 ret = define_label_1 (location, name);
3471 timevar_cond_stop (TV_NAME_LOOKUP, running);
3472 return ret;
3476 struct cp_switch
3478 cp_binding_level *level;
3479 struct cp_switch *next;
3480 /* The SWITCH_STMT being built. */
3481 tree switch_stmt;
3482 /* A splay-tree mapping the low element of a case range to the high
3483 element, or NULL_TREE if there is no high element. Used to
3484 determine whether or not a new case label duplicates an old case
3485 label. We need a tree, rather than simply a hash table, because
3486 of the GNU case range extension. */
3487 splay_tree cases;
3488 /* Remember whether there was a case value that is outside the
3489 range of the original type of the controlling expression. */
3490 bool outside_range_p;
3493 /* A stack of the currently active switch statements. The innermost
3494 switch statement is on the top of the stack. There is no need to
3495 mark the stack for garbage collection because it is only active
3496 during the processing of the body of a function, and we never
3497 collect at that point. */
3499 static struct cp_switch *switch_stack;
3501 /* Called right after a switch-statement condition is parsed.
3502 SWITCH_STMT is the switch statement being parsed. */
3504 void
3505 push_switch (tree switch_stmt)
3507 struct cp_switch *p = XNEW (struct cp_switch);
3508 p->level = current_binding_level;
3509 p->next = switch_stack;
3510 p->switch_stmt = switch_stmt;
3511 p->cases = splay_tree_new (case_compare, NULL, NULL);
3512 p->outside_range_p = false;
3513 switch_stack = p;
3516 void
3517 pop_switch (void)
3519 struct cp_switch *cs = switch_stack;
3520 location_t switch_location;
3522 /* Emit warnings as needed. */
3523 switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3524 const bool bool_cond_p
3525 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3526 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3527 if (!processing_template_decl)
3528 c_do_switch_warnings (cs->cases, switch_location,
3529 SWITCH_STMT_TYPE (cs->switch_stmt),
3530 SWITCH_STMT_COND (cs->switch_stmt),
3531 bool_cond_p, cs->outside_range_p);
3533 splay_tree_delete (cs->cases);
3534 switch_stack = switch_stack->next;
3535 free (cs);
3538 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3539 condition. Note that if TYPE and VALUE are already integral we don't
3540 really do the conversion because the language-independent
3541 warning/optimization code will work better that way. */
3543 static tree
3544 case_conversion (tree type, tree value)
3546 if (value == NULL_TREE)
3547 return value;
3549 if (cxx_dialect >= cxx11
3550 && (SCOPED_ENUM_P (type)
3551 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3553 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3554 type = type_promotes_to (type);
3555 value = (perform_implicit_conversion_flags
3556 (type, value, tf_warning_or_error,
3557 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3559 return cxx_constant_value (value);
3562 /* Note that we've seen a definition of a case label, and complain if this
3563 is a bad place for one. */
3565 tree
3566 finish_case_label (location_t loc, tree low_value, tree high_value)
3568 tree cond, r;
3569 cp_binding_level *p;
3570 tree type;
3572 if (processing_template_decl)
3574 tree label;
3576 /* For templates, just add the case label; we'll do semantic
3577 analysis at instantiation-time. */
3578 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3579 return add_stmt (build_case_label (low_value, high_value, label));
3582 /* Find the condition on which this switch statement depends. */
3583 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3584 if (cond && TREE_CODE (cond) == TREE_LIST)
3585 cond = TREE_VALUE (cond);
3587 if (!check_switch_goto (switch_stack->level))
3588 return error_mark_node;
3590 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3592 low_value = case_conversion (type, low_value);
3593 high_value = case_conversion (type, high_value);
3595 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3596 low_value, high_value,
3597 &switch_stack->outside_range_p);
3599 /* After labels, make any new cleanups in the function go into their
3600 own new (temporary) binding contour. */
3601 for (p = current_binding_level;
3602 p->kind != sk_function_parms;
3603 p = p->level_chain)
3604 p->more_cleanups_ok = 0;
3606 return r;
3609 struct typename_info {
3610 tree scope;
3611 tree name;
3612 tree template_id;
3613 bool enum_p;
3614 bool class_p;
3617 struct typename_hasher : ggc_ptr_hash<tree_node>
3619 typedef typename_info *compare_type;
3621 /* Hash a TYPENAME_TYPE. */
3623 static hashval_t
3624 hash (tree t)
3626 hashval_t hash;
3628 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3629 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3631 return hash;
3634 /* Compare two TYPENAME_TYPEs. */
3636 static bool
3637 equal (tree t1, const typename_info *t2)
3639 return (TYPE_IDENTIFIER (t1) == t2->name
3640 && TYPE_CONTEXT (t1) == t2->scope
3641 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3642 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3643 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3647 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3648 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3650 Returns the new TYPENAME_TYPE. */
3652 static GTY (()) hash_table<typename_hasher> *typename_htab;
3654 static tree
3655 build_typename_type (tree context, tree name, tree fullname,
3656 enum tag_types tag_type)
3658 tree t;
3659 tree d;
3660 typename_info ti;
3661 tree *e;
3662 hashval_t hash;
3664 if (typename_htab == NULL)
3665 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3667 ti.scope = FROB_CONTEXT (context);
3668 ti.name = name;
3669 ti.template_id = fullname;
3670 ti.enum_p = tag_type == enum_type;
3671 ti.class_p = (tag_type == class_type
3672 || tag_type == record_type
3673 || tag_type == union_type);
3674 hash = (htab_hash_pointer (ti.scope)
3675 ^ htab_hash_pointer (ti.name));
3677 /* See if we already have this type. */
3678 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3679 if (*e)
3680 t = *e;
3681 else
3683 /* Build the TYPENAME_TYPE. */
3684 t = cxx_make_type (TYPENAME_TYPE);
3685 TYPE_CONTEXT (t) = ti.scope;
3686 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3687 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3688 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3690 /* Build the corresponding TYPE_DECL. */
3691 d = build_decl (input_location, TYPE_DECL, name, t);
3692 TYPE_NAME (TREE_TYPE (d)) = d;
3693 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3694 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3695 DECL_ARTIFICIAL (d) = 1;
3697 /* Store it in the hash table. */
3698 *e = t;
3700 /* TYPENAME_TYPEs must always be compared structurally, because
3701 they may or may not resolve down to another type depending on
3702 the currently open classes. */
3703 SET_TYPE_STRUCTURAL_EQUALITY (t);
3706 return t;
3709 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3710 provided to name the type. Returns an appropriate type, unless an
3711 error occurs, in which case error_mark_node is returned. If we
3712 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3713 return that, rather than the _TYPE it corresponds to, in other
3714 cases we look through the type decl. If TF_ERROR is set, complain
3715 about errors, otherwise be quiet. */
3717 tree
3718 make_typename_type (tree context, tree name, enum tag_types tag_type,
3719 tsubst_flags_t complain)
3721 tree fullname;
3722 tree t;
3723 bool want_template;
3725 if (name == error_mark_node
3726 || context == NULL_TREE
3727 || context == error_mark_node)
3728 return error_mark_node;
3730 if (TYPE_P (name))
3732 if (!(TYPE_LANG_SPECIFIC (name)
3733 && (CLASSTYPE_IS_TEMPLATE (name)
3734 || CLASSTYPE_USE_TEMPLATE (name))))
3735 name = TYPE_IDENTIFIER (name);
3736 else
3737 /* Create a TEMPLATE_ID_EXPR for the type. */
3738 name = build_nt (TEMPLATE_ID_EXPR,
3739 CLASSTYPE_TI_TEMPLATE (name),
3740 CLASSTYPE_TI_ARGS (name));
3742 else if (TREE_CODE (name) == TYPE_DECL)
3743 name = DECL_NAME (name);
3745 fullname = name;
3747 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3749 name = TREE_OPERAND (name, 0);
3750 if (DECL_TYPE_TEMPLATE_P (name))
3751 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3752 if (TREE_CODE (name) != IDENTIFIER_NODE)
3754 if (complain & tf_error)
3755 error ("%qD is not a type", name);
3756 return error_mark_node;
3759 if (TREE_CODE (name) == TEMPLATE_DECL)
3761 if (complain & tf_error)
3762 error ("%qD used without template parameters", name);
3763 return error_mark_node;
3765 gcc_assert (identifier_p (name));
3766 gcc_assert (TYPE_P (context));
3768 if (!MAYBE_CLASS_TYPE_P (context))
3770 if (complain & tf_error)
3771 error ("%q#T is not a class", context);
3772 return error_mark_node;
3775 /* When the CONTEXT is a dependent type, NAME could refer to a
3776 dependent base class of CONTEXT. But look inside it anyway
3777 if CONTEXT is a currently open scope, in case it refers to a
3778 member of the current instantiation or a non-dependent base;
3779 lookup will stop when we hit a dependent base. */
3780 if (!dependent_scope_p (context))
3781 /* We should only set WANT_TYPE when we're a nested typename type.
3782 Then we can give better diagnostics if we find a non-type. */
3783 t = lookup_field (context, name, 2, /*want_type=*/true);
3784 else
3785 t = NULL_TREE;
3787 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3788 return build_typename_type (context, name, fullname, tag_type);
3790 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3792 if (!t)
3794 if (complain & tf_error)
3796 if (!COMPLETE_TYPE_P (context))
3797 cxx_incomplete_type_error (NULL_TREE, context);
3798 else
3799 error (want_template ? G_("no class template named %q#T in %q#T")
3800 : G_("no type named %q#T in %q#T"), name, context);
3802 return error_mark_node;
3805 /* Pull out the template from an injected-class-name (or multiple). */
3806 if (want_template)
3807 t = maybe_get_template_decl_from_type_decl (t);
3809 if (TREE_CODE (t) == TREE_LIST)
3811 if (complain & tf_error)
3813 error ("lookup of %qT in %qT is ambiguous", name, context);
3814 print_candidates (t);
3816 return error_mark_node;
3819 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3821 if (complain & tf_error)
3822 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3823 context, name, t);
3824 return error_mark_node;
3826 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3828 if (complain & tf_error)
3829 error ("%<typename %T::%D%> names %q#T, which is not a type",
3830 context, name, t);
3831 return error_mark_node;
3834 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3835 return error_mark_node;
3837 /* If we are currently parsing a template and if T is a typedef accessed
3838 through CONTEXT then we need to remember and check access of T at
3839 template instantiation time. */
3840 add_typedef_to_current_template_for_access_check (t, context, input_location);
3842 if (want_template)
3843 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3844 NULL_TREE, context,
3845 /*entering_scope=*/0,
3846 complain | tf_user);
3848 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3849 t = TREE_TYPE (t);
3851 maybe_record_typedef_use (t);
3853 return t;
3856 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3857 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3858 in which case error_mark_node is returned.
3860 If PARM_LIST is non-NULL, also make sure that the template parameter
3861 list of TEMPLATE_DECL matches.
3863 If COMPLAIN zero, don't complain about any errors that occur. */
3865 tree
3866 make_unbound_class_template (tree context, tree name, tree parm_list,
3867 tsubst_flags_t complain)
3869 tree t;
3870 tree d;
3872 if (TYPE_P (name))
3873 name = TYPE_IDENTIFIER (name);
3874 else if (DECL_P (name))
3875 name = DECL_NAME (name);
3876 gcc_assert (identifier_p (name));
3878 if (!dependent_type_p (context)
3879 || currently_open_class (context))
3881 tree tmpl = NULL_TREE;
3883 if (MAYBE_CLASS_TYPE_P (context))
3884 tmpl = lookup_field (context, name, 0, false);
3886 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3887 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3889 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3891 if (complain & tf_error)
3892 error ("no class template named %q#T in %q#T", name, context);
3893 return error_mark_node;
3896 if (parm_list
3897 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3899 if (complain & tf_error)
3901 error ("template parameters do not match template %qD", tmpl);
3902 inform (DECL_SOURCE_LOCATION (tmpl),
3903 "%qD declared here", tmpl);
3905 return error_mark_node;
3908 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3909 complain))
3910 return error_mark_node;
3912 return tmpl;
3915 /* Build the UNBOUND_CLASS_TEMPLATE. */
3916 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3917 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3918 TREE_TYPE (t) = NULL_TREE;
3919 SET_TYPE_STRUCTURAL_EQUALITY (t);
3921 /* Build the corresponding TEMPLATE_DECL. */
3922 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3923 TYPE_NAME (TREE_TYPE (d)) = d;
3924 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3925 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3926 DECL_ARTIFICIAL (d) = 1;
3927 DECL_TEMPLATE_PARMS (d) = parm_list;
3929 return t;
3934 /* Push the declarations of builtin types into the namespace.
3935 RID_INDEX is the index of the builtin type in the array
3936 RID_POINTERS. NAME is the name used when looking up the builtin
3937 type. TYPE is the _TYPE node for the builtin type. */
3939 void
3940 record_builtin_type (enum rid rid_index,
3941 const char* name,
3942 tree type)
3944 tree rname = NULL_TREE, tname = NULL_TREE;
3945 tree tdecl = NULL_TREE;
3947 if ((int) rid_index < (int) RID_MAX)
3948 rname = ridpointers[(int) rid_index];
3949 if (name)
3950 tname = get_identifier (name);
3952 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3953 eliminated. Built-in types should not be looked up name; their
3954 names are keywords that the parser can recognize. However, there
3955 is code in c-common.c that uses identifier_global_value to look
3956 up built-in types by name. */
3957 if (tname)
3959 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3960 DECL_ARTIFICIAL (tdecl) = 1;
3961 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3963 if (rname)
3965 if (!tdecl)
3967 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3968 DECL_ARTIFICIAL (tdecl) = 1;
3970 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3973 if (!TYPE_NAME (type))
3974 TYPE_NAME (type) = tdecl;
3976 if (tdecl)
3977 debug_hooks->type_decl (tdecl, 0);
3980 /* Push a type into the namespace so that the back ends ignore it. */
3982 static void
3983 record_unknown_type (tree type, const char* name)
3985 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3986 TYPE_DECL, get_identifier (name), type));
3987 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3988 DECL_IGNORED_P (decl) = 1;
3989 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3990 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3991 SET_TYPE_ALIGN (type, 1);
3992 TYPE_USER_ALIGN (type) = 0;
3993 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3996 /* A string for which we should create an IDENTIFIER_NODE at
3997 startup. */
3999 struct predefined_identifier
4001 /* The name of the identifier. */
4002 const char *const name;
4003 /* The place where the IDENTIFIER_NODE should be stored. */
4004 tree *const node;
4005 /* Nonzero if this is the name of a constructor or destructor. */
4006 const int ctor_or_dtor_p;
4009 /* Create all the predefined identifiers. */
4011 static void
4012 initialize_predefined_identifiers (void)
4014 const predefined_identifier *pid;
4016 /* A table of identifiers to create at startup. */
4017 static const predefined_identifier predefined_identifiers[] = {
4018 { "C++", &lang_name_cplusplus, 0 },
4019 { "C", &lang_name_c, 0 },
4020 /* Some of these names have a trailing space so that it is
4021 impossible for them to conflict with names written by users. */
4022 { "__ct ", &ctor_identifier, 1 },
4023 { "__base_ctor ", &base_ctor_identifier, 1 },
4024 { "__comp_ctor ", &complete_ctor_identifier, 1 },
4025 { "__dt ", &dtor_identifier, 1 },
4026 { "__comp_dtor ", &complete_dtor_identifier, 1 },
4027 { "__base_dtor ", &base_dtor_identifier, 1 },
4028 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
4029 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
4030 { "nelts", &nelts_identifier, 0 },
4031 { THIS_NAME, &this_identifier, 0 },
4032 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
4033 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
4034 { "_vptr", &vptr_identifier, 0 },
4035 { "__vtt_parm", &vtt_parm_identifier, 0 },
4036 { "::", &global_scope_name, 0 },
4037 { "std", &std_identifier, 0 },
4038 { "auto", &auto_identifier, 0 },
4039 { "decltype(auto)", &decltype_auto_identifier, 0 },
4040 { NULL, NULL, 0 }
4043 for (pid = predefined_identifiers; pid->name; ++pid)
4045 *pid->node = get_identifier (pid->name);
4046 if (pid->ctor_or_dtor_p)
4047 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
4051 /* Create the predefined scalar types of C,
4052 and some nodes representing standard constants (0, 1, (void *)0).
4053 Initialize the global binding level.
4054 Make definitions for built-in primitive functions. */
4056 void
4057 cxx_init_decl_processing (void)
4059 tree void_ftype;
4060 tree void_ftype_ptr;
4062 /* Create all the identifiers we need. */
4063 initialize_predefined_identifiers ();
4065 /* Create the global variables. */
4066 push_to_top_level ();
4068 current_function_decl = NULL_TREE;
4069 current_binding_level = NULL;
4070 /* Enter the global namespace. */
4071 gcc_assert (global_namespace == NULL_TREE);
4072 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
4073 void_type_node);
4074 DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
4075 debug_hooks->register_main_translation_unit
4076 (DECL_CONTEXT (global_namespace));
4077 TREE_PUBLIC (global_namespace) = 1;
4078 begin_scope (sk_namespace, global_namespace);
4080 if (flag_visibility_ms_compat)
4081 default_visibility = VISIBILITY_HIDDEN;
4083 /* Initially, C. */
4084 current_lang_name = lang_name_c;
4086 /* Create the `std' namespace. */
4087 push_namespace (std_identifier);
4088 std_node = current_namespace;
4089 pop_namespace ();
4091 flag_noexcept_type = (cxx_dialect >= cxx1z);
4093 c_common_nodes_and_builtins ();
4095 integer_two_node = build_int_cst (NULL_TREE, 2);
4097 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4098 truthvalue_type_node = boolean_type_node;
4099 truthvalue_false_node = boolean_false_node;
4100 truthvalue_true_node = boolean_true_node;
4102 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4103 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4104 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4106 #if 0
4107 record_builtin_type (RID_MAX, NULL, string_type_node);
4108 #endif
4110 delta_type_node = ptrdiff_type_node;
4111 vtable_index_type = ptrdiff_type_node;
4113 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4114 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4115 void_ftype_ptr = build_function_type_list (void_type_node,
4116 ptr_type_node, NULL_TREE);
4117 void_ftype_ptr
4118 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4120 /* C++ extensions */
4122 unknown_type_node = make_node (LANG_TYPE);
4123 record_unknown_type (unknown_type_node, "unknown type");
4125 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4126 TREE_TYPE (unknown_type_node) = unknown_type_node;
4128 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4129 result. */
4130 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4131 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4133 init_list_type_node = make_node (LANG_TYPE);
4134 record_unknown_type (init_list_type_node, "init list");
4137 /* Make sure we get a unique function type, so we can give
4138 its pointer type a name. (This wins for gdb.) */
4139 tree vfunc_type = make_node (FUNCTION_TYPE);
4140 TREE_TYPE (vfunc_type) = integer_type_node;
4141 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4142 layout_type (vfunc_type);
4144 vtable_entry_type = build_pointer_type (vfunc_type);
4146 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
4148 vtbl_type_node
4149 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4150 layout_type (vtbl_type_node);
4151 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4152 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4153 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4154 layout_type (vtbl_ptr_type_node);
4155 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4157 push_namespace (get_identifier ("__cxxabiv1"));
4158 abi_node = current_namespace;
4159 pop_namespace ();
4161 global_type_node = make_node (LANG_TYPE);
4162 record_unknown_type (global_type_node, "global type");
4164 any_targ_node = make_node (LANG_TYPE);
4165 record_unknown_type (any_targ_node, "any type");
4167 /* Now, C++. */
4168 current_lang_name = lang_name_cplusplus;
4170 if (aligned_new_threshold > 1
4171 && !pow2p_hwi (aligned_new_threshold))
4173 error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4174 aligned_new_threshold = 1;
4176 if (aligned_new_threshold == -1)
4177 aligned_new_threshold = (cxx_dialect >= cxx1z) ? 1 : 0;
4178 if (aligned_new_threshold == 1)
4179 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4182 tree newattrs, extvisattr;
4183 tree newtype, deltype;
4184 tree ptr_ftype_sizetype;
4185 tree new_eh_spec;
4187 ptr_ftype_sizetype
4188 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4189 if (cxx_dialect == cxx98)
4191 tree bad_alloc_id;
4192 tree bad_alloc_type_node;
4193 tree bad_alloc_decl;
4195 push_namespace (std_identifier);
4196 bad_alloc_id = get_identifier ("bad_alloc");
4197 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4198 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4199 bad_alloc_decl
4200 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4201 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4202 pop_namespace ();
4204 new_eh_spec
4205 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4207 else
4208 new_eh_spec = noexcept_false_spec;
4210 /* Ensure attribs.c is initialized. */
4211 init_attributes ();
4213 /* Ensure constraint.cc is initialized. */
4214 init_constraint_processing ();
4216 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4217 NULL_TREE);
4218 newattrs = tree_cons (get_identifier ("alloc_size"),
4219 build_tree_list (NULL_TREE, integer_one_node),
4220 extvisattr);
4221 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4222 newtype = build_exception_variant (newtype, new_eh_spec);
4223 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4224 deltype = build_exception_variant (deltype, empty_except_spec);
4225 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4226 DECL_IS_MALLOC (opnew) = 1;
4227 DECL_IS_OPERATOR_NEW (opnew) = 1;
4228 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4229 DECL_IS_MALLOC (opnew) = 1;
4230 DECL_IS_OPERATOR_NEW (opnew) = 1;
4231 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4232 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4233 if (flag_sized_deallocation)
4235 /* Also push the sized deallocation variants:
4236 void operator delete(void*, std::size_t) throw();
4237 void operator delete[](void*, std::size_t) throw(); */
4238 tree void_ftype_ptr_size
4239 = build_function_type_list (void_type_node, ptr_type_node,
4240 size_type_node, NULL_TREE);
4241 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4242 extvisattr);
4243 deltype = build_exception_variant (deltype, empty_except_spec);
4244 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4245 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4248 if (aligned_new_threshold)
4250 push_namespace (std_identifier);
4251 tree align_id = get_identifier ("align_val_t");
4252 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4253 NULL_TREE, /*scoped*/true, NULL);
4254 pop_namespace ();
4256 /* operator new (size_t, align_val_t); */
4257 newtype = build_function_type_list (ptr_type_node, size_type_node,
4258 align_type_node, NULL_TREE);
4259 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4260 newtype = build_exception_variant (newtype, new_eh_spec);
4261 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4262 DECL_IS_MALLOC (opnew) = 1;
4263 DECL_IS_OPERATOR_NEW (opnew) = 1;
4264 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4265 DECL_IS_MALLOC (opnew) = 1;
4266 DECL_IS_OPERATOR_NEW (opnew) = 1;
4268 /* operator delete (void *, align_val_t); */
4269 deltype = build_function_type_list (void_type_node, ptr_type_node,
4270 align_type_node, NULL_TREE);
4271 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4272 deltype = build_exception_variant (deltype, empty_except_spec);
4273 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4274 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4276 if (flag_sized_deallocation)
4278 /* operator delete (void *, size_t, align_val_t); */
4279 deltype = build_function_type_list (void_type_node, ptr_type_node,
4280 size_type_node, align_type_node,
4281 NULL_TREE);
4282 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4283 deltype = build_exception_variant (deltype, empty_except_spec);
4284 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4285 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4289 nullptr_type_node = make_node (NULLPTR_TYPE);
4290 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4291 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4292 TYPE_UNSIGNED (nullptr_type_node) = 1;
4293 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4294 if (abi_version_at_least (9))
4295 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4296 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4297 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4298 nullptr_node = build_int_cst (nullptr_type_node, 0);
4301 abort_fndecl
4302 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4303 ECF_NORETURN | ECF_NOTHROW);
4305 /* Perform other language dependent initializations. */
4306 init_class_processing ();
4307 init_rtti_processing ();
4308 init_template_processing ();
4310 if (flag_exceptions)
4311 init_exception_processing ();
4313 if (! supports_one_only ())
4314 flag_weak = 0;
4316 make_fname_decl = cp_make_fname_decl;
4317 start_fname_decls ();
4319 /* Show we use EH for cleanups. */
4320 if (flag_exceptions)
4321 using_eh_for_cleanups ();
4324 /* Generate an initializer for a function naming variable from
4325 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4326 filled in with the type of the init. */
4328 tree
4329 cp_fname_init (const char* name, tree *type_p)
4331 tree domain = NULL_TREE;
4332 tree type;
4333 tree init = NULL_TREE;
4334 size_t length = 0;
4336 if (name)
4338 length = strlen (name);
4339 domain = build_index_type (size_int (length));
4340 init = build_string (length + 1, name);
4343 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4344 type = build_cplus_array_type (type, domain);
4346 *type_p = type;
4348 if (init)
4349 TREE_TYPE (init) = type;
4350 else
4351 init = error_mark_node;
4353 return init;
4356 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4357 the decl, LOC is the location to give the decl, NAME is the
4358 initialization string and TYPE_DEP indicates whether NAME depended
4359 on the type of the function. We make use of that to detect
4360 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4361 at the point of first use, so we mustn't push the decl now. */
4363 static tree
4364 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4366 const char *const name = (type_dep && processing_template_decl
4367 ? NULL : fname_as_string (type_dep));
4368 tree type;
4369 tree init = cp_fname_init (name, &type);
4370 tree decl = build_decl (loc, VAR_DECL, id, type);
4372 if (name)
4373 free (CONST_CAST (char *, name));
4375 /* As we're using pushdecl_with_scope, we must set the context. */
4376 DECL_CONTEXT (decl) = current_function_decl;
4378 TREE_STATIC (decl) = 1;
4379 TREE_READONLY (decl) = 1;
4380 DECL_ARTIFICIAL (decl) = 1;
4382 TREE_USED (decl) = 1;
4384 if (current_function_decl)
4386 cp_binding_level *b = current_binding_level;
4387 if (b->kind == sk_function_parms)
4388 return error_mark_node;
4389 while (b->level_chain->kind != sk_function_parms)
4390 b = b->level_chain;
4391 pushdecl_with_scope (decl, b, /*is_friend=*/false);
4392 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4393 LOOKUP_ONLYCONVERTING);
4395 else
4397 DECL_THIS_STATIC (decl) = true;
4398 pushdecl_top_level_and_finish (decl, init);
4401 return decl;
4404 static tree
4405 builtin_function_1 (tree decl, tree context, bool is_global)
4407 tree id = DECL_NAME (decl);
4408 const char *name = IDENTIFIER_POINTER (id);
4410 retrofit_lang_decl (decl);
4412 DECL_ARTIFICIAL (decl) = 1;
4413 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
4414 SET_DECL_LANGUAGE (decl, lang_c);
4415 /* Runtime library routines are, by definition, available in an
4416 external shared object. */
4417 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4418 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4420 DECL_CONTEXT (decl) = context;
4422 if (is_global)
4423 pushdecl_top_level (decl);
4424 else
4425 pushdecl (decl);
4427 /* A function in the user's namespace should have an explicit
4428 declaration before it is used. Mark the built-in function as
4429 anticipated but not actually declared. */
4430 if (name[0] != '_' || name[1] != '_')
4431 DECL_ANTICIPATED (decl) = 1;
4432 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4434 size_t len = strlen (name);
4436 /* Treat __*_chk fortification functions as anticipated as well,
4437 unless they are __builtin_*. */
4438 if (len > strlen ("___chk")
4439 && memcmp (name + len - strlen ("_chk"),
4440 "_chk", strlen ("_chk") + 1) == 0)
4441 DECL_ANTICIPATED (decl) = 1;
4444 return decl;
4447 tree
4448 cxx_builtin_function (tree decl)
4450 tree id = DECL_NAME (decl);
4451 const char *name = IDENTIFIER_POINTER (id);
4452 /* All builtins that don't begin with an '_' should additionally
4453 go in the 'std' namespace. */
4454 if (name[0] != '_')
4456 tree decl2 = copy_node(decl);
4457 push_namespace (std_identifier);
4458 builtin_function_1 (decl2, std_node, false);
4459 pop_namespace ();
4462 return builtin_function_1 (decl, NULL_TREE, false);
4465 /* Like cxx_builtin_function, but guarantee the function is added to the global
4466 scope. This is to allow function specific options to add new machine
4467 dependent builtins when the target ISA changes via attribute((target(...)))
4468 which saves space on program startup if the program does not use non-generic
4469 ISAs. */
4471 tree
4472 cxx_builtin_function_ext_scope (tree decl)
4475 tree id = DECL_NAME (decl);
4476 const char *name = IDENTIFIER_POINTER (id);
4477 /* All builtins that don't begin with an '_' should additionally
4478 go in the 'std' namespace. */
4479 if (name[0] != '_')
4481 tree decl2 = copy_node(decl);
4482 push_namespace (std_identifier);
4483 builtin_function_1 (decl2, std_node, true);
4484 pop_namespace ();
4487 return builtin_function_1 (decl, NULL_TREE, true);
4490 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4491 function. Not called directly. */
4493 static tree
4494 build_library_fn (tree name, enum tree_code operator_code, tree type,
4495 int ecf_flags)
4497 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4498 DECL_EXTERNAL (fn) = 1;
4499 TREE_PUBLIC (fn) = 1;
4500 DECL_ARTIFICIAL (fn) = 1;
4501 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4502 SET_DECL_LANGUAGE (fn, lang_c);
4503 /* Runtime library routines are, by definition, available in an
4504 external shared object. */
4505 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4506 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4507 set_call_expr_flags (fn, ecf_flags);
4508 return fn;
4511 /* Returns the _DECL for a library function with C++ linkage. */
4513 static tree
4514 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4515 int ecf_flags)
4517 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4518 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4519 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4520 return fn;
4523 /* Like build_library_fn, but takes a C string instead of an
4524 IDENTIFIER_NODE. */
4526 tree
4527 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4529 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4532 /* Like build_cp_library_fn, but takes a C string instead of an
4533 IDENTIFIER_NODE. */
4535 tree
4536 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4538 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4539 ecf_flags);
4542 /* Like build_library_fn, but also pushes the function so that we will
4543 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
4544 may throw exceptions listed in RAISES. */
4546 tree
4547 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4549 tree fn;
4551 if (raises)
4552 type = build_exception_variant (type, raises);
4554 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4555 pushdecl_top_level (fn);
4556 return fn;
4559 /* Like build_cp_library_fn, but also pushes the function so that it
4560 will be found by normal lookup. */
4562 static tree
4563 push_cp_library_fn (enum tree_code operator_code, tree type,
4564 int ecf_flags)
4566 tree fn = build_cp_library_fn (ansi_opname (operator_code),
4567 operator_code,
4568 type, ecf_flags);
4569 pushdecl (fn);
4570 if (flag_tm)
4571 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4572 return fn;
4575 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4576 a FUNCTION_TYPE. */
4578 tree
4579 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4581 tree type = build_function_type (void_type_node, parmtypes);
4582 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4585 /* Like push_library_fn, but also note that this function throws
4586 and does not return. Used for __throw_foo and the like. */
4588 tree
4589 push_throw_library_fn (tree name, tree type)
4591 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4592 return fn;
4595 /* When we call finish_struct for an anonymous union, we create
4596 default copy constructors and such. But, an anonymous union
4597 shouldn't have such things; this function undoes the damage to the
4598 anonymous union type T.
4600 (The reason that we create the synthesized methods is that we don't
4601 distinguish `union { int i; }' from `typedef union { int i; } U'.
4602 The first is an anonymous union; the second is just an ordinary
4603 union type.) */
4605 void
4606 fixup_anonymous_aggr (tree t)
4608 tree *q;
4610 /* Wipe out memory of synthesized methods. */
4611 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4612 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4613 TYPE_HAS_COPY_CTOR (t) = 0;
4614 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4615 TYPE_HAS_COPY_ASSIGN (t) = 0;
4616 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4618 /* Splice the implicitly generated functions out of the TYPE_METHODS
4619 list. */
4620 q = &TYPE_METHODS (t);
4621 while (*q)
4623 if (DECL_ARTIFICIAL (*q))
4624 *q = TREE_CHAIN (*q);
4625 else
4626 q = &DECL_CHAIN (*q);
4629 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
4630 if (TYPE_METHODS (t))
4632 tree decl = TYPE_MAIN_DECL (t);
4634 if (TREE_CODE (t) != UNION_TYPE)
4635 error_at (DECL_SOURCE_LOCATION (decl),
4636 "an anonymous struct cannot have function members");
4637 else
4638 error_at (DECL_SOURCE_LOCATION (decl),
4639 "an anonymous union cannot have function members");
4642 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4643 assignment operators (because they cannot have these methods themselves).
4644 For anonymous unions this is already checked because they are not allowed
4645 in any union, otherwise we have to check it. */
4646 if (TREE_CODE (t) != UNION_TYPE)
4648 tree field, type;
4650 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4651 if (TREE_CODE (field) == FIELD_DECL)
4653 type = TREE_TYPE (field);
4654 if (CLASS_TYPE_P (type))
4656 if (TYPE_NEEDS_CONSTRUCTING (type))
4657 error ("member %q+#D with constructor not allowed "
4658 "in anonymous aggregate", field);
4659 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4660 error ("member %q+#D with destructor not allowed "
4661 "in anonymous aggregate", field);
4662 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4663 error ("member %q+#D with copy assignment operator "
4664 "not allowed in anonymous aggregate", field);
4670 /* Warn for an attribute located at LOCATION that appertains to the
4671 class type CLASS_TYPE that has not been properly placed after its
4672 class-key, in it class-specifier. */
4674 void
4675 warn_misplaced_attr_for_class_type (source_location location,
4676 tree class_type)
4678 gcc_assert (OVERLOAD_TYPE_P (class_type));
4680 if (warning_at (location, OPT_Wattributes,
4681 "attribute ignored in declaration "
4682 "of %q#T", class_type))
4683 inform (location,
4684 "attribute for %q#T must follow the %qs keyword",
4685 class_type, class_key_or_enum_as_string (class_type));
4688 /* Make sure that a declaration with no declarator is well-formed, i.e.
4689 just declares a tagged type or anonymous union.
4691 Returns the type declared; or NULL_TREE if none. */
4693 tree
4694 check_tag_decl (cp_decl_specifier_seq *declspecs,
4695 bool explicit_type_instantiation_p)
4697 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4698 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4699 /* If a class, struct, or enum type is declared by the DECLSPECS
4700 (i.e, if a class-specifier, enum-specifier, or non-typename
4701 elaborated-type-specifier appears in the DECLSPECS),
4702 DECLARED_TYPE is set to the corresponding type. */
4703 tree declared_type = NULL_TREE;
4704 bool error_p = false;
4706 if (declspecs->multiple_types_p)
4707 error ("multiple types in one declaration");
4708 else if (declspecs->redefined_builtin_type)
4710 if (!in_system_header_at (input_location))
4711 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4712 "redeclaration of C++ built-in type %qT",
4713 declspecs->redefined_builtin_type);
4714 return NULL_TREE;
4717 if (declspecs->type
4718 && TYPE_P (declspecs->type)
4719 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4720 && MAYBE_CLASS_TYPE_P (declspecs->type))
4721 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4722 declared_type = declspecs->type;
4723 else if (declspecs->type == error_mark_node)
4724 error_p = true;
4725 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4726 permerror (input_location, "declaration does not declare anything");
4727 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4729 error_at (declspecs->locations[ds_type_spec],
4730 "%<auto%> can only be specified for variables "
4731 "or function declarations");
4732 return error_mark_node;
4734 /* Check for an anonymous union. */
4735 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4736 && TYPE_UNNAMED_P (declared_type))
4738 /* 7/3 In a simple-declaration, the optional init-declarator-list
4739 can be omitted only when declaring a class (clause 9) or
4740 enumeration (7.2), that is, when the decl-specifier-seq contains
4741 either a class-specifier, an elaborated-type-specifier with
4742 a class-key (9.1), or an enum-specifier. In these cases and
4743 whenever a class-specifier or enum-specifier is present in the
4744 decl-specifier-seq, the identifiers in these specifiers are among
4745 the names being declared by the declaration (as class-name,
4746 enum-names, or enumerators, depending on the syntax). In such
4747 cases, and except for the declaration of an unnamed bit-field (9.6),
4748 the decl-specifier-seq shall introduce one or more names into the
4749 program, or shall redeclare a name introduced by a previous
4750 declaration. [Example:
4751 enum { }; // ill-formed
4752 typedef class { }; // ill-formed
4753 --end example] */
4754 if (saw_typedef)
4756 error ("missing type-name in typedef-declaration");
4757 return NULL_TREE;
4759 /* Anonymous unions are objects, so they can have specifiers. */;
4760 SET_ANON_AGGR_TYPE_P (declared_type);
4762 if (TREE_CODE (declared_type) != UNION_TYPE
4763 && !in_system_header_at (input_location))
4764 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4767 else
4769 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4770 error_at (declspecs->locations[ds_inline],
4771 "%<inline%> can only be specified for functions");
4772 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4773 error_at (declspecs->locations[ds_virtual],
4774 "%<virtual%> can only be specified for functions");
4775 else if (saw_friend
4776 && (!current_class_type
4777 || current_scope () != current_class_type))
4778 error_at (declspecs->locations[ds_friend],
4779 "%<friend%> can only be specified inside a class");
4780 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4781 error_at (declspecs->locations[ds_explicit],
4782 "%<explicit%> can only be specified for constructors");
4783 else if (declspecs->storage_class)
4784 error_at (declspecs->locations[ds_storage_class],
4785 "a storage class can only be specified for objects "
4786 "and functions");
4787 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4788 error_at (declspecs->locations[ds_const],
4789 "%<const%> can only be specified for objects and "
4790 "functions");
4791 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4792 error_at (declspecs->locations[ds_volatile],
4793 "%<volatile%> can only be specified for objects and "
4794 "functions");
4795 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4796 error_at (declspecs->locations[ds_restrict],
4797 "%<__restrict%> can only be specified for objects and "
4798 "functions");
4799 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4800 error_at (declspecs->locations[ds_thread],
4801 "%<__thread%> can only be specified for objects "
4802 "and functions");
4803 else if (saw_typedef)
4804 warning_at (declspecs->locations[ds_typedef], 0,
4805 "%<typedef%> was ignored in this declaration");
4806 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4807 error_at (declspecs->locations[ds_constexpr],
4808 "%<constexpr%> cannot be used for type declarations");
4811 if (declspecs->attributes && warn_attributes && declared_type)
4813 location_t loc;
4814 if (!CLASS_TYPE_P (declared_type)
4815 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4816 /* For a non-template class, use the name location. */
4817 loc = location_of (declared_type);
4818 else
4819 /* For a template class (an explicit instantiation), use the
4820 current location. */
4821 loc = input_location;
4823 if (explicit_type_instantiation_p)
4824 /* [dcl.attr.grammar]/4:
4826 No attribute-specifier-seq shall appertain to an explicit
4827 instantiation. */
4829 if (warning_at (loc, OPT_Wattributes,
4830 "attribute ignored in explicit instantiation %q#T",
4831 declared_type))
4832 inform (loc,
4833 "no attribute can be applied to "
4834 "an explicit instantiation");
4836 else
4837 warn_misplaced_attr_for_class_type (loc, declared_type);
4840 return declared_type;
4843 /* Called when a declaration is seen that contains no names to declare.
4844 If its type is a reference to a structure, union or enum inherited
4845 from a containing scope, shadow that tag name for the current scope
4846 with a forward reference.
4847 If its type defines a new named structure or union
4848 or defines an enum, it is valid but we need not do anything here.
4849 Otherwise, it is an error.
4851 C++: may have to grok the declspecs to learn about static,
4852 complain for anonymous unions.
4854 Returns the TYPE declared -- or NULL_TREE if none. */
4856 tree
4857 shadow_tag (cp_decl_specifier_seq *declspecs)
4859 tree t = check_tag_decl (declspecs,
4860 /*explicit_type_instantiation_p=*/false);
4862 if (!t)
4863 return NULL_TREE;
4865 if (maybe_process_partial_specialization (t) == error_mark_node)
4866 return NULL_TREE;
4868 /* This is where the variables in an anonymous union are
4869 declared. An anonymous union declaration looks like:
4870 union { ... } ;
4871 because there is no declarator after the union, the parser
4872 sends that declaration here. */
4873 if (ANON_AGGR_TYPE_P (t))
4875 fixup_anonymous_aggr (t);
4877 if (TYPE_FIELDS (t))
4879 tree decl = grokdeclarator (/*declarator=*/NULL,
4880 declspecs, NORMAL, 0, NULL);
4881 finish_anon_union (decl);
4885 return t;
4888 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4890 tree
4891 groktypename (cp_decl_specifier_seq *type_specifiers,
4892 const cp_declarator *declarator,
4893 bool is_template_arg)
4895 tree attrs;
4896 tree type;
4897 enum decl_context context
4898 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4899 attrs = type_specifiers->attributes;
4900 type_specifiers->attributes = NULL_TREE;
4901 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4902 if (attrs && type != error_mark_node)
4904 if (CLASS_TYPE_P (type))
4905 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4906 "outside of definition", type);
4907 else if (MAYBE_CLASS_TYPE_P (type))
4908 /* A template type parameter or other dependent type. */
4909 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4910 "type %qT without an associated declaration", type);
4911 else
4912 cplus_decl_attributes (&type, attrs, 0);
4914 return type;
4917 /* Process a DECLARATOR for a function-scope variable declaration,
4918 namespace-scope variable declaration, or function declaration.
4919 (Function definitions go through start_function; class member
4920 declarations appearing in the body of the class go through
4921 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4922 If an error occurs, the error_mark_node is returned instead.
4924 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4925 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4926 for an explicitly defaulted function, or SD_DELETED for an explicitly
4927 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4928 implicitly initialized via a default constructor. ATTRIBUTES and
4929 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4931 The scope represented by the context of the returned DECL is pushed
4932 (if it is not the global namespace) and is assigned to
4933 *PUSHED_SCOPE_P. The caller is then responsible for calling
4934 pop_scope on *PUSHED_SCOPE_P if it is set. */
4936 tree
4937 start_decl (const cp_declarator *declarator,
4938 cp_decl_specifier_seq *declspecs,
4939 int initialized,
4940 tree attributes,
4941 tree prefix_attributes,
4942 tree *pushed_scope_p)
4944 tree decl;
4945 tree context;
4946 bool was_public;
4947 int flags;
4948 bool alias;
4950 *pushed_scope_p = NULL_TREE;
4952 /* An object declared as __attribute__((deprecated)) suppresses
4953 warnings of uses of other deprecated items. */
4954 if (lookup_attribute ("deprecated", attributes))
4955 deprecated_state = DEPRECATED_SUPPRESS;
4957 attributes = chainon (attributes, prefix_attributes);
4959 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4960 &attributes);
4962 deprecated_state = DEPRECATED_NORMAL;
4964 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4965 || decl == error_mark_node)
4966 return error_mark_node;
4968 context = CP_DECL_CONTEXT (decl);
4969 if (context != global_namespace)
4970 *pushed_scope_p = push_scope (context);
4972 /* Is it valid for this decl to have an initializer at all?
4973 If not, set INITIALIZED to zero, which will indirectly
4974 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4975 if (initialized
4976 && TREE_CODE (decl) == TYPE_DECL)
4978 error ("typedef %qD is initialized (use decltype instead)", decl);
4979 return error_mark_node;
4982 if (initialized)
4984 if (! toplevel_bindings_p ()
4985 && DECL_EXTERNAL (decl))
4986 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4987 decl);
4988 DECL_EXTERNAL (decl) = 0;
4989 if (toplevel_bindings_p ())
4990 TREE_STATIC (decl) = 1;
4992 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4994 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4995 record_key_method_defined (decl);
4997 /* If this is a typedef that names the class for linkage purposes
4998 (7.1.3p8), apply any attributes directly to the type. */
4999 if (TREE_CODE (decl) == TYPE_DECL
5000 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
5001 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
5002 flags = ATTR_FLAG_TYPE_IN_PLACE;
5003 else
5004 flags = 0;
5006 /* Set attributes here so if duplicate decl, will have proper attributes. */
5007 cplus_decl_attributes (&decl, attributes, flags);
5009 /* Dllimported symbols cannot be defined. Static data members (which
5010 can be initialized in-class and dllimported) go through grokfield,
5011 not here, so we don't need to exclude those decls when checking for
5012 a definition. */
5013 if (initialized && DECL_DLLIMPORT_P (decl))
5015 error ("definition of %q#D is marked %<dllimport%>", decl);
5016 DECL_DLLIMPORT_P (decl) = 0;
5019 /* If #pragma weak was used, mark the decl weak now. */
5020 if (!processing_template_decl)
5021 maybe_apply_pragma_weak (decl);
5023 if (TREE_CODE (decl) == FUNCTION_DECL
5024 && DECL_DECLARED_INLINE_P (decl)
5025 && DECL_UNINLINABLE (decl)
5026 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5027 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5028 "inline function %qD given attribute noinline", decl);
5030 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5032 bool this_tmpl = (processing_template_decl
5033 > template_class_depth (context));
5034 if (VAR_P (decl))
5036 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5037 if (field == NULL_TREE
5038 || !(VAR_P (field) || variable_template_p (field)))
5039 error ("%q+#D is not a static data member of %q#T", decl, context);
5040 else if (variable_template_p (field) && !this_tmpl)
5042 if (DECL_LANG_SPECIFIC (decl)
5043 && DECL_TEMPLATE_SPECIALIZATION (decl))
5044 /* OK, specialization was already checked. */;
5045 else
5047 error_at (DECL_SOURCE_LOCATION (decl),
5048 "non-member-template declaration of %qD", decl);
5049 inform (DECL_SOURCE_LOCATION (field), "does not match "
5050 "member template declaration here");
5051 return error_mark_node;
5054 else
5056 if (variable_template_p (field))
5057 field = DECL_TEMPLATE_RESULT (field);
5059 if (DECL_CONTEXT (field) != context)
5061 if (!same_type_p (DECL_CONTEXT (field), context))
5062 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5063 "to be defined as %<%T::%D%>",
5064 DECL_CONTEXT (field), DECL_NAME (decl),
5065 context, DECL_NAME (decl));
5066 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5068 /* Static data member are tricky; an in-class initialization
5069 still doesn't provide a definition, so the in-class
5070 declaration will have DECL_EXTERNAL set, but will have an
5071 initialization. Thus, duplicate_decls won't warn
5072 about this situation, and so we check here. */
5073 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5074 error ("duplicate initialization of %qD", decl);
5075 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
5076 decl = field;
5077 if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
5078 && !DECL_DECLARED_CONSTEXPR_P (field))
5079 error ("%qD declared %<constexpr%> outside its class", field);
5082 else
5084 tree field = check_classfn (context, decl,
5085 this_tmpl
5086 ? current_template_parms
5087 : NULL_TREE);
5088 if (field && field != error_mark_node
5089 && duplicate_decls (decl, field,
5090 /*newdecl_is_friend=*/false))
5091 decl = field;
5094 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5095 DECL_IN_AGGR_P (decl) = 0;
5096 /* Do not mark DECL as an explicit specialization if it was not
5097 already marked as an instantiation; a declaration should
5098 never be marked as a specialization unless we know what
5099 template is being specialized. */
5100 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5102 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5103 if (TREE_CODE (decl) == FUNCTION_DECL)
5104 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5105 && DECL_DECLARED_INLINE_P (decl));
5106 else
5107 DECL_COMDAT (decl) = false;
5109 /* [temp.expl.spec] An explicit specialization of a static data
5110 member of a template is a definition if the declaration
5111 includes an initializer; otherwise, it is a declaration.
5113 We check for processing_specialization so this only applies
5114 to the new specialization syntax. */
5115 if (!initialized && processing_specialization)
5116 DECL_EXTERNAL (decl) = 1;
5119 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5120 /* Aliases are definitions. */
5121 && !alias)
5122 permerror (input_location, "declaration of %q#D outside of class is not definition",
5123 decl);
5126 was_public = TREE_PUBLIC (decl);
5128 /* Enter this declaration into the symbol table. Don't push the plain
5129 VAR_DECL for a variable template. */
5130 if (!template_parm_scope_p ()
5131 || !VAR_P (decl))
5132 decl = maybe_push_decl (decl);
5134 if (processing_template_decl)
5135 decl = push_template_decl (decl);
5136 if (decl == error_mark_node)
5137 return error_mark_node;
5139 if (VAR_P (decl)
5140 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5141 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5143 /* This is a const variable with implicit 'static'. Set
5144 DECL_THIS_STATIC so we can tell it from variables that are
5145 !TREE_PUBLIC because of the anonymous namespace. */
5146 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5147 DECL_THIS_STATIC (decl) = 1;
5150 if (current_function_decl && VAR_P (decl)
5151 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5153 bool ok = false;
5154 if (CP_DECL_THREAD_LOCAL_P (decl))
5155 error ("%qD declared %<thread_local%> in %<constexpr%> function",
5156 decl);
5157 else if (TREE_STATIC (decl))
5158 error ("%qD declared %<static%> in %<constexpr%> function", decl);
5159 else
5160 ok = true;
5161 if (!ok)
5162 cp_function_chain->invalid_constexpr = true;
5165 if (!processing_template_decl && VAR_P (decl))
5166 start_decl_1 (decl, initialized);
5168 return decl;
5171 /* Process the declaration of a variable DECL. INITIALIZED is true
5172 iff DECL is explicitly initialized. (INITIALIZED is false if the
5173 variable is initialized via an implicitly-called constructor.)
5174 This function must be called for ordinary variables (including, for
5175 example, implicit instantiations of templates), but must not be
5176 called for template declarations. */
5178 void
5179 start_decl_1 (tree decl, bool initialized)
5181 tree type;
5182 bool complete_p;
5183 bool aggregate_definition_p;
5185 gcc_assert (!processing_template_decl);
5187 if (error_operand_p (decl))
5188 return;
5190 gcc_assert (VAR_P (decl));
5192 type = TREE_TYPE (decl);
5193 complete_p = COMPLETE_TYPE_P (type);
5194 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5196 /* If an explicit initializer is present, or if this is a definition
5197 of an aggregate, then we need a complete type at this point.
5198 (Scalars are always complete types, so there is nothing to
5199 check.) This code just sets COMPLETE_P; errors (if necessary)
5200 are issued below. */
5201 if ((initialized || aggregate_definition_p)
5202 && !complete_p
5203 && COMPLETE_TYPE_P (complete_type (type)))
5205 complete_p = true;
5206 /* We will not yet have set TREE_READONLY on DECL if the type
5207 was "const", but incomplete, before this point. But, now, we
5208 have a complete type, so we can try again. */
5209 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5212 if (initialized)
5213 /* Is it valid for this decl to have an initializer at all? */
5215 /* Don't allow initializations for incomplete types except for
5216 arrays which might be completed by the initialization. */
5217 if (complete_p)
5218 ; /* A complete type is ok. */
5219 else if (type_uses_auto (type))
5220 ; /* An auto type is ok. */
5221 else if (TREE_CODE (type) != ARRAY_TYPE)
5223 error ("variable %q#D has initializer but incomplete type", decl);
5224 type = TREE_TYPE (decl) = error_mark_node;
5226 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5228 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5229 error ("elements of array %q#D have incomplete type", decl);
5230 /* else we already gave an error in start_decl. */
5233 else if (aggregate_definition_p && !complete_p)
5235 if (type_uses_auto (type))
5236 gcc_unreachable ();
5237 else
5238 error ("aggregate %q#D has incomplete type and cannot be defined",
5239 decl);
5240 /* Change the type so that assemble_variable will give
5241 DECL an rtl we can live with: (mem (const_int 0)). */
5242 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 static 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::eq_p (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. */
5553 static void
5554 check_for_uninitialized_const_var (tree decl)
5556 tree type = strip_array_types (TREE_TYPE (decl));
5558 /* ``Unless explicitly declared extern, a const object does not have
5559 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5560 7.1.6 */
5561 if (VAR_P (decl)
5562 && TREE_CODE (type) != REFERENCE_TYPE
5563 && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5564 && !DECL_INITIAL (decl))
5566 tree field = default_init_uninitialized_part (type);
5567 if (!field)
5568 return;
5570 if (CP_TYPE_CONST_P (type))
5571 permerror (DECL_SOURCE_LOCATION (decl),
5572 "uninitialized const %qD", decl);
5573 else
5575 error_at (DECL_SOURCE_LOCATION (decl),
5576 "uninitialized variable %qD in %<constexpr%> function",
5577 decl);
5578 cp_function_chain->invalid_constexpr = true;
5581 if (CLASS_TYPE_P (type))
5583 tree defaulted_ctor;
5585 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5586 "%q#T has no user-provided default constructor", type);
5587 defaulted_ctor = in_class_defaulted_default_constructor (type);
5588 if (defaulted_ctor)
5589 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5590 "constructor is not user-provided because it is "
5591 "explicitly defaulted in the class body");
5592 inform (DECL_SOURCE_LOCATION (field),
5593 "and the implicitly-defined constructor does not "
5594 "initialize %q#D", field);
5599 /* Structure holding the current initializer being processed by reshape_init.
5600 CUR is a pointer to the current element being processed, END is a pointer
5601 after the last element present in the initializer. */
5602 struct reshape_iter
5604 constructor_elt *cur;
5605 constructor_elt *end;
5608 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5610 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5611 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5612 initialized. If there are no more such fields, the return value
5613 will be NULL. */
5615 tree
5616 next_initializable_field (tree field)
5618 while (field
5619 && (TREE_CODE (field) != FIELD_DECL
5620 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5621 || (DECL_ARTIFICIAL (field)
5622 && !(cxx_dialect >= cxx1z && DECL_FIELD_IS_BASE (field)))))
5623 field = DECL_CHAIN (field);
5625 return field;
5628 /* Return true for [dcl.init.list] direct-list-initialization from
5629 single element of enumeration with a fixed underlying type. */
5631 bool
5632 is_direct_enum_init (tree type, tree init)
5634 if (cxx_dialect >= cxx1z
5635 && TREE_CODE (type) == ENUMERAL_TYPE
5636 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5637 && TREE_CODE (init) == CONSTRUCTOR
5638 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5639 && CONSTRUCTOR_NELTS (init) == 1)
5640 return true;
5641 return false;
5644 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5645 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5646 INTEGER_CST representing the size of the array minus one (the maximum index),
5647 or NULL_TREE if the array was declared without specifying the size. D is
5648 the iterator within the constructor. */
5650 static tree
5651 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5652 tsubst_flags_t complain)
5654 tree new_init;
5655 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5656 unsigned HOST_WIDE_INT max_index_cst = 0;
5657 unsigned HOST_WIDE_INT index;
5659 /* The initializer for an array is always a CONSTRUCTOR. */
5660 new_init = build_constructor (init_list_type_node, NULL);
5662 if (sized_array_p)
5664 /* Minus 1 is used for zero sized arrays. */
5665 if (integer_all_onesp (max_index))
5666 return new_init;
5668 if (tree_fits_uhwi_p (max_index))
5669 max_index_cst = tree_to_uhwi (max_index);
5670 /* sizetype is sign extended, not zero extended. */
5671 else
5672 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5675 /* Loop until there are no more initializers. */
5676 for (index = 0;
5677 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5678 ++index)
5680 tree elt_init;
5681 constructor_elt *old_cur = d->cur;
5683 check_array_designated_initializer (d->cur, index);
5684 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5685 complain);
5686 if (elt_init == error_mark_node)
5687 return error_mark_node;
5688 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5689 size_int (index), elt_init);
5690 if (!TREE_CONSTANT (elt_init))
5691 TREE_CONSTANT (new_init) = false;
5693 /* This can happen with an invalid initializer (c++/54501). */
5694 if (d->cur == old_cur && !sized_array_p)
5695 break;
5698 return new_init;
5701 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5702 Parameters are the same of reshape_init_r. */
5704 static tree
5705 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5707 tree max_index = NULL_TREE;
5709 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5711 if (TYPE_DOMAIN (type))
5712 max_index = array_type_nelts (type);
5714 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5717 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5718 Parameters are the same of reshape_init_r. */
5720 static tree
5721 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5723 tree max_index = NULL_TREE;
5725 gcc_assert (VECTOR_TYPE_P (type));
5727 if (COMPOUND_LITERAL_P (d->cur->value))
5729 tree value = d->cur->value;
5730 if (!same_type_p (TREE_TYPE (value), type))
5732 if (complain & tf_error)
5733 error ("invalid type %qT as initializer for a vector of type %qT",
5734 TREE_TYPE (d->cur->value), type);
5735 value = error_mark_node;
5737 ++d->cur;
5738 return value;
5741 /* For a vector, we initialize it as an array of the appropriate size. */
5742 if (VECTOR_TYPE_P (type))
5743 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5745 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5748 /* Subroutine of reshape_init_r, processes the initializers for classes
5749 or union. Parameters are the same of reshape_init_r. */
5751 static tree
5752 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5753 tsubst_flags_t complain)
5755 tree field;
5756 tree new_init;
5758 gcc_assert (CLASS_TYPE_P (type));
5760 /* The initializer for a class is always a CONSTRUCTOR. */
5761 new_init = build_constructor (init_list_type_node, NULL);
5762 field = next_initializable_field (TYPE_FIELDS (type));
5764 if (!field)
5766 /* [dcl.init.aggr]
5768 An initializer for an aggregate member that is an
5769 empty class shall have the form of an empty
5770 initializer-list {}. */
5771 if (!first_initializer_p)
5773 if (complain & tf_error)
5774 error ("initializer for %qT must be brace-enclosed", type);
5775 return error_mark_node;
5777 return new_init;
5780 /* Loop through the initializable fields, gathering initializers. */
5781 while (d->cur != d->end)
5783 tree field_init;
5784 constructor_elt *old_cur = d->cur;
5786 /* Handle designated initializers, as an extension. */
5787 if (d->cur->index)
5789 if (d->cur->index == error_mark_node)
5790 return error_mark_node;
5792 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5793 /* We already reshaped this. */
5794 gcc_assert (d->cur->index == field);
5795 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5796 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5797 else
5799 if (complain & tf_error)
5800 error ("%<[%E] =%> used in a GNU-style designated initializer"
5801 " for class %qT", d->cur->index, type);
5802 return error_mark_node;
5805 if (!field || TREE_CODE (field) != FIELD_DECL)
5807 if (complain & tf_error)
5808 error ("%qT has no non-static data member named %qD", type,
5809 d->cur->index);
5810 return error_mark_node;
5814 /* If we processed all the member of the class, we are done. */
5815 if (!field)
5816 break;
5818 field_init = reshape_init_r (TREE_TYPE (field), d,
5819 /*first_initializer_p=*/false, complain);
5820 if (field_init == error_mark_node)
5821 return error_mark_node;
5823 if (d->cur == old_cur && d->cur->index)
5825 /* This can happen with an invalid initializer for a flexible
5826 array member (c++/54441). */
5827 if (complain & tf_error)
5828 error ("invalid initializer for %q#D", field);
5829 return error_mark_node;
5832 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5834 /* [dcl.init.aggr]
5836 When a union is initialized with a brace-enclosed
5837 initializer, the braces shall only contain an
5838 initializer for the first member of the union. */
5839 if (TREE_CODE (type) == UNION_TYPE)
5840 break;
5842 field = next_initializable_field (DECL_CHAIN (field));
5845 return new_init;
5848 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5849 designators are not valid; either complain or return true to indicate
5850 that reshape_init_r should return error_mark_node. */
5852 static bool
5853 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5855 if (d->cur->index)
5857 if (complain & tf_error)
5858 error ("C99 designator %qE outside aggregate initializer",
5859 d->cur->index);
5860 else
5861 return true;
5863 return false;
5866 /* Subroutine of reshape_init, which processes a single initializer (part of
5867 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5868 iterator within the CONSTRUCTOR which points to the initializer to process.
5869 FIRST_INITIALIZER_P is true if this is the first initializer of the
5870 outermost CONSTRUCTOR node. */
5872 static tree
5873 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5874 tsubst_flags_t complain)
5876 tree init = d->cur->value;
5878 if (error_operand_p (init))
5879 return error_mark_node;
5881 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5882 && has_designator_problem (d, complain))
5883 return error_mark_node;
5885 if (TREE_CODE (type) == COMPLEX_TYPE)
5887 /* A complex type can be initialized from one or two initializers,
5888 but braces are not elided. */
5889 d->cur++;
5890 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5892 if (CONSTRUCTOR_NELTS (init) > 2)
5894 if (complain & tf_error)
5895 error ("too many initializers for %qT", type);
5896 else
5897 return error_mark_node;
5900 else if (first_initializer_p && d->cur != d->end)
5902 vec<constructor_elt, va_gc> *v = 0;
5903 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5904 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5905 if (has_designator_problem (d, complain))
5906 return error_mark_node;
5907 d->cur++;
5908 init = build_constructor (init_list_type_node, v);
5910 return init;
5913 /* A non-aggregate type is always initialized with a single
5914 initializer. */
5915 if (!CP_AGGREGATE_TYPE_P (type))
5917 /* It is invalid to initialize a non-aggregate type with a
5918 brace-enclosed initializer before C++0x.
5919 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5920 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5921 a CONSTRUCTOR (with a record type). */
5922 if (TREE_CODE (init) == CONSTRUCTOR
5923 /* Don't complain about a capture-init. */
5924 && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5925 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5927 if (SCALAR_TYPE_P (type))
5929 if (cxx_dialect < cxx11
5930 /* Isn't value-initialization. */
5931 || CONSTRUCTOR_NELTS (init) > 0)
5933 if (complain & tf_error)
5934 error ("braces around scalar initializer for type %qT",
5935 type);
5936 init = error_mark_node;
5939 else
5940 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5943 d->cur++;
5944 return init;
5947 /* "If T is a class type and the initializer list has a single element of
5948 type cv U, where U is T or a class derived from T, the object is
5949 initialized from that element." Even if T is an aggregate. */
5950 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5951 && first_initializer_p
5952 && d->end - d->cur == 1
5953 && reference_related_p (type, TREE_TYPE (init)))
5955 d->cur++;
5956 return init;
5959 /* [dcl.init.aggr]
5961 All implicit type conversions (clause _conv_) are considered when
5962 initializing the aggregate member with an initializer from an
5963 initializer-list. If the initializer can initialize a member,
5964 the member is initialized. Otherwise, if the member is itself a
5965 non-empty subaggregate, brace elision is assumed and the
5966 initializer is considered for the initialization of the first
5967 member of the subaggregate. */
5968 if (TREE_CODE (init) != CONSTRUCTOR
5969 /* But don't try this for the first initializer, since that would be
5970 looking through the outermost braces; A a2 = { a1 }; is not a
5971 valid aggregate initialization. */
5972 && !first_initializer_p
5973 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5974 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5975 complain)))
5977 d->cur++;
5978 return init;
5981 /* [dcl.init.string]
5983 A char array (whether plain char, signed char, or unsigned char)
5984 can be initialized by a string-literal (optionally enclosed in
5985 braces); a wchar_t array can be initialized by a wide
5986 string-literal (optionally enclosed in braces). */
5987 if (TREE_CODE (type) == ARRAY_TYPE
5988 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5990 tree str_init = init;
5992 /* Strip one level of braces if and only if they enclose a single
5993 element (as allowed by [dcl.init.string]). */
5994 if (!first_initializer_p
5995 && TREE_CODE (str_init) == CONSTRUCTOR
5996 && CONSTRUCTOR_NELTS (str_init) == 1)
5998 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
6001 /* If it's a string literal, then it's the initializer for the array
6002 as a whole. Otherwise, continue with normal initialization for
6003 array types (one value per array element). */
6004 if (TREE_CODE (str_init) == STRING_CST)
6006 if (has_designator_problem (d, complain))
6007 return error_mark_node;
6008 d->cur++;
6009 return str_init;
6013 /* The following cases are about aggregates. If we are not within a full
6014 initializer already, and there is not a CONSTRUCTOR, it means that there
6015 is a missing set of braces (that is, we are processing the case for
6016 which reshape_init exists). */
6017 if (!first_initializer_p)
6019 if (TREE_CODE (init) == CONSTRUCTOR)
6021 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
6022 /* There is no need to reshape pointer-to-member function
6023 initializers, as they are always constructed correctly
6024 by the front end. */
6026 else if (COMPOUND_LITERAL_P (init))
6027 /* For a nested compound literal, there is no need to reshape since
6028 brace elision is not allowed. Even if we decided to allow it,
6029 we should add a call to reshape_init in finish_compound_literal,
6030 before calling digest_init, so changing this code would still
6031 not be necessary. */
6032 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
6033 else
6035 ++d->cur;
6036 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6037 return reshape_init (type, init, complain);
6041 if (complain & tf_warning)
6042 warning (OPT_Wmissing_braces,
6043 "missing braces around initializer for %qT",
6044 type);
6047 /* Dispatch to specialized routines. */
6048 if (CLASS_TYPE_P (type))
6049 return reshape_init_class (type, d, first_initializer_p, complain);
6050 else if (TREE_CODE (type) == ARRAY_TYPE)
6051 return reshape_init_array (type, d, complain);
6052 else if (VECTOR_TYPE_P (type))
6053 return reshape_init_vector (type, d, complain);
6054 else
6055 gcc_unreachable();
6058 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6059 brace-enclosed aggregate initializer.
6061 INIT is the CONSTRUCTOR containing the list of initializers describing
6062 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6063 It may not presently match the shape of the TYPE; for example:
6065 struct S { int a; int b; };
6066 struct S a[] = { 1, 2, 3, 4 };
6068 Here INIT will hold a vector of four elements, rather than a
6069 vector of two elements, each itself a vector of two elements. This
6070 routine transforms INIT from the former form into the latter. The
6071 revised CONSTRUCTOR node is returned. */
6073 tree
6074 reshape_init (tree type, tree init, tsubst_flags_t complain)
6076 vec<constructor_elt, va_gc> *v;
6077 reshape_iter d;
6078 tree new_init;
6080 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6082 v = CONSTRUCTOR_ELTS (init);
6084 /* An empty constructor does not need reshaping, and it is always a valid
6085 initializer. */
6086 if (vec_safe_is_empty (v))
6087 return init;
6089 /* Handle [dcl.init.list] direct-list-initialization from
6090 single element of enumeration with a fixed underlying type. */
6091 if (is_direct_enum_init (type, init))
6093 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6094 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6095 return cp_build_c_cast (type, elt, tf_warning_or_error);
6096 else
6097 return error_mark_node;
6100 /* Recurse on this CONSTRUCTOR. */
6101 d.cur = &(*v)[0];
6102 d.end = d.cur + v->length ();
6104 new_init = reshape_init_r (type, &d, true, complain);
6105 if (new_init == error_mark_node)
6106 return error_mark_node;
6108 /* Make sure all the element of the constructor were used. Otherwise,
6109 issue an error about exceeding initializers. */
6110 if (d.cur != d.end)
6112 if (complain & tf_error)
6113 error ("too many initializers for %qT", type);
6114 else
6115 return error_mark_node;
6118 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6119 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6120 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6122 return new_init;
6125 /* Verify array initializer. Returns true if errors have been reported. */
6127 bool
6128 check_array_initializer (tree decl, tree type, tree init)
6130 tree element_type = TREE_TYPE (type);
6132 /* The array type itself need not be complete, because the
6133 initializer may tell us how many elements are in the array.
6134 But, the elements of the array must be complete. */
6135 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6137 if (decl)
6138 error_at (DECL_SOURCE_LOCATION (decl),
6139 "elements of array %q#D have incomplete type", decl);
6140 else
6141 error ("elements of array %q#T have incomplete type", type);
6142 return true;
6144 /* A compound literal can't have variable size. */
6145 if (init && !decl
6146 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6147 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6149 error ("variable-sized compound literal");
6150 return true;
6152 return false;
6155 /* Subroutine of check_initializer; args are passed down from that function.
6156 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6158 static tree
6159 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6162 gcc_assert (stmts_are_full_exprs_p ());
6163 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6166 /* Verify INIT (the initializer for DECL), and record the
6167 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6168 grok_reference_init.
6170 If the return value is non-NULL, it is an expression that must be
6171 evaluated dynamically to initialize DECL. */
6173 static tree
6174 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6176 tree type = TREE_TYPE (decl);
6177 tree init_code = NULL;
6178 tree core_type;
6180 /* Things that are going to be initialized need to have complete
6181 type. */
6182 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6184 if (DECL_HAS_VALUE_EXPR_P (decl))
6186 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6187 it doesn't have storage to be initialized. */
6188 gcc_assert (init == NULL_TREE);
6189 return NULL_TREE;
6192 if (type == error_mark_node)
6193 /* We will have already complained. */
6194 return NULL_TREE;
6196 if (TREE_CODE (type) == ARRAY_TYPE)
6198 if (check_array_initializer (decl, type, init))
6199 return NULL_TREE;
6201 else if (!COMPLETE_TYPE_P (type))
6203 error_at (DECL_SOURCE_LOCATION (decl),
6204 "%q#D has incomplete type", decl);
6205 TREE_TYPE (decl) = error_mark_node;
6206 return NULL_TREE;
6208 else
6209 /* There is no way to make a variable-sized class type in GNU C++. */
6210 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6212 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6214 int init_len = CONSTRUCTOR_NELTS (init);
6215 if (SCALAR_TYPE_P (type))
6217 if (init_len == 0)
6219 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6220 init = build_zero_init (type, NULL_TREE, false);
6222 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6224 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6225 "scalar object %qD requires one element in "
6226 "initializer", decl);
6227 TREE_TYPE (decl) = error_mark_node;
6228 return NULL_TREE;
6233 if (TREE_CODE (decl) == CONST_DECL)
6235 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
6237 DECL_INITIAL (decl) = init;
6239 gcc_assert (init != NULL_TREE);
6240 init = NULL_TREE;
6242 else if (!init && DECL_REALLY_EXTERN (decl))
6244 else if (init || type_build_ctor_call (type)
6245 || TREE_CODE (type) == REFERENCE_TYPE)
6247 if (TREE_CODE (type) == REFERENCE_TYPE)
6249 init = grok_reference_init (decl, type, init, flags);
6250 flags |= LOOKUP_ALREADY_DIGESTED;
6252 else if (!init)
6253 check_for_uninitialized_const_var (decl);
6254 /* Do not reshape constructors of vectors (they don't need to be
6255 reshaped. */
6256 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6258 if (is_std_init_list (type))
6260 init = perform_implicit_conversion (type, init,
6261 tf_warning_or_error);
6262 flags |= LOOKUP_ALREADY_DIGESTED;
6264 else if (TYPE_NON_AGGREGATE_CLASS (type))
6266 /* Don't reshape if the class has constructors. */
6267 if (cxx_dialect == cxx98)
6268 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6269 "in C++98 %qD must be initialized by "
6270 "constructor, not by %<{...}%>",
6271 decl);
6273 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6275 error ("opaque vector types cannot be initialized");
6276 init = error_mark_node;
6278 else
6280 init = reshape_init (type, init, tf_warning_or_error);
6281 flags |= LOOKUP_NO_NARROWING;
6284 else if (TREE_CODE (init) == TREE_LIST
6285 && TREE_TYPE (init) != unknown_type_node
6286 && !MAYBE_CLASS_TYPE_P (type))
6288 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6290 /* We get here with code like `int a (2);' */
6291 init = build_x_compound_expr_from_list (init, ELK_INIT,
6292 tf_warning_or_error);
6295 /* If DECL has an array type without a specific bound, deduce the
6296 array size from the initializer. */
6297 maybe_deduce_size_from_array_init (decl, init);
6298 type = TREE_TYPE (decl);
6299 if (type == error_mark_node)
6300 return NULL_TREE;
6302 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6303 && !(flags & LOOKUP_ALREADY_DIGESTED)
6304 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6305 && CP_AGGREGATE_TYPE_P (type)
6306 && (CLASS_TYPE_P (type)
6307 || !TYPE_NEEDS_CONSTRUCTING (type)
6308 || type_has_extended_temps (type))))
6309 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6311 init_code = build_aggr_init_full_exprs (decl, init, flags);
6313 /* A constructor call is a non-trivial initializer even if
6314 it isn't explicitly written. */
6315 if (TREE_SIDE_EFFECTS (init_code))
6316 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6318 /* If this is a constexpr initializer, expand_default_init will
6319 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6320 case, pull the initializer back out and pass it down into
6321 store_init_value. */
6322 while (TREE_CODE (init_code) == EXPR_STMT
6323 || TREE_CODE (init_code) == CONVERT_EXPR)
6324 init_code = TREE_OPERAND (init_code, 0);
6325 if (TREE_CODE (init_code) == INIT_EXPR)
6327 init = TREE_OPERAND (init_code, 1);
6328 init_code = NULL_TREE;
6329 /* Don't call digest_init; it's unnecessary and will complain
6330 about aggregate initialization of non-aggregate classes. */
6331 flags |= LOOKUP_ALREADY_DIGESTED;
6333 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6335 /* Declared constexpr, but no suitable initializer; massage
6336 init appropriately so we can pass it into store_init_value
6337 for the error. */
6338 if (CLASS_TYPE_P (type)
6339 && (!init || TREE_CODE (init) == TREE_LIST))
6341 init = build_functional_cast (type, init, tf_none);
6342 if (TREE_CODE (init) == TARGET_EXPR)
6343 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6345 init_code = NULL_TREE;
6347 else
6348 init = NULL_TREE;
6351 if (init && TREE_CODE (init) != TREE_VEC)
6353 /* In aggregate initialization of a variable, each element
6354 initialization is a full-expression because there is no
6355 enclosing expression. */
6356 gcc_assert (stmts_are_full_exprs_p ());
6358 init_code = store_init_value (decl, init, cleanups, flags);
6360 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6361 && DECL_INITIAL (decl)
6362 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6363 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6364 warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl),
6365 DECL_SOURCE_LOCATION (decl)),
6366 0, "array %qD initialized by parenthesized "
6367 "string literal %qE",
6368 decl, DECL_INITIAL (decl));
6369 init = NULL;
6372 else
6374 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6375 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6376 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6377 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6378 /*complain=*/true);
6380 check_for_uninitialized_const_var (decl);
6383 if (init && init != error_mark_node)
6384 init_code = build2 (INIT_EXPR, type, decl, init);
6386 if (init_code)
6388 /* We might have set these in cp_finish_decl. */
6389 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6390 TREE_CONSTANT (decl) = false;
6393 if (init_code
6394 && (DECL_IN_AGGR_P (decl) && !DECL_VAR_DECLARED_INLINE_P (decl)))
6396 static int explained = 0;
6398 if (cxx_dialect < cxx11)
6399 error ("initializer invalid for static member with constructor");
6400 else if (cxx_dialect < cxx1z)
6401 error ("non-constant in-class initialization invalid for static "
6402 "member %qD", decl);
6403 else
6404 error ("non-constant in-class initialization invalid for non-inline "
6405 "static member %qD", decl);
6406 if (!explained)
6408 inform (input_location,
6409 "(an out of class initialization is required)");
6410 explained = 1;
6412 return NULL_TREE;
6415 return init_code;
6418 /* If DECL is not a local variable, give it RTL. */
6420 static void
6421 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6423 int toplev = toplevel_bindings_p ();
6424 int defer_p;
6426 /* Set the DECL_ASSEMBLER_NAME for the object. */
6427 if (asmspec)
6429 /* The `register' keyword, when used together with an
6430 asm-specification, indicates that the variable should be
6431 placed in a particular register. */
6432 if (VAR_P (decl) && DECL_REGISTER (decl))
6434 set_user_assembler_name (decl, asmspec);
6435 DECL_HARD_REGISTER (decl) = 1;
6437 else
6439 if (TREE_CODE (decl) == FUNCTION_DECL
6440 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6441 set_builtin_user_assembler_name (decl, asmspec);
6442 set_user_assembler_name (decl, asmspec);
6446 /* Handle non-variables up front. */
6447 if (!VAR_P (decl))
6449 rest_of_decl_compilation (decl, toplev, at_eof);
6450 return;
6453 /* If we see a class member here, it should be a static data
6454 member. */
6455 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6457 gcc_assert (TREE_STATIC (decl));
6458 /* An in-class declaration of a static data member should be
6459 external; it is only a declaration, and not a definition. */
6460 if (init == NULL_TREE)
6461 gcc_assert (DECL_EXTERNAL (decl)
6462 || !TREE_PUBLIC (decl)
6463 || DECL_INLINE_VAR_P (decl));
6466 /* We don't create any RTL for local variables. */
6467 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6468 return;
6470 /* We defer emission of local statics until the corresponding
6471 DECL_EXPR is expanded. But with constexpr its function might never
6472 be expanded, so go ahead and tell cgraph about the variable now. */
6473 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6474 && !var_in_maybe_constexpr_fn (decl))
6475 || DECL_VIRTUAL_P (decl));
6477 /* Defer template instantiations. */
6478 if (DECL_LANG_SPECIFIC (decl)
6479 && DECL_IMPLICIT_INSTANTIATION (decl))
6480 defer_p = 1;
6482 /* If we're not deferring, go ahead and assemble the variable. */
6483 if (!defer_p)
6484 rest_of_decl_compilation (decl, toplev, at_eof);
6487 /* walk_tree helper for wrap_temporary_cleanups, below. */
6489 static tree
6490 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6492 /* Stop at types or full-expression boundaries. */
6493 if (TYPE_P (*stmt_p)
6494 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6496 *walk_subtrees = 0;
6497 return NULL_TREE;
6500 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6502 tree guard = (tree)data;
6503 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6505 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6506 /* Tell honor_protect_cleanup_actions to handle this as a separate
6507 cleanup. */
6508 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6510 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6513 return NULL_TREE;
6516 /* We're initializing a local variable which has a cleanup GUARD. If there
6517 are any temporaries used in the initializer INIT of this variable, we
6518 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6519 variable will be cleaned up properly if one of them throws.
6521 Unfortunately, there's no way to express this properly in terms of
6522 nesting, as the regions for the temporaries overlap the region for the
6523 variable itself; if there are two temporaries, the variable needs to be
6524 the first thing destroyed if either of them throws. However, we only
6525 want to run the variable's cleanup if it actually got constructed. So
6526 we need to guard the temporary cleanups with the variable's cleanup if
6527 they are run on the normal path, but not if they are run on the
6528 exceptional path. We implement this by telling
6529 honor_protect_cleanup_actions to strip the variable cleanup from the
6530 exceptional path. */
6532 static void
6533 wrap_temporary_cleanups (tree init, tree guard)
6535 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6538 /* Generate code to initialize DECL (a local variable). */
6540 static void
6541 initialize_local_var (tree decl, tree init)
6543 tree type = TREE_TYPE (decl);
6544 tree cleanup;
6545 int already_used;
6547 gcc_assert (VAR_P (decl)
6548 || TREE_CODE (decl) == RESULT_DECL);
6549 gcc_assert (!TREE_STATIC (decl));
6551 if (DECL_SIZE (decl) == NULL_TREE)
6553 /* If we used it already as memory, it must stay in memory. */
6554 DECL_INITIAL (decl) = NULL_TREE;
6555 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6556 return;
6559 if (type == error_mark_node)
6560 return;
6562 /* Compute and store the initial value. */
6563 already_used = TREE_USED (decl) || TREE_USED (type);
6564 if (TREE_USED (type))
6565 DECL_READ_P (decl) = 1;
6567 /* Generate a cleanup, if necessary. */
6568 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6570 /* Perform the initialization. */
6571 if (init)
6573 tree rinit = (TREE_CODE (init) == INIT_EXPR
6574 ? TREE_OPERAND (init, 1) : NULL_TREE);
6575 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6577 /* Stick simple initializers in DECL_INITIAL so that
6578 -Wno-init-self works (c++/34772). */
6579 gcc_assert (TREE_OPERAND (init, 0) == decl);
6580 DECL_INITIAL (decl) = rinit;
6582 if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6584 STRIP_NOPS (rinit);
6585 if (rinit == decl)
6586 warning_at (DECL_SOURCE_LOCATION (decl),
6587 OPT_Winit_self,
6588 "reference %qD is initialized with itself", decl);
6591 else
6593 int saved_stmts_are_full_exprs_p;
6595 /* If we're only initializing a single object, guard the
6596 destructors of any temporaries used in its initializer with
6597 its destructor. This isn't right for arrays because each
6598 element initialization is a full-expression. */
6599 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6600 wrap_temporary_cleanups (init, cleanup);
6602 gcc_assert (building_stmt_list_p ());
6603 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6604 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6605 finish_expr_stmt (init);
6606 current_stmt_tree ()->stmts_are_full_exprs_p =
6607 saved_stmts_are_full_exprs_p;
6611 /* Set this to 0 so we can tell whether an aggregate which was
6612 initialized was ever used. Don't do this if it has a
6613 destructor, so we don't complain about the 'resource
6614 allocation is initialization' idiom. Now set
6615 attribute((unused)) on types so decls of that type will be
6616 marked used. (see TREE_USED, above.) */
6617 if (TYPE_NEEDS_CONSTRUCTING (type)
6618 && ! already_used
6619 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6620 && DECL_NAME (decl))
6621 TREE_USED (decl) = 0;
6622 else if (already_used)
6623 TREE_USED (decl) = 1;
6625 if (cleanup)
6626 finish_decl_cleanup (decl, cleanup);
6629 /* DECL is a VAR_DECL for a compiler-generated variable with static
6630 storage duration (like a virtual table) whose initializer is a
6631 compile-time constant. Initialize the variable and provide it to the
6632 back end. */
6634 void
6635 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6637 tree init;
6638 gcc_assert (DECL_ARTIFICIAL (decl));
6639 init = build_constructor (TREE_TYPE (decl), v);
6640 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6641 DECL_INITIAL (decl) = init;
6642 DECL_INITIALIZED_P (decl) = 1;
6643 determine_visibility (decl);
6644 layout_var_decl (decl);
6645 maybe_commonize_var (decl);
6646 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6649 /* INIT is the initializer for a variable, as represented by the
6650 parser. Returns true iff INIT is type-dependent. */
6652 static bool
6653 type_dependent_init_p (tree init)
6655 if (TREE_CODE (init) == TREE_LIST)
6656 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6657 return any_type_dependent_elements_p (init);
6658 else if (TREE_CODE (init) == CONSTRUCTOR)
6659 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6661 vec<constructor_elt, va_gc> *elts;
6662 size_t nelts;
6663 size_t i;
6665 elts = CONSTRUCTOR_ELTS (init);
6666 nelts = vec_safe_length (elts);
6667 for (i = 0; i < nelts; ++i)
6668 if (type_dependent_init_p ((*elts)[i].value))
6669 return true;
6671 else
6672 /* It must be a simple expression, e.g., int i = 3; */
6673 return type_dependent_expression_p (init);
6675 return false;
6678 /* INIT is the initializer for a variable, as represented by the
6679 parser. Returns true iff INIT is value-dependent. */
6681 static bool
6682 value_dependent_init_p (tree init)
6684 if (TREE_CODE (init) == TREE_LIST)
6685 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6686 return any_value_dependent_elements_p (init);
6687 else if (TREE_CODE (init) == CONSTRUCTOR)
6688 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6690 vec<constructor_elt, va_gc> *elts;
6691 size_t nelts;
6692 size_t i;
6694 elts = CONSTRUCTOR_ELTS (init);
6695 nelts = vec_safe_length (elts);
6696 for (i = 0; i < nelts; ++i)
6697 if (value_dependent_init_p ((*elts)[i].value))
6698 return true;
6700 else
6701 /* It must be a simple expression, e.g., int i = 3; */
6702 return value_dependent_expression_p (init);
6704 return false;
6707 // Returns true if a DECL is VAR_DECL with the concept specifier.
6708 static inline bool
6709 is_concept_var (tree decl)
6711 return (VAR_P (decl)
6712 // Not all variables have DECL_LANG_SPECIFIC.
6713 && DECL_LANG_SPECIFIC (decl)
6714 && DECL_DECLARED_CONCEPT_P (decl));
6717 /* A helper function to be called via walk_tree. If any label exists
6718 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6720 static tree
6721 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6723 if (TYPE_P (*tp))
6724 *walk_subtrees = 0;
6725 if (TREE_CODE (*tp) == LABEL_DECL)
6726 cfun->has_forced_label_in_static = 1;
6727 return NULL_TREE;
6730 /* Finish processing of a declaration;
6731 install its line number and initial value.
6732 If the length of an array type is not known before,
6733 it must be determined now, from the initial value, or it is an error.
6735 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6736 true, then INIT is an integral constant expression.
6738 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6739 if the (init) syntax was used. */
6741 void
6742 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6743 tree asmspec_tree, int flags)
6745 tree type;
6746 vec<tree, va_gc> *cleanups = NULL;
6747 const char *asmspec = NULL;
6748 int was_readonly = 0;
6749 bool var_definition_p = false;
6750 tree auto_node;
6752 if (decl == error_mark_node)
6753 return;
6754 else if (! decl)
6756 if (init)
6757 error ("assignment (not initialization) in declaration");
6758 return;
6761 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6762 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6763 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6765 type = TREE_TYPE (decl);
6766 if (type == error_mark_node)
6767 return;
6769 /* Warn about register storage specifiers except when in GNU global
6770 or local register variable extension. */
6771 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6773 if (cxx_dialect >= cxx1z)
6774 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6775 "ISO C++1z does not allow %<register%> storage "
6776 "class specifier");
6777 else
6778 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6779 "%<register%> storage class specifier used");
6782 /* If a name was specified, get the string. */
6783 if (at_namespace_scope_p ())
6784 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6785 if (asmspec_tree && asmspec_tree != error_mark_node)
6786 asmspec = TREE_STRING_POINTER (asmspec_tree);
6788 if (current_class_type
6789 && CP_DECL_CONTEXT (decl) == current_class_type
6790 && TYPE_BEING_DEFINED (current_class_type)
6791 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6792 && (DECL_INITIAL (decl) || init))
6793 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6795 if (TREE_CODE (decl) != FUNCTION_DECL
6796 && (auto_node = type_uses_auto (type)))
6798 tree d_init;
6799 if (init == NULL_TREE)
6801 if (DECL_LANG_SPECIFIC (decl)
6802 && DECL_TEMPLATE_INSTANTIATION (decl)
6803 && !DECL_TEMPLATE_INSTANTIATED (decl))
6805 /* init is null because we're deferring instantiating the
6806 initializer until we need it. Well, we need it now. */
6807 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6808 return;
6811 gcc_unreachable ();
6813 d_init = init;
6814 if (TREE_CODE (d_init) == TREE_LIST
6815 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6816 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6817 tf_warning_or_error);
6818 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6819 enum auto_deduction_context adc = adc_variable_type;
6820 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6821 adc = adc_decomp_type;
6822 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6823 tf_warning_or_error, adc);
6824 if (type == error_mark_node)
6825 return;
6826 if (TREE_CODE (type) == FUNCTION_TYPE)
6828 error ("initializer for %<decltype(auto) %D%> has function type "
6829 "(did you forget the %<()%> ?)", decl);
6830 TREE_TYPE (decl) = error_mark_node;
6831 return;
6833 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6836 if (!ensure_literal_type_for_constexpr_object (decl))
6837 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6839 if (VAR_P (decl)
6840 && DECL_CLASS_SCOPE_P (decl)
6841 && DECL_INITIALIZED_IN_CLASS_P (decl))
6842 check_static_variable_definition (decl, type);
6844 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6846 tree clone;
6847 if (init == ridpointers[(int)RID_DELETE])
6849 /* FIXME check this is 1st decl. */
6850 DECL_DELETED_FN (decl) = 1;
6851 DECL_DECLARED_INLINE_P (decl) = 1;
6852 DECL_INITIAL (decl) = error_mark_node;
6853 FOR_EACH_CLONE (clone, decl)
6855 DECL_DELETED_FN (clone) = 1;
6856 DECL_DECLARED_INLINE_P (clone) = 1;
6857 DECL_INITIAL (clone) = error_mark_node;
6859 init = NULL_TREE;
6861 else if (init == ridpointers[(int)RID_DEFAULT])
6863 if (defaultable_fn_check (decl))
6864 DECL_DEFAULTED_FN (decl) = 1;
6865 else
6866 DECL_INITIAL (decl) = NULL_TREE;
6870 if (init && VAR_P (decl))
6872 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6873 /* If DECL is a reference, then we want to know whether init is a
6874 reference constant; init_const_expr_p as passed tells us whether
6875 it's an rvalue constant. */
6876 if (TREE_CODE (type) == REFERENCE_TYPE)
6877 init_const_expr_p = potential_constant_expression (init);
6878 if (init_const_expr_p)
6880 /* Set these flags now for templates. We'll update the flags in
6881 store_init_value for instantiations. */
6882 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6883 if (decl_maybe_constant_var_p (decl)
6884 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
6885 && TREE_CODE (type) != REFERENCE_TYPE)
6886 TREE_CONSTANT (decl) = 1;
6890 if (processing_template_decl)
6892 bool type_dependent_p;
6894 /* Add this declaration to the statement-tree. */
6895 if (at_function_scope_p ())
6896 add_decl_expr (decl);
6898 type_dependent_p = dependent_type_p (type);
6900 if (check_for_bare_parameter_packs (init))
6902 init = NULL_TREE;
6903 DECL_INITIAL (decl) = NULL_TREE;
6906 /* Generally, initializers in templates are expanded when the
6907 template is instantiated. But, if DECL is a variable constant
6908 then it can be used in future constant expressions, so its value
6909 must be available. */
6911 if (!VAR_P (decl) || type_dependent_p)
6912 /* We can't do anything if the decl has dependent type. */;
6913 else if (init
6914 && init_const_expr_p
6915 && TREE_CODE (type) != REFERENCE_TYPE
6916 && decl_maybe_constant_var_p (decl)
6917 && !type_dependent_init_p (init)
6918 && !value_dependent_init_p (init))
6920 /* This variable seems to be a non-dependent constant, so process
6921 its initializer. If check_initializer returns non-null the
6922 initialization wasn't constant after all. */
6923 tree init_code;
6924 cleanups = make_tree_vector ();
6925 init_code = check_initializer (decl, init, flags, &cleanups);
6926 if (init_code == NULL_TREE)
6927 init = NULL_TREE;
6928 release_tree_vector (cleanups);
6930 else if (!init && is_concept_var (decl))
6931 error ("variable concept has no initializer");
6932 else if (!DECL_PRETTY_FUNCTION_P (decl))
6934 /* Deduce array size even if the initializer is dependent. */
6935 maybe_deduce_size_from_array_init (decl, init);
6936 /* And complain about multiple initializers. */
6937 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6938 && !MAYBE_CLASS_TYPE_P (type))
6939 init = build_x_compound_expr_from_list (init, ELK_INIT,
6940 tf_warning_or_error);
6943 if (init)
6944 DECL_INITIAL (decl) = init;
6945 return;
6948 /* Just store non-static data member initializers for later. */
6949 if (init && TREE_CODE (decl) == FIELD_DECL)
6950 DECL_INITIAL (decl) = init;
6952 /* Take care of TYPE_DECLs up front. */
6953 if (TREE_CODE (decl) == TYPE_DECL)
6955 if (type != error_mark_node
6956 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6958 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6959 warning (0, "shadowing previous type declaration of %q#D", decl);
6960 set_identifier_type_value (DECL_NAME (decl), decl);
6963 /* If we have installed this as the canonical typedef for this
6964 type, and that type has not been defined yet, delay emitting
6965 the debug information for it, as we will emit it later. */
6966 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6967 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6968 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6970 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6971 at_eof);
6972 return;
6975 /* A reference will be modified here, as it is initialized. */
6976 if (! DECL_EXTERNAL (decl)
6977 && TREE_READONLY (decl)
6978 && TREE_CODE (type) == REFERENCE_TYPE)
6980 was_readonly = 1;
6981 TREE_READONLY (decl) = 0;
6984 if (VAR_P (decl))
6986 /* If this is a local variable that will need a mangled name,
6987 register it now. We must do this before processing the
6988 initializer for the variable, since the initialization might
6989 require a guard variable, and since the mangled name of the
6990 guard variable will depend on the mangled name of this
6991 variable. */
6992 if (DECL_FUNCTION_SCOPE_P (decl)
6993 && TREE_STATIC (decl)
6994 && !DECL_ARTIFICIAL (decl))
6996 push_local_name (decl);
6997 /* Normally has_forced_label_in_static is set during GIMPLE
6998 lowering, but [cd]tors are never actually compiled directly.
6999 We need to set this early so we can deal with the label
7000 address extension. */
7001 if ((DECL_CONSTRUCTOR_P (current_function_decl)
7002 || DECL_DESTRUCTOR_P (current_function_decl))
7003 && init)
7005 walk_tree (&init, notice_forced_label_r, NULL, NULL);
7006 add_local_decl (cfun, decl);
7008 /* And make sure it's in the symbol table for
7009 c_parse_final_cleanups to find. */
7010 varpool_node::get_create (decl);
7013 /* Convert the initializer to the type of DECL, if we have not
7014 already initialized DECL. */
7015 if (!DECL_INITIALIZED_P (decl)
7016 /* If !DECL_EXTERNAL then DECL is being defined. In the
7017 case of a static data member initialized inside the
7018 class-specifier, there can be an initializer even if DECL
7019 is *not* defined. */
7020 && (!DECL_EXTERNAL (decl) || init))
7022 cleanups = make_tree_vector ();
7023 init = check_initializer (decl, init, flags, &cleanups);
7025 /* Handle:
7027 [dcl.init]
7029 The memory occupied by any object of static storage
7030 duration is zero-initialized at program startup before
7031 any other initialization takes place.
7033 We cannot create an appropriate initializer until after
7034 the type of DECL is finalized. If DECL_INITIAL is set,
7035 then the DECL is statically initialized, and any
7036 necessary zero-initialization has already been performed. */
7037 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7038 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7039 /*nelts=*/NULL_TREE,
7040 /*static_storage_p=*/true);
7041 /* Remember that the initialization for this variable has
7042 taken place. */
7043 DECL_INITIALIZED_P (decl) = 1;
7044 /* This declaration is the definition of this variable,
7045 unless we are initializing a static data member within
7046 the class specifier. */
7047 if (!DECL_EXTERNAL (decl))
7048 var_definition_p = true;
7050 /* If the variable has an array type, lay out the type, even if
7051 there is no initializer. It is valid to index through the
7052 array, and we must get TYPE_ALIGN set correctly on the array
7053 type. */
7054 else if (TREE_CODE (type) == ARRAY_TYPE)
7055 layout_type (type);
7057 if (TREE_STATIC (decl)
7058 && !at_function_scope_p ()
7059 && current_function_decl == NULL)
7060 /* So decl is a global variable or a static member of a
7061 non local class. Record the types it uses
7062 so that we can decide later to emit debug info for them. */
7063 record_types_used_by_current_var_decl (decl);
7066 /* Add this declaration to the statement-tree. This needs to happen
7067 after the call to check_initializer so that the DECL_EXPR for a
7068 reference temp is added before the DECL_EXPR for the reference itself. */
7069 if (DECL_FUNCTION_SCOPE_P (decl))
7071 /* If we're building a variable sized type, and we might be
7072 reachable other than via the top of the current binding
7073 level, then create a new BIND_EXPR so that we deallocate
7074 the object at the right time. */
7075 if (VAR_P (decl)
7076 && DECL_SIZE (decl)
7077 && !TREE_CONSTANT (DECL_SIZE (decl))
7078 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7080 tree bind;
7081 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7082 TREE_SIDE_EFFECTS (bind) = 1;
7083 add_stmt (bind);
7084 BIND_EXPR_BODY (bind) = push_stmt_list ();
7086 add_decl_expr (decl);
7089 /* Let the middle end know about variables and functions -- but not
7090 static data members in uninstantiated class templates. */
7091 if (VAR_OR_FUNCTION_DECL_P (decl))
7093 if (VAR_P (decl))
7095 layout_var_decl (decl);
7096 maybe_commonize_var (decl);
7099 /* This needs to happen after the linkage is set. */
7100 determine_visibility (decl);
7102 if (var_definition_p && TREE_STATIC (decl))
7104 /* If a TREE_READONLY variable needs initialization
7105 at runtime, it is no longer readonly and we need to
7106 avoid MEM_READONLY_P being set on RTL created for it. */
7107 if (init)
7109 if (TREE_READONLY (decl))
7110 TREE_READONLY (decl) = 0;
7111 was_readonly = 0;
7113 else if (was_readonly)
7114 TREE_READONLY (decl) = 1;
7116 /* Likewise if it needs destruction. */
7117 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7118 TREE_READONLY (decl) = 0;
7121 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7123 /* Check for abstractness of the type. Notice that there is no
7124 need to strip array types here since the check for those types
7125 is already done within create_array_type_for_decl. */
7126 abstract_virtuals_error (decl, type);
7128 if (TREE_TYPE (decl) == error_mark_node)
7129 /* No initialization required. */
7131 else if (TREE_CODE (decl) == FUNCTION_DECL)
7133 if (init)
7135 if (init == ridpointers[(int)RID_DEFAULT])
7137 /* An out-of-class default definition is defined at
7138 the point where it is explicitly defaulted. */
7139 if (DECL_DELETED_FN (decl))
7140 maybe_explain_implicit_delete (decl);
7141 else if (DECL_INITIAL (decl) == error_mark_node)
7142 synthesize_method (decl);
7144 else
7145 error ("function %q#D is initialized like a variable", decl);
7147 /* else no initialization required. */
7149 else if (DECL_EXTERNAL (decl)
7150 && ! (DECL_LANG_SPECIFIC (decl)
7151 && DECL_NOT_REALLY_EXTERN (decl)))
7153 if (init)
7154 DECL_INITIAL (decl) = init;
7156 /* A variable definition. */
7157 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7158 /* Initialize the local variable. */
7159 initialize_local_var (decl, init);
7161 /* If a variable is defined, and then a subsequent
7162 definition with external linkage is encountered, we will
7163 get here twice for the same variable. We want to avoid
7164 calling expand_static_init more than once. For variables
7165 that are not static data members, we can call
7166 expand_static_init only when we actually process the
7167 initializer. It is not legal to redeclare a static data
7168 member, so this issue does not arise in that case. */
7169 else if (var_definition_p && TREE_STATIC (decl))
7170 expand_static_init (decl, init);
7173 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7174 reference, insert it in the statement-tree now. */
7175 if (cleanups)
7177 unsigned i; tree t;
7178 FOR_EACH_VEC_ELT (*cleanups, i, t)
7179 push_cleanup (decl, t, false);
7180 release_tree_vector (cleanups);
7183 if (was_readonly)
7184 TREE_READONLY (decl) = 1;
7186 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7189 /* For class TYPE return itself or some its bases that contain
7190 any direct non-static data members. Return error_mark_node if an
7191 error has been diagnosed. */
7193 static tree
7194 find_decomp_class_base (location_t loc, tree type, tree ret)
7196 bool member_seen = false;
7197 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7198 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7199 continue;
7200 else if (ret)
7201 return type;
7202 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7204 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7205 error_at (loc, "cannot decompose class type %qT because it has an "
7206 "anonymous struct member", type);
7207 else
7208 error_at (loc, "cannot decompose class type %qT because it has an "
7209 "anonymous union member", type);
7210 inform (DECL_SOURCE_LOCATION (field), "declared here");
7211 return error_mark_node;
7213 else if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
7215 error_at (loc, "cannot decompose non-public member %qD of %qT",
7216 field, type);
7217 inform (DECL_SOURCE_LOCATION (field),
7218 TREE_PRIVATE (field) ? "declared private here"
7219 : "declared protected here");
7220 return error_mark_node;
7222 else
7223 member_seen = true;
7225 tree base_binfo, binfo;
7226 tree orig_ret = ret;
7227 int i;
7228 if (member_seen)
7229 ret = type;
7230 for (binfo = TYPE_BINFO (type), i = 0;
7231 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7233 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7234 if (t == error_mark_node)
7235 return error_mark_node;
7236 if (t != NULL_TREE)
7238 if (ret == type)
7240 error_at (loc, "cannot decompose class type %qT: both it and "
7241 "its base class %qT have non-static data members",
7242 type, t);
7243 return error_mark_node;
7245 else if (orig_ret != NULL_TREE)
7246 return t;
7247 else if (ret == t)
7248 /* OK, found the same base along another path. We'll complain
7249 in convert_to_base if it's ambiguous. */;
7250 else if (ret != NULL_TREE)
7252 error_at (loc, "cannot decompose class type %qT: its base "
7253 "classes %qT and %qT have non-static data "
7254 "members", type, ret, t);
7255 return error_mark_node;
7257 else
7258 ret = t;
7261 return ret;
7264 /* Return std::tuple_size<TYPE>::value. */
7266 static tree
7267 get_tuple_size (tree type)
7269 tree args = make_tree_vec (1);
7270 TREE_VEC_ELT (args, 0) = type;
7271 tree inst = lookup_template_class (get_identifier ("tuple_size"), args,
7272 /*in_decl*/NULL_TREE,
7273 /*context*/std_node,
7274 /*entering_scope*/false, tf_none);
7275 inst = complete_type (inst);
7276 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7277 return NULL_TREE;
7278 tree val = lookup_qualified_name (inst, get_identifier ("value"),
7279 /*type*/false, /*complain*/false);
7280 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7281 val = maybe_constant_value (val);
7282 if (TREE_CODE (val) == INTEGER_CST)
7283 return val;
7284 else
7285 return error_mark_node;
7288 /* Return std::tuple_element<I,TYPE>::type. */
7290 static tree
7291 get_tuple_element_type (tree type, unsigned i)
7293 tree args = make_tree_vec (2);
7294 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7295 TREE_VEC_ELT (args, 1) = type;
7296 tree inst = lookup_template_class (get_identifier ("tuple_element"), args,
7297 /*in_decl*/NULL_TREE,
7298 /*context*/std_node,
7299 /*entering_scope*/false,
7300 tf_warning_or_error);
7301 return make_typename_type (inst, get_identifier ("type"),
7302 none_type, tf_warning_or_error);
7305 /* Return e.get<i>() or get<i>(e). */
7307 static tree
7308 get_tuple_decomp_init (tree decl, unsigned i)
7310 tree get_id = get_identifier ("get");
7311 tree targs = make_tree_vec (1);
7312 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7314 tree etype = TREE_TYPE (decl);
7315 tree e = convert_from_reference (decl);
7317 /* [The id-expression] e is an lvalue if the type of the entity e is an
7318 lvalue reference and an xvalue otherwise. */
7319 if (TREE_CODE (etype) != REFERENCE_TYPE
7320 || TYPE_REF_IS_RVALUE (etype))
7321 e = move (e);
7323 tree fns = lookup_qualified_name (TREE_TYPE (e), get_id,
7324 /*type*/false, /*complain*/false);
7325 if (fns != error_mark_node)
7327 fns = lookup_template_function (fns, targs);
7328 return build_new_method_call (e, fns, /*args*/NULL,
7329 /*path*/NULL_TREE, LOOKUP_NORMAL,
7330 /*fn_p*/NULL, tf_warning_or_error);
7332 else
7334 vec<tree,va_gc> *args = make_tree_vector_single (e);
7335 fns = lookup_template_function (get_id, targs);
7336 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7337 return finish_call_expr (fns, &args, /*novirt*/false,
7338 /*koenig*/true, tf_warning_or_error);
7342 /* It's impossible to recover the decltype of a tuple decomposition variable
7343 based on the actual type of the variable, so store it in a hash table. */
7344 static GTY(()) hash_map<tree,tree> *decomp_type_table;
7345 static void
7346 store_decomp_type (tree v, tree t)
7348 if (!decomp_type_table)
7349 decomp_type_table = hash_map<tree,tree>::create_ggc (13);
7350 decomp_type_table->put (v, t);
7353 tree
7354 lookup_decomp_type (tree v)
7356 return *decomp_type_table->get (v);
7359 /* Finish a decomposition declaration. DECL is the underlying declaration
7360 "e", FIRST is the head of a chain of decls for the individual identifiers
7361 chained through DECL_CHAIN in reverse order and COUNT is the number of
7362 those decls. */
7364 void
7365 cp_finish_decomp (tree decl, tree first, unsigned int count)
7367 if (error_operand_p (decl))
7369 error_out:
7370 while (count--)
7372 TREE_TYPE (first) = error_mark_node;
7373 if (DECL_HAS_VALUE_EXPR_P (first))
7375 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7376 DECL_HAS_VALUE_EXPR_P (first) = 0;
7378 first = DECL_CHAIN (first);
7380 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7381 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7382 return;
7385 location_t loc = DECL_SOURCE_LOCATION (decl);
7386 if (type_dependent_expression_p (decl)
7387 /* This happens for range for when not in templates.
7388 Still add the DECL_VALUE_EXPRs for later processing. */
7389 || (!processing_template_decl
7390 && type_uses_auto (TREE_TYPE (decl))))
7392 for (unsigned int i = 0; i < count; i++)
7394 if (!DECL_HAS_VALUE_EXPR_P (first))
7396 tree v = build_nt (ARRAY_REF, decl,
7397 size_int (count - i - 1),
7398 NULL_TREE, NULL_TREE);
7399 SET_DECL_VALUE_EXPR (first, v);
7400 DECL_HAS_VALUE_EXPR_P (first) = 1;
7402 if (processing_template_decl)
7404 retrofit_lang_decl (first);
7405 SET_DECL_DECOMPOSITION_P (first);
7407 first = DECL_CHAIN (first);
7409 return;
7412 auto_vec<tree, 16> v;
7413 v.safe_grow (count);
7414 tree d = first;
7415 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7417 v[count - i - 1] = d;
7418 retrofit_lang_decl (d);
7419 SET_DECL_DECOMPOSITION_P (d);
7422 tree type = TREE_TYPE (decl);
7423 tree dexp = decl;
7425 if (TREE_CODE (type) == REFERENCE_TYPE)
7427 /* If e is a constant reference, use the referent directly. */
7428 if (DECL_INITIAL (decl))
7429 dexp = DECL_INITIAL (decl);
7430 dexp = convert_from_reference (dexp);
7431 type = TREE_TYPE (type);
7434 tree eltype = NULL_TREE;
7435 unsigned HOST_WIDE_INT eltscnt = 0;
7436 if (TREE_CODE (type) == ARRAY_TYPE)
7438 tree nelts;
7439 nelts = array_type_nelts_top (type);
7440 if (nelts == error_mark_node)
7441 goto error_out;
7442 if (!tree_fits_uhwi_p (nelts))
7444 error_at (loc, "cannot decompose variable length array %qT", type);
7445 goto error_out;
7447 eltscnt = tree_to_uhwi (nelts);
7448 if (count != eltscnt)
7450 cnt_mismatch:
7451 if (count > eltscnt)
7452 error_at (loc, "%u names provided while %qT decomposes into "
7453 "%wu elements", count, type, eltscnt);
7454 else
7455 error_at (loc, "only %u names provided while %qT decomposes into "
7456 "%wu elements", count, type, eltscnt);
7457 goto error_out;
7459 eltype = TREE_TYPE (type);
7460 for (unsigned int i = 0; i < count; i++)
7462 TREE_TYPE (v[i]) = eltype;
7463 layout_decl (v[i], 0);
7464 tree t = dexp;
7465 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7466 eltype, t, size_int (i), NULL_TREE,
7467 NULL_TREE);
7468 SET_DECL_VALUE_EXPR (v[i], t);
7469 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7472 /* 2 GNU extensions. */
7473 else if (TREE_CODE (type) == COMPLEX_TYPE)
7475 eltscnt = 2;
7476 if (count != eltscnt)
7477 goto cnt_mismatch;
7478 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7479 for (unsigned int i = 0; i < count; i++)
7481 TREE_TYPE (v[i]) = eltype;
7482 layout_decl (v[i], 0);
7483 tree t = dexp;
7484 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7485 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7487 SET_DECL_VALUE_EXPR (v[i], t);
7488 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7491 else if (TREE_CODE (type) == VECTOR_TYPE)
7493 eltscnt = TYPE_VECTOR_SUBPARTS (type);
7494 if (count != eltscnt)
7495 goto cnt_mismatch;
7496 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7497 for (unsigned int i = 0; i < count; i++)
7499 TREE_TYPE (v[i]) = eltype;
7500 layout_decl (v[i], 0);
7501 tree t = dexp;
7502 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7503 &t, size_int (i));
7504 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7505 eltype, t, size_int (i), NULL_TREE,
7506 NULL_TREE);
7507 SET_DECL_VALUE_EXPR (v[i], t);
7508 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7511 else if (tree tsize = get_tuple_size (type))
7513 if (tsize == error_mark_node)
7515 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7516 "constant expression", type);
7517 goto error_out;
7519 eltscnt = tree_to_uhwi (tsize);
7520 if (count != eltscnt)
7521 goto cnt_mismatch;
7522 for (unsigned i = 0; i < count; ++i)
7524 location_t sloc = input_location;
7525 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7527 input_location = dloc;
7528 tree init = get_tuple_decomp_init (decl, i);
7529 tree eltype = (init == error_mark_node ? error_mark_node
7530 : get_tuple_element_type (type, i));
7531 input_location = sloc;
7533 if (init == error_mark_node || eltype == error_mark_node)
7535 inform (dloc, "in initialization of decomposition variable %qD",
7536 v[i]);
7537 goto error_out;
7539 /* Save the decltype away before reference collapse. */
7540 store_decomp_type (v[i], eltype);
7541 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7542 TREE_TYPE (v[i]) = eltype;
7543 layout_decl (v[i], 0);
7544 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7546 /* In this case the names are variables, not just proxies. */
7547 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7548 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7550 cp_finish_decl (v[i], init, /*constexpr*/false,
7551 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7554 else if (TREE_CODE (type) == UNION_TYPE)
7556 error_at (loc, "cannot decompose union type %qT", type);
7557 goto error_out;
7559 else if (!CLASS_TYPE_P (type))
7561 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7562 goto error_out;
7564 else
7566 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7567 if (btype == error_mark_node)
7568 goto error_out;
7569 else if (btype == NULL_TREE)
7571 error_at (loc, "cannot decompose class type %qT without non-static "
7572 "data members", type);
7573 goto error_out;
7575 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7576 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7577 continue;
7578 else
7579 eltscnt++;
7580 if (count != eltscnt)
7581 goto cnt_mismatch;
7582 tree t = dexp;
7583 if (type != btype)
7585 t = convert_to_base (t, btype, /*check_access*/true,
7586 /*nonnull*/false, tf_warning_or_error);
7587 type = btype;
7589 unsigned int i = 0;
7590 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7591 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7592 continue;
7593 else
7595 tree tt = finish_non_static_data_member (field, t, NULL_TREE);
7596 if (REFERENCE_REF_P (tt))
7597 tt = TREE_OPERAND (tt, 0);
7598 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7599 layout_decl (v[i], 0);
7600 SET_DECL_VALUE_EXPR (v[i], tt);
7601 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7602 i++;
7605 if (DECL_NAMESPACE_SCOPE_P (decl))
7606 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7609 /* Returns a declaration for a VAR_DECL as if:
7611 extern "C" TYPE NAME;
7613 had been seen. Used to create compiler-generated global
7614 variables. */
7616 static tree
7617 declare_global_var (tree name, tree type)
7619 tree decl;
7621 push_to_top_level ();
7622 decl = build_decl (input_location, VAR_DECL, name, type);
7623 TREE_PUBLIC (decl) = 1;
7624 DECL_EXTERNAL (decl) = 1;
7625 DECL_ARTIFICIAL (decl) = 1;
7626 /* If the user has explicitly declared this variable (perhaps
7627 because the code we are compiling is part of a low-level runtime
7628 library), then it is possible that our declaration will be merged
7629 with theirs by pushdecl. */
7630 decl = pushdecl (decl);
7631 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7632 pop_from_top_level ();
7634 return decl;
7637 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7638 if "__cxa_atexit" is not being used) corresponding to the function
7639 to be called when the program exits. */
7641 static tree
7642 get_atexit_fn_ptr_type (void)
7644 tree fn_type;
7646 if (!atexit_fn_ptr_type_node)
7648 tree arg_type;
7649 if (flag_use_cxa_atexit
7650 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7651 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7652 arg_type = ptr_type_node;
7653 else
7654 /* The parameter to "atexit" is "void (*)(void)". */
7655 arg_type = NULL_TREE;
7657 fn_type = build_function_type_list (void_type_node,
7658 arg_type, NULL_TREE);
7659 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7662 return atexit_fn_ptr_type_node;
7665 /* Returns a pointer to the `atexit' function. Note that if
7666 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7667 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7669 static tree
7670 get_atexit_node (void)
7672 tree atexit_fndecl;
7673 tree fn_type;
7674 tree fn_ptr_type;
7675 const char *name;
7676 bool use_aeabi_atexit;
7678 if (atexit_node)
7679 return atexit_node;
7681 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7683 /* The declaration for `__cxa_atexit' is:
7685 int __cxa_atexit (void (*)(void *), void *, void *)
7687 We build up the argument types and then the function type
7688 itself. */
7689 tree argtype0, argtype1, argtype2;
7691 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7692 /* First, build the pointer-to-function type for the first
7693 argument. */
7694 fn_ptr_type = get_atexit_fn_ptr_type ();
7695 /* Then, build the rest of the argument types. */
7696 argtype2 = ptr_type_node;
7697 if (use_aeabi_atexit)
7699 argtype1 = fn_ptr_type;
7700 argtype0 = ptr_type_node;
7702 else
7704 argtype1 = ptr_type_node;
7705 argtype0 = fn_ptr_type;
7707 /* And the final __cxa_atexit type. */
7708 fn_type = build_function_type_list (integer_type_node,
7709 argtype0, argtype1, argtype2,
7710 NULL_TREE);
7711 if (use_aeabi_atexit)
7712 name = "__aeabi_atexit";
7713 else
7714 name = "__cxa_atexit";
7716 else
7718 /* The declaration for `atexit' is:
7720 int atexit (void (*)());
7722 We build up the argument types and then the function type
7723 itself. */
7724 fn_ptr_type = get_atexit_fn_ptr_type ();
7725 /* Build the final atexit type. */
7726 fn_type = build_function_type_list (integer_type_node,
7727 fn_ptr_type, NULL_TREE);
7728 name = "atexit";
7731 /* Now, build the function declaration. */
7732 push_lang_context (lang_name_c);
7733 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7734 mark_used (atexit_fndecl);
7735 pop_lang_context ();
7736 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7738 return atexit_node;
7741 /* Like get_atexit_node, but for thread-local cleanups. */
7743 static tree
7744 get_thread_atexit_node (void)
7746 /* The declaration for `__cxa_thread_atexit' is:
7748 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
7749 tree fn_type = build_function_type_list (integer_type_node,
7750 get_atexit_fn_ptr_type (),
7751 ptr_type_node, ptr_type_node,
7752 NULL_TREE);
7754 /* Now, build the function declaration. */
7755 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
7756 ECF_LEAF | ECF_NOTHROW);
7757 return decay_conversion (atexit_fndecl, tf_warning_or_error);
7760 /* Returns the __dso_handle VAR_DECL. */
7762 static tree
7763 get_dso_handle_node (void)
7765 if (dso_handle_node)
7766 return dso_handle_node;
7768 /* Declare the variable. */
7769 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
7770 ptr_type_node);
7772 #ifdef HAVE_GAS_HIDDEN
7773 if (dso_handle_node != error_mark_node)
7775 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
7776 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
7778 #endif
7780 return dso_handle_node;
7783 /* Begin a new function with internal linkage whose job will be simply
7784 to destroy some particular variable. */
7786 static GTY(()) int start_cleanup_cnt;
7788 static tree
7789 start_cleanup_fn (void)
7791 char name[32];
7792 tree fntype;
7793 tree fndecl;
7794 bool use_cxa_atexit = flag_use_cxa_atexit
7795 && !targetm.cxx.use_atexit_for_cxa_atexit ();
7797 push_to_top_level ();
7799 /* No need to mangle this. */
7800 push_lang_context (lang_name_c);
7802 /* Build the name of the function. */
7803 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
7804 /* Build the function declaration. */
7805 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
7806 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
7807 /* It's a function with internal linkage, generated by the
7808 compiler. */
7809 TREE_PUBLIC (fndecl) = 0;
7810 DECL_ARTIFICIAL (fndecl) = 1;
7811 /* Make the function `inline' so that it is only emitted if it is
7812 actually needed. It is unlikely that it will be inlined, since
7813 it is only called via a function pointer, but we avoid unnecessary
7814 emissions this way. */
7815 DECL_DECLARED_INLINE_P (fndecl) = 1;
7816 DECL_INTERFACE_KNOWN (fndecl) = 1;
7817 /* Build the parameter. */
7818 if (use_cxa_atexit)
7820 tree parmdecl;
7822 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
7823 DECL_CONTEXT (parmdecl) = fndecl;
7824 TREE_USED (parmdecl) = 1;
7825 DECL_READ_P (parmdecl) = 1;
7826 DECL_ARGUMENTS (fndecl) = parmdecl;
7829 pushdecl (fndecl);
7830 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7832 pop_lang_context ();
7834 return current_function_decl;
7837 /* Finish the cleanup function begun by start_cleanup_fn. */
7839 static void
7840 end_cleanup_fn (void)
7842 expand_or_defer_fn (finish_function (0));
7844 pop_from_top_level ();
7847 /* Generate code to handle the destruction of DECL, an object with
7848 static storage duration. */
7850 tree
7851 register_dtor_fn (tree decl)
7853 tree cleanup;
7854 tree addr;
7855 tree compound_stmt;
7856 tree fcall;
7857 tree type;
7858 bool ob_parm, dso_parm, use_dtor;
7859 tree arg0, arg1, arg2;
7860 tree atex_node;
7862 type = TREE_TYPE (decl);
7863 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7864 return void_node;
7866 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7867 "__aeabi_atexit"), and DECL is a class object, we can just pass the
7868 destructor to "__cxa_atexit"; we don't have to build a temporary
7869 function to do the cleanup. */
7870 dso_parm = (flag_use_cxa_atexit
7871 && !targetm.cxx.use_atexit_for_cxa_atexit ());
7872 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
7873 use_dtor = ob_parm && CLASS_TYPE_P (type);
7874 if (use_dtor)
7876 int idx;
7878 /* Find the destructor. */
7879 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
7880 gcc_assert (idx >= 0);
7881 cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
7882 /* Make sure it is accessible. */
7883 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7884 tf_warning_or_error);
7886 else
7888 /* Call build_cleanup before we enter the anonymous function so
7889 that any access checks will be done relative to the current
7890 scope, rather than the scope of the anonymous function. */
7891 build_cleanup (decl);
7893 /* Now start the function. */
7894 cleanup = start_cleanup_fn ();
7896 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
7897 to the original function, rather than the anonymous one. That
7898 will make the back end think that nested functions are in use,
7899 which causes confusion. */
7900 push_deferring_access_checks (dk_no_check);
7901 fcall = build_cleanup (decl);
7902 pop_deferring_access_checks ();
7904 /* Create the body of the anonymous function. */
7905 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7906 finish_expr_stmt (fcall);
7907 finish_compound_stmt (compound_stmt);
7908 end_cleanup_fn ();
7911 /* Call atexit with the cleanup function. */
7912 mark_used (cleanup);
7913 cleanup = build_address (cleanup);
7915 if (CP_DECL_THREAD_LOCAL_P (decl))
7916 atex_node = get_thread_atexit_node ();
7917 else
7918 atex_node = get_atexit_node ();
7920 if (use_dtor)
7922 /* We must convert CLEANUP to the type that "__cxa_atexit"
7923 expects. */
7924 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
7925 /* "__cxa_atexit" will pass the address of DECL to the
7926 cleanup function. */
7927 mark_used (decl);
7928 addr = build_address (decl);
7929 /* The declared type of the parameter to "__cxa_atexit" is
7930 "void *". For plain "T*", we could just let the
7931 machinery in cp_build_function_call convert it -- but if the
7932 type is "cv-qualified T *", then we need to convert it
7933 before passing it in, to avoid spurious errors. */
7934 addr = build_nop (ptr_type_node, addr);
7936 else
7937 /* Since the cleanup functions we build ignore the address
7938 they're given, there's no reason to pass the actual address
7939 in, and, in general, it's cheaper to pass NULL than any
7940 other value. */
7941 addr = null_pointer_node;
7943 if (dso_parm)
7944 arg2 = cp_build_addr_expr (get_dso_handle_node (),
7945 tf_warning_or_error);
7946 else if (ob_parm)
7947 /* Just pass NULL to the dso handle parm if we don't actually
7948 have a DSO handle on this target. */
7949 arg2 = null_pointer_node;
7950 else
7951 arg2 = NULL_TREE;
7953 if (ob_parm)
7955 if (!CP_DECL_THREAD_LOCAL_P (decl)
7956 && targetm.cxx.use_aeabi_atexit ())
7958 arg1 = cleanup;
7959 arg0 = addr;
7961 else
7963 arg1 = addr;
7964 arg0 = cleanup;
7967 else
7969 arg0 = cleanup;
7970 arg1 = NULL_TREE;
7972 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
7973 arg0, arg1, arg2, NULL_TREE);
7976 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
7977 is its initializer. Generate code to handle the construction
7978 and destruction of DECL. */
7980 static void
7981 expand_static_init (tree decl, tree init)
7983 gcc_assert (VAR_P (decl));
7984 gcc_assert (TREE_STATIC (decl));
7986 /* Some variables require no dynamic initialization. */
7987 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
7989 /* Make sure the destructor is callable. */
7990 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7991 if (!init)
7992 return;
7995 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
7996 && !DECL_FUNCTION_SCOPE_P (decl))
7998 if (init)
7999 error ("non-local variable %qD declared %<__thread%> "
8000 "needs dynamic initialization", decl);
8001 else
8002 error ("non-local variable %qD declared %<__thread%> "
8003 "has a non-trivial destructor", decl);
8004 static bool informed;
8005 if (!informed)
8007 inform (DECL_SOURCE_LOCATION (decl),
8008 "C++11 %<thread_local%> allows dynamic initialization "
8009 "and destruction");
8010 informed = true;
8012 return;
8015 if (DECL_FUNCTION_SCOPE_P (decl))
8017 /* Emit code to perform this initialization but once. */
8018 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8019 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8020 tree guard, guard_addr;
8021 tree flag, begin;
8022 /* We don't need thread-safety code for thread-local vars. */
8023 bool thread_guard = (flag_threadsafe_statics
8024 && !CP_DECL_THREAD_LOCAL_P (decl));
8026 /* Emit code to perform this initialization but once. This code
8027 looks like:
8029 static <type> guard;
8030 if (!__atomic_load (guard.first_byte)) {
8031 if (__cxa_guard_acquire (&guard)) {
8032 bool flag = false;
8033 try {
8034 // Do initialization.
8035 flag = true; __cxa_guard_release (&guard);
8036 // Register variable for destruction at end of program.
8037 } catch {
8038 if (!flag) __cxa_guard_abort (&guard);
8042 Note that the `flag' variable is only set to 1 *after* the
8043 initialization is complete. This ensures that an exception,
8044 thrown during the construction, will cause the variable to
8045 reinitialized when we pass through this code again, as per:
8047 [stmt.dcl]
8049 If the initialization exits by throwing an exception, the
8050 initialization is not complete, so it will be tried again
8051 the next time control enters the declaration.
8053 This process should be thread-safe, too; multiple threads
8054 should not be able to initialize the variable more than
8055 once. */
8057 /* Create the guard variable. */
8058 guard = get_guard (decl);
8060 /* Begin the conditional initialization. */
8061 if_stmt = begin_if_stmt ();
8063 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8064 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8066 if (thread_guard)
8068 tree vfntype = NULL_TREE;
8069 tree acquire_name, release_name, abort_name;
8070 tree acquire_fn, release_fn, abort_fn;
8071 guard_addr = build_address (guard);
8073 acquire_name = get_identifier ("__cxa_guard_acquire");
8074 release_name = get_identifier ("__cxa_guard_release");
8075 abort_name = get_identifier ("__cxa_guard_abort");
8076 acquire_fn = identifier_global_value (acquire_name);
8077 release_fn = identifier_global_value (release_name);
8078 abort_fn = identifier_global_value (abort_name);
8079 if (!acquire_fn)
8080 acquire_fn = push_library_fn
8081 (acquire_name, build_function_type_list (integer_type_node,
8082 TREE_TYPE (guard_addr),
8083 NULL_TREE),
8084 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8085 if (!release_fn || !abort_fn)
8086 vfntype = build_function_type_list (void_type_node,
8087 TREE_TYPE (guard_addr),
8088 NULL_TREE);
8089 if (!release_fn)
8090 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8091 ECF_NOTHROW | ECF_LEAF);
8092 if (!abort_fn)
8093 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8094 ECF_NOTHROW | ECF_LEAF);
8096 inner_if_stmt = begin_if_stmt ();
8097 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8098 inner_if_stmt);
8100 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8101 begin = get_target_expr (boolean_false_node);
8102 flag = TARGET_EXPR_SLOT (begin);
8104 TARGET_EXPR_CLEANUP (begin)
8105 = build3 (COND_EXPR, void_type_node, flag,
8106 void_node,
8107 build_call_n (abort_fn, 1, guard_addr));
8108 CLEANUP_EH_ONLY (begin) = 1;
8110 /* Do the initialization itself. */
8111 init = add_stmt_to_compound (begin, init);
8112 init = add_stmt_to_compound
8113 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8114 init = add_stmt_to_compound
8115 (init, build_call_n (release_fn, 1, guard_addr));
8117 else
8118 init = add_stmt_to_compound (init, set_guard (guard));
8120 /* Use atexit to register a function for destroying this static
8121 variable. */
8122 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8124 finish_expr_stmt (init);
8126 if (thread_guard)
8128 finish_compound_stmt (inner_then_clause);
8129 finish_then_clause (inner_if_stmt);
8130 finish_if_stmt (inner_if_stmt);
8133 finish_compound_stmt (then_clause);
8134 finish_then_clause (if_stmt);
8135 finish_if_stmt (if_stmt);
8137 else if (CP_DECL_THREAD_LOCAL_P (decl))
8138 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8139 else
8140 static_aggregates = tree_cons (init, decl, static_aggregates);
8144 /* Make TYPE a complete type based on INITIAL_VALUE.
8145 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8146 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8147 3 if the initializer list is empty (in pedantic mode). */
8150 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8152 int failure;
8153 tree type, elt_type;
8155 /* Don't get confused by a CONSTRUCTOR for some other type. */
8156 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8157 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8158 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8159 return 1;
8161 if (initial_value)
8163 unsigned HOST_WIDE_INT i;
8164 tree value;
8166 /* An array of character type can be initialized from a
8167 brace-enclosed string constant.
8169 FIXME: this code is duplicated from reshape_init. Probably
8170 we should just call reshape_init here? */
8171 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8172 && TREE_CODE (initial_value) == CONSTRUCTOR
8173 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8175 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8176 tree value = (*v)[0].value;
8178 if (TREE_CODE (value) == STRING_CST
8179 && v->length () == 1)
8180 initial_value = value;
8183 /* If any of the elements are parameter packs, we can't actually
8184 complete this type now because the array size is dependent. */
8185 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8187 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8188 i, value)
8190 if (PACK_EXPANSION_P (value))
8191 return 0;
8196 failure = complete_array_type (ptype, initial_value, do_default);
8198 /* We can create the array before the element type is complete, which
8199 means that we didn't have these two bits set in the original type
8200 either. In completing the type, we are expected to propagate these
8201 bits. See also complete_type which does the same thing for arrays
8202 of fixed size. */
8203 type = *ptype;
8204 if (TYPE_DOMAIN (type))
8206 elt_type = TREE_TYPE (type);
8207 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8208 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8209 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8212 return failure;
8215 /* As above, but either give an error or reject zero-size arrays, depending
8216 on COMPLAIN. */
8219 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8220 bool do_default, tsubst_flags_t complain)
8222 int failure;
8223 bool sfinae = !(complain & tf_error);
8224 /* In SFINAE context we can't be lenient about zero-size arrays. */
8225 if (sfinae)
8226 ++pedantic;
8227 failure = cp_complete_array_type (ptype, initial_value, do_default);
8228 if (sfinae)
8229 --pedantic;
8230 if (failure)
8232 if (sfinae)
8233 /* Not an error. */;
8234 else if (failure == 1)
8235 error ("initializer fails to determine size of %qT", *ptype);
8236 else if (failure == 2)
8238 if (do_default)
8239 error ("array size missing in %qT", *ptype);
8241 else if (failure == 3)
8242 error ("zero-size array %qT", *ptype);
8243 *ptype = error_mark_node;
8245 return failure;
8248 /* Return zero if something is declared to be a member of type
8249 CTYPE when in the context of CUR_TYPE. STRING is the error
8250 message to print in that case. Otherwise, quietly return 1. */
8252 static int
8253 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8255 if (ctype && ctype != cur_type)
8257 if (flags == DTOR_FLAG)
8258 error ("destructor for alien class %qT cannot be a member", ctype);
8259 else
8260 error ("constructor for alien class %qT cannot be a member", ctype);
8261 return 0;
8263 return 1;
8266 /* Subroutine of `grokdeclarator'. */
8268 /* Generate errors possibly applicable for a given set of specifiers.
8269 This is for ARM $7.1.2. */
8271 static void
8272 bad_specifiers (tree object,
8273 enum bad_spec_place type,
8274 int virtualp,
8275 int quals,
8276 int inlinep,
8277 int friendp,
8278 int raises)
8280 switch (type)
8282 case BSP_VAR:
8283 if (virtualp)
8284 error ("%qD declared as a %<virtual%> variable", object);
8285 if (quals)
8286 error ("%<const%> and %<volatile%> function specifiers on "
8287 "%qD invalid in variable declaration", object);
8288 break;
8289 case BSP_PARM:
8290 if (virtualp)
8291 error ("%qD declared as a %<virtual%> parameter", object);
8292 if (inlinep)
8293 error ("%qD declared as an %<inline%> parameter", object);
8294 if (quals)
8295 error ("%<const%> and %<volatile%> function specifiers on "
8296 "%qD invalid in parameter declaration", object);
8297 break;
8298 case BSP_TYPE:
8299 if (virtualp)
8300 error ("%qD declared as a %<virtual%> type", object);
8301 if (inlinep)
8302 error ("%qD declared as an %<inline%> type", object);
8303 if (quals)
8304 error ("%<const%> and %<volatile%> function specifiers on "
8305 "%qD invalid in type declaration", object);
8306 break;
8307 case BSP_FIELD:
8308 if (virtualp)
8309 error ("%qD declared as a %<virtual%> field", object);
8310 if (inlinep)
8311 error ("%qD declared as an %<inline%> field", object);
8312 if (quals)
8313 error ("%<const%> and %<volatile%> function specifiers on "
8314 "%qD invalid in field declaration", object);
8315 break;
8316 default:
8317 gcc_unreachable();
8319 if (friendp)
8320 error ("%q+D declared as a friend", object);
8321 if (raises
8322 && !flag_noexcept_type
8323 && (TREE_CODE (object) == TYPE_DECL
8324 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8325 && !TYPE_REFFN_P (TREE_TYPE (object))
8326 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8327 error ("%q+D declared with an exception specification", object);
8330 /* DECL is a member function or static data member and is presently
8331 being defined. Check that the definition is taking place in a
8332 valid namespace. */
8334 static void
8335 check_class_member_definition_namespace (tree decl)
8337 /* These checks only apply to member functions and static data
8338 members. */
8339 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8340 /* We check for problems with specializations in pt.c in
8341 check_specialization_namespace, where we can issue better
8342 diagnostics. */
8343 if (processing_specialization)
8344 return;
8345 /* We check this in check_explicit_instantiation_namespace. */
8346 if (processing_explicit_instantiation)
8347 return;
8348 /* [class.mfct]
8350 A member function definition that appears outside of the
8351 class definition shall appear in a namespace scope enclosing
8352 the class definition.
8354 [class.static.data]
8356 The definition for a static data member shall appear in a
8357 namespace scope enclosing the member's class definition. */
8358 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8359 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8360 decl, DECL_CONTEXT (decl));
8363 /* Build a PARM_DECL for the "this" parameter. TYPE is the
8364 METHOD_TYPE for a non-static member function; QUALS are the
8365 cv-qualifiers that apply to the function. */
8367 tree
8368 build_this_parm (tree type, cp_cv_quals quals)
8370 tree this_type;
8371 tree qual_type;
8372 tree parm;
8373 cp_cv_quals this_quals;
8375 if (CLASS_TYPE_P (type))
8377 this_type
8378 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8379 this_type = build_pointer_type (this_type);
8381 else
8382 this_type = type_of_this_parm (type);
8383 /* The `this' parameter is implicitly `const'; it cannot be
8384 assigned to. */
8385 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8386 qual_type = cp_build_qualified_type (this_type, this_quals);
8387 parm = build_artificial_parm (this_identifier, qual_type);
8388 cp_apply_type_quals_to_decl (this_quals, parm);
8389 return parm;
8392 /* DECL is a static member function. Complain if it was declared
8393 with function-cv-quals. */
8395 static void
8396 check_static_quals (tree decl, cp_cv_quals quals)
8398 if (quals != TYPE_UNQUALIFIED)
8399 error ("static member function %q#D declared with type qualifiers",
8400 decl);
8403 // Check that FN takes no arguments and returns bool.
8404 static void
8405 check_concept_fn (tree fn)
8407 // A constraint is nullary.
8408 if (DECL_ARGUMENTS (fn))
8409 error ("concept %q#D declared with function parameters", fn);
8411 // The declared return type of the concept shall be bool, and
8412 // it shall not be deduced from it definition.
8413 tree type = TREE_TYPE (TREE_TYPE (fn));
8414 if (is_auto (type))
8415 error ("concept %q#D declared with a deduced return type", fn);
8416 else if (type != boolean_type_node)
8417 error ("concept %q#D with non-%<bool%> return type %qT", fn, type);
8420 /* Helper function. Replace the temporary this parameter injected
8421 during cp_finish_omp_declare_simd with the real this parameter. */
8423 static tree
8424 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8426 tree this_parm = (tree) data;
8427 if (TREE_CODE (*tp) == PARM_DECL
8428 && DECL_NAME (*tp) == this_identifier
8429 && *tp != this_parm)
8430 *tp = this_parm;
8431 else if (TYPE_P (*tp))
8432 *walk_subtrees = 0;
8433 return NULL_TREE;
8436 /* CTYPE is class type, or null if non-class.
8437 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8438 or METHOD_TYPE.
8439 DECLARATOR is the function's name.
8440 PARMS is a chain of PARM_DECLs for the function.
8441 VIRTUALP is truthvalue of whether the function is virtual or not.
8442 FLAGS are to be passed through to `grokclassfn'.
8443 QUALS are qualifiers indicating whether the function is `const'
8444 or `volatile'.
8445 RAISES is a list of exceptions that this function can raise.
8446 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8447 not look, and -1 if we should not call `grokclassfn' at all.
8449 SFK is the kind of special function (if any) for the new function.
8451 Returns `NULL_TREE' if something goes wrong, after issuing
8452 applicable error messages. */
8454 static tree
8455 grokfndecl (tree ctype,
8456 tree type,
8457 tree declarator,
8458 tree parms,
8459 tree orig_declarator,
8460 tree decl_reqs,
8461 int virtualp,
8462 enum overload_flags flags,
8463 cp_cv_quals quals,
8464 cp_ref_qualifier rqual,
8465 tree raises,
8466 int check,
8467 int friendp,
8468 int publicp,
8469 int inlinep,
8470 bool deletedp,
8471 special_function_kind sfk,
8472 bool funcdef_flag,
8473 int template_count,
8474 tree in_namespace,
8475 tree* attrlist,
8476 location_t location)
8478 tree decl;
8479 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8480 tree t;
8482 // Was the concept specifier present?
8483 bool concept_p = inlinep & 4;
8485 // Concept declarations must have a corresponding definition.
8486 if (concept_p && !funcdef_flag)
8488 error ("concept %qD has no definition", declarator);
8489 return NULL_TREE;
8492 if (rqual)
8493 type = build_ref_qualified_type (type, rqual);
8494 if (raises)
8495 type = build_exception_variant (type, raises);
8497 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8499 /* Set the constraints on the declaration. */
8500 if (flag_concepts)
8502 tree tmpl_reqs = NULL_TREE;
8503 if (processing_template_decl > template_class_depth (ctype))
8504 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8506 /* Adjust the required expression into a constraint. */
8507 if (decl_reqs)
8508 decl_reqs = normalize_expression (decl_reqs);
8510 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8511 set_constraints (decl, ci);
8514 /* If we have an explicit location, use it, otherwise use whatever
8515 build_lang_decl used (probably input_location). */
8516 if (location != UNKNOWN_LOCATION)
8517 DECL_SOURCE_LOCATION (decl) = location;
8519 if (TREE_CODE (type) == METHOD_TYPE)
8521 tree parm;
8522 parm = build_this_parm (type, quals);
8523 DECL_CHAIN (parm) = parms;
8524 parms = parm;
8526 /* Allocate space to hold the vptr bit if needed. */
8527 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8529 DECL_ARGUMENTS (decl) = parms;
8530 for (t = parms; t; t = DECL_CHAIN (t))
8531 DECL_CONTEXT (t) = decl;
8532 /* Propagate volatile out from type to decl. */
8533 if (TYPE_VOLATILE (type))
8534 TREE_THIS_VOLATILE (decl) = 1;
8536 /* Setup decl according to sfk. */
8537 switch (sfk)
8539 case sfk_constructor:
8540 case sfk_copy_constructor:
8541 case sfk_move_constructor:
8542 DECL_CONSTRUCTOR_P (decl) = 1;
8543 break;
8544 case sfk_destructor:
8545 DECL_DESTRUCTOR_P (decl) = 1;
8546 break;
8547 default:
8548 break;
8551 if (friendp
8552 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8554 if (funcdef_flag)
8555 error
8556 ("defining explicit specialization %qD in friend declaration",
8557 orig_declarator);
8558 else
8560 tree fns = TREE_OPERAND (orig_declarator, 0);
8561 tree args = TREE_OPERAND (orig_declarator, 1);
8563 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8565 /* Something like `template <class T> friend void f<T>()'. */
8566 error ("invalid use of template-id %qD in declaration "
8567 "of primary template",
8568 orig_declarator);
8569 return NULL_TREE;
8573 /* A friend declaration of the form friend void f<>(). Record
8574 the information in the TEMPLATE_ID_EXPR. */
8575 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8577 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8578 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8580 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8581 if (TREE_PURPOSE (t)
8582 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8584 error ("default arguments are not allowed in declaration "
8585 "of friend template specialization %qD",
8586 decl);
8587 return NULL_TREE;
8590 if (inlinep & 1)
8592 error ("%<inline%> is not allowed in declaration of friend "
8593 "template specialization %qD",
8594 decl);
8595 return NULL_TREE;
8600 /* If this decl has namespace scope, set that up. */
8601 if (in_namespace)
8602 set_decl_namespace (decl, in_namespace, friendp);
8603 else if (!ctype)
8604 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8606 /* `main' and builtins have implicit 'C' linkage. */
8607 if ((MAIN_NAME_P (declarator)
8608 || (IDENTIFIER_LENGTH (declarator) > 10
8609 && IDENTIFIER_POINTER (declarator)[0] == '_'
8610 && IDENTIFIER_POINTER (declarator)[1] == '_'
8611 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
8612 || (targetcm.cxx_implicit_extern_c
8613 && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
8614 && current_lang_name == lang_name_cplusplus
8615 && ctype == NULL_TREE
8616 && DECL_FILE_SCOPE_P (decl))
8617 SET_DECL_LANGUAGE (decl, lang_c);
8619 /* Should probably propagate const out from type to decl I bet (mrs). */
8620 if (staticp)
8622 DECL_STATIC_FUNCTION_P (decl) = 1;
8623 DECL_CONTEXT (decl) = ctype;
8626 if (deletedp)
8627 DECL_DELETED_FN (decl) = 1;
8629 if (ctype)
8631 DECL_CONTEXT (decl) = ctype;
8632 if (funcdef_flag)
8633 check_class_member_definition_namespace (decl);
8636 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8638 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8639 error ("cannot declare %<::main%> to be a template");
8640 if (inlinep & 1)
8641 error ("cannot declare %<::main%> to be inline");
8642 if (inlinep & 2)
8643 error ("cannot declare %<::main%> to be constexpr");
8644 if (!publicp)
8645 error ("cannot declare %<::main%> to be static");
8646 inlinep = 0;
8647 publicp = 1;
8650 /* Members of anonymous types and local classes have no linkage; make
8651 them internal. If a typedef is made later, this will be changed. */
8652 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8653 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8654 publicp = 0;
8656 if (publicp && cxx_dialect == cxx98)
8658 /* [basic.link]: A name with no linkage (notably, the name of a class
8659 or enumeration declared in a local scope) shall not be used to
8660 declare an entity with linkage.
8662 DR 757 relaxes this restriction for C++0x. */
8663 no_linkage_error (decl);
8666 TREE_PUBLIC (decl) = publicp;
8667 if (! publicp)
8669 DECL_INTERFACE_KNOWN (decl) = 1;
8670 DECL_NOT_REALLY_EXTERN (decl) = 1;
8673 /* If the declaration was declared inline, mark it as such. */
8674 if (inlinep)
8676 DECL_DECLARED_INLINE_P (decl) = 1;
8677 if (publicp)
8678 DECL_COMDAT (decl) = 1;
8680 if (inlinep & 2)
8681 DECL_DECLARED_CONSTEXPR_P (decl) = true;
8683 // If the concept declaration specifier was found, check
8684 // that the declaration satisfies the necessary requirements.
8685 if (concept_p)
8687 DECL_DECLARED_CONCEPT_P (decl) = true;
8688 check_concept_fn (decl);
8691 DECL_EXTERNAL (decl) = 1;
8692 if (TREE_CODE (type) == FUNCTION_TYPE)
8694 if (quals || rqual)
8695 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8696 TYPE_UNQUALIFIED,
8697 REF_QUAL_NONE);
8699 if (quals)
8701 error (ctype
8702 ? G_("static member function %qD cannot have cv-qualifier")
8703 : G_("non-member function %qD cannot have cv-qualifier"),
8704 decl);
8705 quals = TYPE_UNQUALIFIED;
8708 if (rqual)
8710 error (ctype
8711 ? G_("static member function %qD cannot have ref-qualifier")
8712 : G_("non-member function %qD cannot have ref-qualifier"),
8713 decl);
8714 rqual = REF_QUAL_NONE;
8718 if (deduction_guide_p (decl))
8720 if (!DECL_NAMESPACE_SCOPE_P (decl))
8722 error_at (location, "deduction guide %qD must be declared at "
8723 "namespace scope", decl);
8724 return NULL_TREE;
8726 tree type = TREE_TYPE (DECL_NAME (decl));
8727 if (CP_DECL_CONTEXT (decl) != CP_TYPE_CONTEXT (type))
8729 error_at (location, "deduction guide %qD must be declared in the "
8730 "same scope as %qT", decl, type);
8731 inform (location_of (type), " declared here");
8732 return NULL_TREE;
8734 if (funcdef_flag)
8735 error_at (location,
8736 "deduction guide %qD must not have a function body", decl);
8738 else if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
8739 && !grok_op_properties (decl, /*complain=*/true))
8740 return NULL_TREE;
8741 else if (UDLIT_OPER_P (DECL_NAME (decl)))
8743 bool long_long_unsigned_p;
8744 bool long_double_p;
8745 const char *suffix = NULL;
8746 /* [over.literal]/6: Literal operators shall not have C linkage. */
8747 if (DECL_LANGUAGE (decl) == lang_c)
8749 error ("literal operator with C linkage");
8750 return NULL_TREE;
8753 if (DECL_NAMESPACE_SCOPE_P (decl))
8755 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8756 &long_double_p))
8758 error ("%qD has invalid argument list", decl);
8759 return NULL_TREE;
8762 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
8763 if (long_long_unsigned_p)
8765 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
8766 warning (0, "integer suffix %<%s%>"
8767 " shadowed by implementation", suffix);
8769 else if (long_double_p)
8771 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
8772 warning (0, "floating point suffix %<%s%>"
8773 " shadowed by implementation", suffix);
8776 else
8778 error ("%qD must be a non-member function", decl);
8779 return NULL_TREE;
8783 if (funcdef_flag)
8784 /* Make the init_value nonzero so pushdecl knows this is not
8785 tentative. error_mark_node is replaced later with the BLOCK. */
8786 DECL_INITIAL (decl) = error_mark_node;
8788 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8789 TREE_NOTHROW (decl) = 1;
8791 if (flag_openmp || flag_openmp_simd || flag_cilkplus)
8793 /* Adjust "omp declare simd" attributes. */
8794 tree ods = lookup_attribute ("omp declare simd", *attrlist);
8795 if (ods)
8797 tree attr;
8798 for (attr = ods; attr;
8799 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
8801 if (TREE_CODE (type) == METHOD_TYPE)
8802 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
8803 DECL_ARGUMENTS (decl), NULL);
8804 if (TREE_VALUE (attr) != NULL_TREE)
8806 tree cl = TREE_VALUE (TREE_VALUE (attr));
8807 cl = c_omp_declare_simd_clauses_to_numbers
8808 (DECL_ARGUMENTS (decl), cl);
8809 if (cl)
8810 TREE_VALUE (TREE_VALUE (attr)) = cl;
8811 else
8812 TREE_VALUE (attr) = NULL_TREE;
8818 /* Caller will do the rest of this. */
8819 if (check < 0)
8820 return decl;
8822 if (ctype != NULL_TREE)
8823 grokclassfn (ctype, decl, flags);
8825 /* 12.4/3 */
8826 if (cxx_dialect >= cxx11
8827 && DECL_DESTRUCTOR_P (decl)
8828 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
8829 && !processing_template_decl)
8830 deduce_noexcept_on_destructor (decl);
8832 decl = check_explicit_specialization (orig_declarator, decl,
8833 template_count,
8834 2 * funcdef_flag +
8835 4 * (friendp != 0) +
8836 8 * concept_p);
8837 if (decl == error_mark_node)
8838 return NULL_TREE;
8840 if (DECL_STATIC_FUNCTION_P (decl))
8841 check_static_quals (decl, quals);
8843 if (attrlist)
8845 cplus_decl_attributes (&decl, *attrlist, 0);
8846 *attrlist = NULL_TREE;
8849 /* Check main's type after attributes have been applied. */
8850 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8852 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8853 integer_type_node))
8855 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
8856 tree newtype;
8857 error ("%<::main%> must return %<int%>");
8858 newtype = build_function_type (integer_type_node, oldtypeargs);
8859 TREE_TYPE (decl) = newtype;
8861 if (warn_main)
8862 check_main_parameter_types (decl);
8865 if (ctype != NULL_TREE && check)
8867 tree old_decl = check_classfn (ctype, decl,
8868 (processing_template_decl
8869 > template_class_depth (ctype))
8870 ? current_template_parms
8871 : NULL_TREE);
8873 if (old_decl == error_mark_node)
8874 return NULL_TREE;
8876 if (old_decl)
8878 tree ok;
8879 tree pushed_scope;
8881 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8882 /* Because grokfndecl is always supposed to return a
8883 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8884 here. We depend on our callers to figure out that its
8885 really a template that's being returned. */
8886 old_decl = DECL_TEMPLATE_RESULT (old_decl);
8888 if (DECL_STATIC_FUNCTION_P (old_decl)
8889 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8891 /* Remove the `this' parm added by grokclassfn. */
8892 revert_static_member_fn (decl);
8893 check_static_quals (decl, quals);
8895 if (DECL_ARTIFICIAL (old_decl))
8897 error ("definition of implicitly-declared %qD", old_decl);
8898 return NULL_TREE;
8900 else if (DECL_DEFAULTED_FN (old_decl))
8902 error ("definition of explicitly-defaulted %q+D", decl);
8903 inform (DECL_SOURCE_LOCATION (old_decl),
8904 "%q#D explicitly defaulted here", old_decl);
8905 return NULL_TREE;
8908 /* Since we've smashed OLD_DECL to its
8909 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8910 if (TREE_CODE (decl) == TEMPLATE_DECL)
8911 decl = DECL_TEMPLATE_RESULT (decl);
8913 /* Attempt to merge the declarations. This can fail, in
8914 the case of some invalid specialization declarations. */
8915 pushed_scope = push_scope (ctype);
8916 ok = duplicate_decls (decl, old_decl, friendp);
8917 if (pushed_scope)
8918 pop_scope (pushed_scope);
8919 if (!ok)
8921 error ("no %q#D member function declared in class %qT",
8922 decl, ctype);
8923 return NULL_TREE;
8925 if (ok == error_mark_node)
8926 return NULL_TREE;
8927 return old_decl;
8931 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8932 return NULL_TREE;
8934 if (ctype == NULL_TREE || check)
8935 return decl;
8937 if (virtualp)
8938 DECL_VIRTUAL_P (decl) = 1;
8940 return decl;
8943 /* decl is a FUNCTION_DECL.
8944 specifiers are the parsed virt-specifiers.
8946 Set flags to reflect the virt-specifiers.
8948 Returns decl. */
8950 static tree
8951 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
8953 if (decl == NULL_TREE)
8954 return decl;
8955 if (specifiers & VIRT_SPEC_OVERRIDE)
8956 DECL_OVERRIDE_P (decl) = 1;
8957 if (specifiers & VIRT_SPEC_FINAL)
8958 DECL_FINAL_P (decl) = 1;
8959 return decl;
8962 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
8963 the linkage that DECL will receive in the object file. */
8965 static void
8966 set_linkage_for_static_data_member (tree decl)
8968 /* A static data member always has static storage duration and
8969 external linkage. Note that static data members are forbidden in
8970 local classes -- the only situation in which a class has
8971 non-external linkage. */
8972 TREE_PUBLIC (decl) = 1;
8973 TREE_STATIC (decl) = 1;
8974 /* For non-template classes, static data members are always put
8975 out in exactly those files where they are defined, just as
8976 with ordinary namespace-scope variables. */
8977 if (!processing_template_decl)
8978 DECL_INTERFACE_KNOWN (decl) = 1;
8981 /* Create a VAR_DECL named NAME with the indicated TYPE.
8983 If SCOPE is non-NULL, it is the class type or namespace containing
8984 the variable. If SCOPE is NULL, the variable should is created in
8985 the innermost enclosing scope. */
8987 static tree
8988 grokvardecl (tree type,
8989 tree name,
8990 tree orig_declarator,
8991 const cp_decl_specifier_seq *declspecs,
8992 int initialized,
8993 int type_quals,
8994 int inlinep,
8995 bool conceptp,
8996 int template_count,
8997 tree scope)
8999 tree decl;
9000 tree explicit_scope;
9002 gcc_assert (!name || identifier_p (name));
9004 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9005 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9007 /* Compute the scope in which to place the variable, but remember
9008 whether or not that scope was explicitly specified by the user. */
9009 explicit_scope = scope;
9010 if (!scope)
9012 /* An explicit "extern" specifier indicates a namespace-scope
9013 variable. */
9014 if (declspecs->storage_class == sc_extern)
9015 scope = current_decl_namespace ();
9016 else if (!at_function_scope_p ())
9017 scope = current_scope ();
9020 if (scope
9021 && (/* If the variable is a namespace-scope variable declared in a
9022 template, we need DECL_LANG_SPECIFIC. */
9023 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9024 /* Similarly for namespace-scope variables with language linkage
9025 other than C++. */
9026 || (TREE_CODE (scope) == NAMESPACE_DECL
9027 && current_lang_name != lang_name_cplusplus)
9028 /* Similarly for static data members. */
9029 || TYPE_P (scope)
9030 /* Similarly for explicit specializations. */
9031 || (orig_declarator
9032 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9033 decl = build_lang_decl (VAR_DECL, name, type);
9034 else
9035 decl = build_decl (input_location, VAR_DECL, name, type);
9037 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9038 set_decl_namespace (decl, explicit_scope, 0);
9039 else
9040 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9042 if (declspecs->storage_class == sc_extern)
9044 DECL_THIS_EXTERN (decl) = 1;
9045 DECL_EXTERNAL (decl) = !initialized;
9048 if (DECL_CLASS_SCOPE_P (decl))
9050 set_linkage_for_static_data_member (decl);
9051 /* This function is only called with out-of-class definitions. */
9052 DECL_EXTERNAL (decl) = 0;
9053 check_class_member_definition_namespace (decl);
9055 /* At top level, either `static' or no s.c. makes a definition
9056 (perhaps tentative), and absence of `static' makes it public. */
9057 else if (toplevel_bindings_p ())
9059 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9060 && (DECL_THIS_EXTERN (decl)
9061 || ! constp
9062 || volatilep
9063 || inlinep));
9064 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9066 /* Not at top level, only `static' makes a static definition. */
9067 else
9069 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9070 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9073 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9075 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9077 CP_DECL_THREAD_LOCAL_P (decl) = true;
9078 if (!processing_template_decl)
9079 set_decl_tls_model (decl, decl_default_tls_model (decl));
9081 if (declspecs->gnu_thread_keyword_p)
9082 SET_DECL_GNU_TLS_P (decl);
9085 /* If the type of the decl has no linkage, make sure that we'll
9086 notice that in mark_used. */
9087 if (cxx_dialect > cxx98
9088 && decl_linkage (decl) != lk_none
9089 && DECL_LANG_SPECIFIC (decl) == NULL
9090 && !DECL_EXTERN_C_P (decl)
9091 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9092 retrofit_lang_decl (decl);
9094 if (TREE_PUBLIC (decl))
9096 /* [basic.link]: A name with no linkage (notably, the name of a class
9097 or enumeration declared in a local scope) shall not be used to
9098 declare an entity with linkage.
9100 DR 757 relaxes this restriction for C++0x. */
9101 if (cxx_dialect < cxx11)
9102 no_linkage_error (decl);
9104 else
9105 DECL_INTERFACE_KNOWN (decl) = 1;
9107 if (DECL_NAME (decl)
9108 && MAIN_NAME_P (DECL_NAME (decl))
9109 && scope == global_namespace)
9110 error ("cannot declare %<::main%> to be a global variable");
9112 /* Check that the variable can be safely declared as a concept.
9113 Note that this also forbids explicit specializations. */
9114 if (conceptp)
9116 if (!processing_template_decl)
9118 error ("a non-template variable cannot be %<concept%>");
9119 return NULL_TREE;
9121 else
9122 DECL_DECLARED_CONCEPT_P (decl) = true;
9123 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9124 error_at (declspecs->locations[ds_type_spec],
9125 "concept must have type %<bool%>");
9127 else if (flag_concepts
9128 && processing_template_decl > template_class_depth (scope))
9130 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9131 tree ci = build_constraints (reqs, NULL_TREE);
9132 set_constraints (decl, ci);
9135 // Handle explicit specializations and instantiations of variable templates.
9136 if (orig_declarator)
9137 decl = check_explicit_specialization (orig_declarator, decl,
9138 template_count, conceptp * 8);
9140 return decl != error_mark_node ? decl : NULL_TREE;
9143 /* Create and return a canonical pointer to member function type, for
9144 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9146 tree
9147 build_ptrmemfunc_type (tree type)
9149 tree field, fields;
9150 tree t;
9152 if (type == error_mark_node)
9153 return type;
9155 /* Make sure that we always have the unqualified pointer-to-member
9156 type first. */
9157 if (cp_cv_quals quals = cp_type_quals (type))
9159 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9160 return cp_build_qualified_type (unqual, quals);
9163 /* If a canonical type already exists for this type, use it. We use
9164 this method instead of type_hash_canon, because it only does a
9165 simple equality check on the list of field members. */
9167 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9168 return t;
9170 t = make_node (RECORD_TYPE);
9172 /* Let the front end know this is a pointer to member function. */
9173 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9175 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9176 fields = field;
9178 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9179 delta_type_node);
9180 DECL_CHAIN (field) = fields;
9181 fields = field;
9183 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9185 /* Zap out the name so that the back end will give us the debugging
9186 information for this anonymous RECORD_TYPE. */
9187 TYPE_NAME (t) = NULL_TREE;
9189 /* Cache this pointer-to-member type so that we can find it again
9190 later. */
9191 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9193 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9194 SET_TYPE_STRUCTURAL_EQUALITY (t);
9195 else if (TYPE_CANONICAL (type) != type)
9196 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9198 return t;
9201 /* Create and return a pointer to data member type. */
9203 tree
9204 build_ptrmem_type (tree class_type, tree member_type)
9206 if (TREE_CODE (member_type) == METHOD_TYPE)
9208 cp_cv_quals quals = type_memfn_quals (member_type);
9209 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9210 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9211 return build_ptrmemfunc_type (build_pointer_type (member_type));
9213 else
9215 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9216 return build_offset_type (class_type, member_type);
9220 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9221 Check to see that the definition is valid. Issue appropriate error
9222 messages. Return 1 if the definition is particularly bad, or 0
9223 otherwise. */
9225 static int
9226 check_static_variable_definition (tree decl, tree type)
9228 /* Avoid redundant diagnostics on out-of-class definitions. */
9229 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9230 return 0;
9231 /* Can't check yet if we don't know the type. */
9232 if (dependent_type_p (type))
9233 return 0;
9234 /* If DECL is declared constexpr, we'll do the appropriate checks
9235 in check_initializer. Similarly for inline static data members. */
9236 if (DECL_P (decl)
9237 && (DECL_DECLARED_CONSTEXPR_P (decl)
9238 || DECL_VAR_DECLARED_INLINE_P (decl)))
9239 return 0;
9240 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9242 if (!COMPLETE_TYPE_P (type))
9243 error_at (DECL_SOURCE_LOCATION (decl),
9244 "in-class initialization of static data member %q#D of "
9245 "incomplete type", decl);
9246 else if (literal_type_p (type))
9247 permerror (DECL_SOURCE_LOCATION (decl),
9248 "%<constexpr%> needed for in-class initialization of "
9249 "static data member %q#D of non-integral type", decl);
9250 else
9251 error_at (DECL_SOURCE_LOCATION (decl),
9252 "in-class initialization of static data member %q#D of "
9253 "non-literal type", decl);
9254 return 1;
9257 /* Motion 10 at San Diego: If a static const integral data member is
9258 initialized with an integral constant expression, the initializer
9259 may appear either in the declaration (within the class), or in
9260 the definition, but not both. If it appears in the class, the
9261 member is a member constant. The file-scope definition is always
9262 required. */
9263 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9265 error_at (DECL_SOURCE_LOCATION (decl),
9266 "invalid in-class initialization of static data member "
9267 "of non-integral type %qT",
9268 type);
9269 return 1;
9271 else if (!CP_TYPE_CONST_P (type))
9272 error_at (DECL_SOURCE_LOCATION (decl),
9273 "ISO C++ forbids in-class initialization of non-const "
9274 "static member %qD",
9275 decl);
9276 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9277 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9278 "ISO C++ forbids initialization of member constant "
9279 "%qD of non-integral type %qT", decl, type);
9281 return 0;
9284 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9285 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9286 expressions out into temporary variables so that walk_tree doesn't
9287 step into them (c++/15764). */
9289 static tree
9290 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9292 hash_set<tree> *pset = (hash_set<tree> *)data;
9293 tree expr = *expr_p;
9294 if (TREE_CODE (expr) == SAVE_EXPR)
9296 tree op = TREE_OPERAND (expr, 0);
9297 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9298 if (TREE_SIDE_EFFECTS (op))
9299 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9300 *walk_subtrees = 0;
9302 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9303 *walk_subtrees = 0;
9304 return NULL;
9307 /* Entry point for the above. */
9309 static void
9310 stabilize_vla_size (tree size)
9312 hash_set<tree> pset;
9313 /* Break out any function calls into temporary variables. */
9314 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9317 /* Reduce a SIZEOF_EXPR to its value. */
9319 tree
9320 fold_sizeof_expr (tree t)
9322 tree r;
9323 if (SIZEOF_EXPR_TYPE_P (t))
9324 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9325 SIZEOF_EXPR, false);
9326 else if (TYPE_P (TREE_OPERAND (t, 0)))
9327 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9328 false);
9329 else
9330 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9331 false);
9332 if (r == error_mark_node)
9333 r = size_one_node;
9334 return r;
9337 /* Given the SIZE (i.e., number of elements) in an array, compute
9338 an appropriate index type for the array. If non-NULL, NAME is
9339 the name of the entity being declared. */
9341 tree
9342 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9344 tree itype;
9345 tree osize = size;
9347 if (error_operand_p (size))
9348 return error_mark_node;
9350 if (!type_dependent_expression_p (size))
9352 tree type = TREE_TYPE (size);
9354 mark_rvalue_use (size);
9356 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9357 && TREE_SIDE_EFFECTS (size))
9358 /* In C++98, we mark a non-constant array bound with a magic
9359 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9360 else
9362 size = instantiate_non_dependent_expr_sfinae (size, complain);
9364 if (CLASS_TYPE_P (type)
9365 && CLASSTYPE_LITERAL_P (type))
9367 size = build_expr_type_conversion (WANT_INT, size, true);
9368 if (!size)
9370 if (!(complain & tf_error))
9371 return error_mark_node;
9372 if (name)
9373 error ("size of array %qD has non-integral type %qT",
9374 name, type);
9375 else
9376 error ("size of array has non-integral type %qT", type);
9377 size = integer_one_node;
9379 if (size == error_mark_node)
9380 return error_mark_node;
9381 type = TREE_TYPE (size);
9384 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9385 size = maybe_constant_value (size);
9387 if (!TREE_CONSTANT (size))
9388 size = osize;
9391 if (error_operand_p (size))
9392 return error_mark_node;
9394 /* The array bound must be an integer type. */
9395 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9397 if (!(complain & tf_error))
9398 return error_mark_node;
9399 if (name)
9400 error ("size of array %qD has non-integral type %qT", name, type);
9401 else
9402 error ("size of array has non-integral type %qT", type);
9403 size = integer_one_node;
9404 type = TREE_TYPE (size);
9408 /* A type is dependent if it is...an array type constructed from any
9409 dependent type or whose size is specified by a constant expression
9410 that is value-dependent. */
9411 /* We can only call value_dependent_expression_p on integral constant
9412 expressions; treat non-constant expressions as dependent, too. */
9413 if (processing_template_decl
9414 && (type_dependent_expression_p (size)
9415 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9417 /* We cannot do any checking for a SIZE that isn't known to be
9418 constant. Just build the index type and mark that it requires
9419 structural equality checks. */
9420 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9421 size, size_one_node));
9422 TYPE_DEPENDENT_P (itype) = 1;
9423 TYPE_DEPENDENT_P_VALID (itype) = 1;
9424 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9425 return itype;
9428 if (TREE_CODE (size) != INTEGER_CST)
9430 tree folded = cp_fully_fold (size);
9431 if (TREE_CODE (folded) == INTEGER_CST)
9432 pedwarn (location_of (size), OPT_Wpedantic,
9433 "size of array is not an integral constant-expression");
9434 /* Use the folded result for VLAs, too; it will have resolved
9435 SIZEOF_EXPR. */
9436 size = folded;
9439 /* Normally, the array-bound will be a constant. */
9440 if (TREE_CODE (size) == INTEGER_CST)
9442 /* Check to see if the array bound overflowed. Make that an
9443 error, no matter how generous we're being. */
9444 constant_expression_error (size);
9446 /* An array must have a positive number of elements. */
9447 if (tree_int_cst_lt (size, integer_zero_node))
9449 if (!(complain & tf_error))
9450 return error_mark_node;
9451 if (name)
9452 error ("size of array %qD is negative", name);
9453 else
9454 error ("size of array is negative");
9455 size = integer_one_node;
9457 /* As an extension we allow zero-sized arrays. */
9458 else if (integer_zerop (size))
9460 if (!(complain & tf_error))
9461 /* We must fail if performing argument deduction (as
9462 indicated by the state of complain), so that
9463 another substitution can be found. */
9464 return error_mark_node;
9465 else if (in_system_header_at (input_location))
9466 /* Allow them in system headers because glibc uses them. */;
9467 else if (name)
9468 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9469 else
9470 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9473 else if (TREE_CONSTANT (size)
9474 /* We don't allow VLAs at non-function scopes, or during
9475 tentative template substitution. */
9476 || !at_function_scope_p ()
9477 || !(complain & tf_error))
9479 if (!(complain & tf_error))
9480 return error_mark_node;
9481 /* `(int) &fn' is not a valid array bound. */
9482 if (name)
9483 error ("size of array %qD is not an integral constant-expression",
9484 name);
9485 else
9486 error ("size of array is not an integral constant-expression");
9487 size = integer_one_node;
9489 else if (pedantic && warn_vla != 0)
9491 if (name)
9492 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9493 else
9494 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9496 else if (warn_vla > 0)
9498 if (name)
9499 warning (OPT_Wvla,
9500 "variable length array %qD is used", name);
9501 else
9502 warning (OPT_Wvla,
9503 "variable length array is used");
9506 if (processing_template_decl && !TREE_CONSTANT (size))
9507 /* A variable sized array. */
9508 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9509 else
9511 HOST_WIDE_INT saved_processing_template_decl;
9513 /* Compute the index of the largest element in the array. It is
9514 one less than the number of elements in the array. We save
9515 and restore PROCESSING_TEMPLATE_DECL so that computations in
9516 cp_build_binary_op will be appropriately folded. */
9517 saved_processing_template_decl = processing_template_decl;
9518 processing_template_decl = 0;
9519 itype = cp_build_binary_op (input_location,
9520 MINUS_EXPR,
9521 cp_convert (ssizetype, size, complain),
9522 cp_convert (ssizetype, integer_one_node,
9523 complain),
9524 complain);
9525 itype = maybe_constant_value (itype);
9526 processing_template_decl = saved_processing_template_decl;
9528 if (!TREE_CONSTANT (itype))
9530 /* A variable sized array. */
9531 itype = variable_size (itype);
9533 stabilize_vla_size (itype);
9535 if (flag_sanitize & SANITIZE_VLA
9536 && do_ubsan_in_current_function ())
9538 /* We have to add 1 -- in the ubsan routine we generate
9539 LE_EXPR rather than LT_EXPR. */
9540 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9541 build_one_cst (TREE_TYPE (itype)));
9542 t = ubsan_instrument_vla (input_location, t);
9543 finish_expr_stmt (t);
9546 /* Make sure that there was no overflow when creating to a signed
9547 index type. (For example, on a 32-bit machine, an array with
9548 size 2^32 - 1 is too big.) */
9549 else if (TREE_CODE (itype) == INTEGER_CST
9550 && TREE_OVERFLOW (itype))
9552 if (!(complain & tf_error))
9553 return error_mark_node;
9554 error ("overflow in array dimension");
9555 TREE_OVERFLOW (itype) = 0;
9559 /* Create and return the appropriate index type. */
9560 itype = build_index_type (itype);
9562 /* If the index type were dependent, we would have returned early, so
9563 remember that it isn't. */
9564 TYPE_DEPENDENT_P (itype) = 0;
9565 TYPE_DEPENDENT_P_VALID (itype) = 1;
9566 return itype;
9569 /* Returns the scope (if any) in which the entity declared by
9570 DECLARATOR will be located. If the entity was declared with an
9571 unqualified name, NULL_TREE is returned. */
9573 tree
9574 get_scope_of_declarator (const cp_declarator *declarator)
9576 while (declarator && declarator->kind != cdk_id)
9577 declarator = declarator->declarator;
9579 /* If the declarator-id is a SCOPE_REF, the scope in which the
9580 declaration occurs is the first operand. */
9581 if (declarator
9582 && declarator->u.id.qualifying_scope)
9583 return declarator->u.id.qualifying_scope;
9585 /* Otherwise, the declarator is not a qualified name; the entity will
9586 be declared in the current scope. */
9587 return NULL_TREE;
9590 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9591 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9592 with this type. */
9594 static tree
9595 create_array_type_for_decl (tree name, tree type, tree size)
9597 tree itype = NULL_TREE;
9599 /* If things have already gone awry, bail now. */
9600 if (type == error_mark_node || size == error_mark_node)
9601 return error_mark_node;
9603 /* 8.3.4/1: If the type of the identifier of D contains the auto
9604 type-specifier, the program is ill-formed. */
9605 if (type_uses_auto (type))
9607 error ("%qD declared as array of %qT", name, type);
9608 return error_mark_node;
9611 /* If there are some types which cannot be array elements,
9612 issue an error-message and return. */
9613 switch (TREE_CODE (type))
9615 case VOID_TYPE:
9616 if (name)
9617 error ("declaration of %qD as array of void", name);
9618 else
9619 error ("creating array of void");
9620 return error_mark_node;
9622 case FUNCTION_TYPE:
9623 if (name)
9624 error ("declaration of %qD as array of functions", name);
9625 else
9626 error ("creating array of functions");
9627 return error_mark_node;
9629 case REFERENCE_TYPE:
9630 if (name)
9631 error ("declaration of %qD as array of references", name);
9632 else
9633 error ("creating array of references");
9634 return error_mark_node;
9636 case METHOD_TYPE:
9637 if (name)
9638 error ("declaration of %qD as array of function members", name);
9639 else
9640 error ("creating array of function members");
9641 return error_mark_node;
9643 default:
9644 break;
9647 /* [dcl.array]
9649 The constant expressions that specify the bounds of the arrays
9650 can be omitted only for the first member of the sequence. */
9651 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9653 if (name)
9654 error ("declaration of %qD as multidimensional array must "
9655 "have bounds for all dimensions except the first",
9656 name);
9657 else
9658 error ("multidimensional array must have bounds for all "
9659 "dimensions except the first");
9661 return error_mark_node;
9664 /* Figure out the index type for the array. */
9665 if (size)
9666 itype = compute_array_index_type (name, size, tf_warning_or_error);
9668 /* [dcl.array]
9669 T is called the array element type; this type shall not be [...] an
9670 abstract class type. */
9671 abstract_virtuals_error (name, type);
9673 return build_cplus_array_type (type, itype);
9676 /* Returns the smallest location != UNKNOWN_LOCATION among the
9677 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9678 and LOCATIONS[ds_restrict]. */
9680 static location_t
9681 smallest_type_quals_location (int type_quals, const location_t* locations)
9683 location_t loc = UNKNOWN_LOCATION;
9685 if (type_quals & TYPE_QUAL_CONST)
9686 loc = locations[ds_const];
9688 if ((type_quals & TYPE_QUAL_VOLATILE)
9689 && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc))
9690 loc = locations[ds_volatile];
9692 if ((type_quals & TYPE_QUAL_RESTRICT)
9693 && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc))
9694 loc = locations[ds_restrict];
9696 return loc;
9699 /* Check that it's OK to declare a function with the indicated TYPE
9700 and TYPE_QUALS. SFK indicates the kind of special function (if any)
9701 that this function is. OPTYPE is the type given in a conversion
9702 operator declaration, or the class type for a constructor/destructor.
9703 Returns the actual return type of the function; that may be different
9704 than TYPE if an error occurs, or for certain special functions. */
9706 static tree
9707 check_special_function_return_type (special_function_kind sfk,
9708 tree type,
9709 tree optype,
9710 int type_quals,
9711 const location_t* locations)
9713 switch (sfk)
9715 case sfk_constructor:
9716 if (type)
9717 error ("return type specification for constructor invalid");
9718 else if (type_quals != TYPE_UNQUALIFIED)
9719 error_at (smallest_type_quals_location (type_quals, locations),
9720 "qualifiers are not allowed on constructor declaration");
9722 if (targetm.cxx.cdtor_returns_this ())
9723 type = build_pointer_type (optype);
9724 else
9725 type = void_type_node;
9726 break;
9728 case sfk_destructor:
9729 if (type)
9730 error ("return type specification for destructor invalid");
9731 else if (type_quals != TYPE_UNQUALIFIED)
9732 error_at (smallest_type_quals_location (type_quals, locations),
9733 "qualifiers are not allowed on destructor declaration");
9735 /* We can't use the proper return type here because we run into
9736 problems with ambiguous bases and covariant returns. */
9737 if (targetm.cxx.cdtor_returns_this ())
9738 type = build_pointer_type (void_type_node);
9739 else
9740 type = void_type_node;
9741 break;
9743 case sfk_conversion:
9744 if (type)
9745 error ("return type specified for %<operator %T%>", optype);
9746 else if (type_quals != TYPE_UNQUALIFIED)
9747 error_at (smallest_type_quals_location (type_quals, locations),
9748 "qualifiers are not allowed on declaration of "
9749 "%<operator %T%>", optype);
9751 type = optype;
9752 break;
9754 default:
9755 gcc_unreachable ();
9758 return type;
9761 /* A variable or data member (whose unqualified name is IDENTIFIER)
9762 has been declared with the indicated TYPE. If the TYPE is not
9763 acceptable, issue an error message and return a type to use for
9764 error-recovery purposes. */
9766 tree
9767 check_var_type (tree identifier, tree type)
9769 if (VOID_TYPE_P (type))
9771 if (!identifier)
9772 error ("unnamed variable or field declared void");
9773 else if (identifier_p (identifier))
9775 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
9776 error ("variable or field %qE declared void", identifier);
9778 else
9779 error ("variable or field declared void");
9780 type = error_mark_node;
9783 return type;
9786 /* Handle declaring DECL as an inline variable. */
9788 static void
9789 mark_inline_variable (tree decl)
9791 bool inlinep = true;
9792 if (! toplevel_bindings_p ())
9794 error ("%<inline%> specifier invalid for variable "
9795 "%qD declared at block scope", decl);
9796 inlinep = false;
9798 else if (cxx_dialect < cxx1z)
9799 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
9800 "inline variables are only available "
9801 "with -std=c++1z or -std=gnu++1z");
9802 if (inlinep)
9804 retrofit_lang_decl (decl);
9805 SET_DECL_VAR_DECLARED_INLINE_P (decl);
9809 /* Given declspecs and a declarator (abstract or otherwise), determine
9810 the name and type of the object declared and construct a DECL node
9811 for it.
9813 DECLSPECS points to the representation of declaration-specifier
9814 sequence that precedes declarator.
9816 DECL_CONTEXT says which syntactic context this declaration is in:
9817 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9818 FUNCDEF for a function definition. Like NORMAL but a few different
9819 error messages in each case. Return value may be zero meaning
9820 this definition is too screwy to try to parse.
9821 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9822 handle member functions (which have FIELD context).
9823 Return value may be zero meaning this definition is too screwy to
9824 try to parse.
9825 PARM for a parameter declaration (either within a function prototype
9826 or before a function body). Make a PARM_DECL, or return void_type_node.
9827 TPARM for a template parameter declaration.
9828 CATCHPARM for a parameter declaration before a catch clause.
9829 TYPENAME if for a typename (in a cast or sizeof).
9830 Don't make a DECL node; just return the ..._TYPE node.
9831 FIELD for a struct or union field; make a FIELD_DECL.
9832 BITFIELD for a field with specified width.
9834 INITIALIZED is as for start_decl.
9836 ATTRLIST is a pointer to the list of attributes, which may be NULL
9837 if there are none; *ATTRLIST may be modified if attributes from inside
9838 the declarator should be applied to the declaration.
9840 When this function is called, scoping variables (such as
9841 CURRENT_CLASS_TYPE) should reflect the scope in which the
9842 declaration occurs, not the scope in which the new declaration will
9843 be placed. For example, on:
9845 void S::f() { ... }
9847 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
9848 should not be `S'.
9850 Returns a DECL (if a declarator is present), a TYPE (if there is no
9851 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
9852 error occurs. */
9854 tree
9855 grokdeclarator (const cp_declarator *declarator,
9856 cp_decl_specifier_seq *declspecs,
9857 enum decl_context decl_context,
9858 int initialized,
9859 tree* attrlist)
9861 tree type = NULL_TREE;
9862 int longlong = 0;
9863 int explicit_intN = 0;
9864 int virtualp, explicitp, friendp, inlinep, staticp;
9865 int explicit_int = 0;
9866 int explicit_char = 0;
9867 int defaulted_int = 0;
9869 tree typedef_decl = NULL_TREE;
9870 const char *name = NULL;
9871 tree typedef_type = NULL_TREE;
9872 /* True if this declarator is a function definition. */
9873 bool funcdef_flag = false;
9874 cp_declarator_kind innermost_code = cdk_error;
9875 int bitfield = 0;
9876 #if 0
9877 /* See the code below that used this. */
9878 tree decl_attr = NULL_TREE;
9879 #endif
9881 /* Keep track of what sort of function is being processed
9882 so that we can warn about default return values, or explicit
9883 return values which do not match prescribed defaults. */
9884 special_function_kind sfk = sfk_none;
9886 tree dname = NULL_TREE;
9887 tree ctor_return_type = NULL_TREE;
9888 enum overload_flags flags = NO_SPECIAL;
9889 /* cv-qualifiers that apply to the declarator, for a declaration of
9890 a member function. */
9891 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
9892 /* virt-specifiers that apply to the declarator, for a declaration of
9893 a member function. */
9894 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
9895 /* ref-qualifier that applies to the declarator, for a declaration of
9896 a member function. */
9897 cp_ref_qualifier rqual = REF_QUAL_NONE;
9898 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
9899 int type_quals = TYPE_UNQUALIFIED;
9900 tree raises = NULL_TREE;
9901 int template_count = 0;
9902 tree returned_attrs = NULL_TREE;
9903 tree parms = NULL_TREE;
9904 const cp_declarator *id_declarator;
9905 /* The unqualified name of the declarator; either an
9906 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
9907 tree unqualified_id;
9908 /* The class type, if any, in which this entity is located,
9909 or NULL_TREE if none. Note that this value may be different from
9910 the current class type; for example if an attempt is made to declare
9911 "A::f" inside "B", this value will be "A". */
9912 tree ctype = current_class_type;
9913 /* The NAMESPACE_DECL for the namespace in which this entity is
9914 located. If an unqualified name is used to declare the entity,
9915 this value will be NULL_TREE, even if the entity is located at
9916 namespace scope. */
9917 tree in_namespace = NULL_TREE;
9918 cp_storage_class storage_class;
9919 bool unsigned_p, signed_p, short_p, long_p, thread_p;
9920 bool type_was_error_mark_node = false;
9921 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
9922 bool template_type_arg = false;
9923 bool template_parm_flag = false;
9924 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
9925 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
9926 bool late_return_type_p = false;
9927 bool array_parameter_p = false;
9928 source_location saved_loc = input_location;
9929 tree reqs = NULL_TREE;
9931 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
9932 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
9933 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
9934 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
9935 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
9936 explicit_intN = declspecs->explicit_intN_p;
9937 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
9939 // Was concept_p specified? Note that ds_concept
9940 // implies ds_constexpr!
9941 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
9942 if (concept_p)
9943 constexpr_p = true;
9945 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9946 type_quals |= TYPE_QUAL_CONST;
9947 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9948 type_quals |= TYPE_QUAL_VOLATILE;
9949 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9950 type_quals |= TYPE_QUAL_RESTRICT;
9952 if (decl_context == FUNCDEF)
9953 funcdef_flag = true, decl_context = NORMAL;
9954 else if (decl_context == MEMFUNCDEF)
9955 funcdef_flag = true, decl_context = FIELD;
9956 else if (decl_context == BITFIELD)
9957 bitfield = 1, decl_context = FIELD;
9958 else if (decl_context == TEMPLATE_TYPE_ARG)
9959 template_type_arg = true, decl_context = TYPENAME;
9960 else if (decl_context == TPARM)
9961 template_parm_flag = true, decl_context = PARM;
9963 if (initialized > 1)
9964 funcdef_flag = true;
9966 location_t typespec_loc = smallest_type_quals_location (type_quals,
9967 declspecs->locations);
9968 if (typespec_loc == UNKNOWN_LOCATION)
9969 typespec_loc = declspecs->locations[ds_type_spec];
9971 /* Look inside a declarator for the name being declared
9972 and get it as a string, for an error message. */
9973 for (id_declarator = declarator;
9974 id_declarator;
9975 id_declarator = id_declarator->declarator)
9977 if (id_declarator->kind != cdk_id)
9978 innermost_code = id_declarator->kind;
9980 switch (id_declarator->kind)
9982 case cdk_function:
9983 if (id_declarator->declarator
9984 && id_declarator->declarator->kind == cdk_id)
9986 sfk = id_declarator->declarator->u.id.sfk;
9987 if (sfk == sfk_destructor)
9988 flags = DTOR_FLAG;
9990 break;
9992 case cdk_id:
9994 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
9995 tree decl = id_declarator->u.id.unqualified_name;
9996 if (!decl)
9997 break;
9998 if (qualifying_scope)
10000 if (at_function_scope_p ())
10002 /* [dcl.meaning]
10004 A declarator-id shall not be qualified except
10005 for ...
10007 None of the cases are permitted in block
10008 scope. */
10009 if (qualifying_scope == global_namespace)
10010 error ("invalid use of qualified-name %<::%D%>",
10011 decl);
10012 else if (TYPE_P (qualifying_scope))
10013 error ("invalid use of qualified-name %<%T::%D%>",
10014 qualifying_scope, decl);
10015 else
10016 error ("invalid use of qualified-name %<%D::%D%>",
10017 qualifying_scope, decl);
10018 return error_mark_node;
10020 else if (TYPE_P (qualifying_scope))
10022 ctype = qualifying_scope;
10023 if (!MAYBE_CLASS_TYPE_P (ctype))
10025 error ("%q#T is not a class or a namespace", ctype);
10026 ctype = NULL_TREE;
10028 else if (innermost_code != cdk_function
10029 && current_class_type
10030 && !uniquely_derived_from_p (ctype,
10031 current_class_type))
10033 error ("invalid use of qualified-name %<%T::%D%>",
10034 qualifying_scope, decl);
10035 return error_mark_node;
10038 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10039 in_namespace = qualifying_scope;
10041 switch (TREE_CODE (decl))
10043 case BIT_NOT_EXPR:
10045 tree type;
10047 if (innermost_code != cdk_function)
10049 error ("declaration of %qD as non-function", decl);
10050 return error_mark_node;
10052 else if (!qualifying_scope
10053 && !(current_class_type && at_class_scope_p ()))
10055 error ("declaration of %qD as non-member", decl);
10056 return error_mark_node;
10059 type = TREE_OPERAND (decl, 0);
10060 if (TYPE_P (type))
10061 type = constructor_name (type);
10062 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10063 dname = decl;
10065 break;
10067 case TEMPLATE_ID_EXPR:
10069 tree fns = TREE_OPERAND (decl, 0);
10071 dname = fns;
10072 if (!identifier_p (dname))
10074 if (variable_template_p (dname))
10075 dname = DECL_NAME (dname);
10076 else
10078 gcc_assert (is_overloaded_fn (dname));
10079 dname = DECL_NAME (get_first_fn (dname));
10083 /* Fall through. */
10085 case IDENTIFIER_NODE:
10086 if (identifier_p (decl))
10087 dname = decl;
10089 if (C_IS_RESERVED_WORD (dname))
10091 error ("declarator-id missing; using reserved word %qD",
10092 dname);
10093 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10095 else if (!IDENTIFIER_TYPENAME_P (dname))
10096 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10097 else
10099 gcc_assert (flags == NO_SPECIAL);
10100 flags = TYPENAME_FLAG;
10101 ctor_return_type = TREE_TYPE (dname);
10102 sfk = sfk_conversion;
10103 if (is_typename_at_global_scope (dname))
10104 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10105 else
10106 name = "<invalid operator>";
10108 break;
10110 default:
10111 gcc_unreachable ();
10113 break;
10116 case cdk_array:
10117 case cdk_pointer:
10118 case cdk_reference:
10119 case cdk_ptrmem:
10120 break;
10122 case cdk_decomp:
10123 name = "decomposition";
10124 break;
10126 case cdk_error:
10127 return error_mark_node;
10129 default:
10130 gcc_unreachable ();
10132 if (id_declarator->kind == cdk_id)
10133 break;
10136 /* [dcl.fct.edf]
10138 The declarator in a function-definition shall have the form
10139 D1 ( parameter-declaration-clause) ... */
10140 if (funcdef_flag && innermost_code != cdk_function)
10142 error ("function definition does not declare parameters");
10143 return error_mark_node;
10146 if (flags == TYPENAME_FLAG
10147 && innermost_code != cdk_function
10148 && ! (ctype && !declspecs->any_specifiers_p))
10150 error ("declaration of %qD as non-function", dname);
10151 return error_mark_node;
10154 if (dname
10155 && identifier_p (dname)
10156 && UDLIT_OPER_P (dname)
10157 && innermost_code != cdk_function)
10159 error ("declaration of %qD as non-function", dname);
10160 return error_mark_node;
10163 if (dname && IDENTIFIER_OPNAME_P (dname))
10165 if (typedef_p)
10167 error ("declaration of %qD as %<typedef%>", dname);
10168 return error_mark_node;
10170 else if (decl_context == PARM || decl_context == CATCHPARM)
10172 error ("declaration of %qD as parameter", dname);
10173 return error_mark_node;
10177 /* Anything declared one level down from the top level
10178 must be one of the parameters of a function
10179 (because the body is at least two levels down). */
10181 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10182 by not allowing C++ class definitions to specify their parameters
10183 with xdecls (must be spec.d in the parmlist).
10185 Since we now wait to push a class scope until we are sure that
10186 we are in a legitimate method context, we must set oldcname
10187 explicitly (since current_class_name is not yet alive).
10189 We also want to avoid calling this a PARM if it is in a namespace. */
10191 if (decl_context == NORMAL && !toplevel_bindings_p ())
10193 cp_binding_level *b = current_binding_level;
10194 current_binding_level = b->level_chain;
10195 if (current_binding_level != 0 && toplevel_bindings_p ())
10196 decl_context = PARM;
10197 current_binding_level = b;
10200 if (name == NULL)
10201 name = decl_context == PARM ? "parameter" : "type name";
10203 if (concept_p && typedef_p)
10205 error ("%<concept%> cannot appear in a typedef declaration");
10206 return error_mark_node;
10209 if (constexpr_p && typedef_p)
10211 error ("%<constexpr%> cannot appear in a typedef declaration");
10212 return error_mark_node;
10215 /* If there were multiple types specified in the decl-specifier-seq,
10216 issue an error message. */
10217 if (declspecs->multiple_types_p)
10219 error ("two or more data types in declaration of %qs", name);
10220 return error_mark_node;
10223 if (declspecs->conflicting_specifiers_p)
10225 error ("conflicting specifiers in declaration of %qs", name);
10226 return error_mark_node;
10229 /* Extract the basic type from the decl-specifier-seq. */
10230 type = declspecs->type;
10231 if (type == error_mark_node)
10233 type = NULL_TREE;
10234 type_was_error_mark_node = true;
10236 /* If the entire declaration is itself tagged as deprecated then
10237 suppress reports of deprecated items. */
10238 if (type && TREE_DEPRECATED (type)
10239 && deprecated_state != DEPRECATED_SUPPRESS)
10240 warn_deprecated_use (type, NULL_TREE);
10241 if (type && TREE_CODE (type) == TYPE_DECL)
10243 typedef_decl = type;
10244 type = TREE_TYPE (typedef_decl);
10245 if (TREE_DEPRECATED (type)
10246 && DECL_ARTIFICIAL (typedef_decl)
10247 && deprecated_state != DEPRECATED_SUPPRESS)
10248 warn_deprecated_use (type, NULL_TREE);
10250 /* No type at all: default to `int', and set DEFAULTED_INT
10251 because it was not a user-defined typedef. */
10252 if (type == NULL_TREE)
10254 if (signed_p || unsigned_p || long_p || short_p)
10256 /* These imply 'int'. */
10257 type = integer_type_node;
10258 defaulted_int = 1;
10260 /* If we just have "complex", it is equivalent to "complex double". */
10261 else if (!longlong && !explicit_intN
10262 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10264 type = double_type_node;
10265 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10266 "ISO C++ does not support plain %<complex%> meaning "
10267 "%<double complex%>");
10270 /* Gather flags. */
10271 explicit_int = declspecs->explicit_int_p;
10272 explicit_char = declspecs->explicit_char_p;
10274 #if 0
10275 /* See the code below that used this. */
10276 if (typedef_decl)
10277 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10278 #endif
10279 typedef_type = type;
10282 if (sfk != sfk_conversion)
10283 ctor_return_type = ctype;
10285 if (sfk != sfk_none)
10287 type = check_special_function_return_type (sfk, type,
10288 ctor_return_type,
10289 type_quals,
10290 declspecs->locations);
10291 type_quals = TYPE_UNQUALIFIED;
10293 else if (type == NULL_TREE)
10295 int is_main;
10297 explicit_int = -1;
10299 /* We handle `main' specially here, because 'main () { }' is so
10300 common. With no options, it is allowed. With -Wreturn-type,
10301 it is a warning. It is only an error with -pedantic-errors. */
10302 is_main = (funcdef_flag
10303 && dname && identifier_p (dname)
10304 && MAIN_NAME_P (dname)
10305 && ctype == NULL_TREE
10306 && in_namespace == NULL_TREE
10307 && current_namespace == global_namespace);
10309 if (type_was_error_mark_node)
10310 /* We've already issued an error, don't complain more. */;
10311 else if (in_system_header_at (input_location) || flag_ms_extensions)
10312 /* Allow it, sigh. */;
10313 else if (! is_main)
10314 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10315 else if (pedantic)
10316 pedwarn (input_location, OPT_Wpedantic,
10317 "ISO C++ forbids declaration of %qs with no type", name);
10318 else
10319 warning (OPT_Wreturn_type,
10320 "ISO C++ forbids declaration of %qs with no type", name);
10322 if (type_was_error_mark_node && template_parm_flag)
10323 /* FIXME we should be able to propagate the error_mark_node as is
10324 for other contexts too. */
10325 type = error_mark_node;
10326 else
10327 type = integer_type_node;
10330 ctype = NULL_TREE;
10332 if (explicit_intN)
10334 if (! int_n_enabled_p[declspecs->int_n_idx])
10336 error ("%<__int%d%> is not supported by this target",
10337 int_n_data[declspecs->int_n_idx].bitsize);
10338 explicit_intN = false;
10340 else if (pedantic && ! in_system_header_at (input_location))
10341 pedwarn (input_location, OPT_Wpedantic,
10342 "ISO C++ does not support %<__int%d%> for %qs",
10343 int_n_data[declspecs->int_n_idx].bitsize, name);
10346 /* Now process the modifiers that were specified
10347 and check for invalid combinations. */
10349 /* Long double is a special combination. */
10350 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10352 long_p = false;
10353 type = cp_build_qualified_type (long_double_type_node,
10354 cp_type_quals (type));
10357 /* Check all other uses of type modifiers. */
10359 if (unsigned_p || signed_p || long_p || short_p)
10361 int ok = 0;
10363 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
10364 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10365 else if (signed_p && unsigned_p)
10366 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
10367 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
10368 error ("%<long long%> invalid for %qs", name);
10369 else if (long_p && TREE_CODE (type) == REAL_TYPE)
10370 error ("%<long%> invalid for %qs", name);
10371 else if (short_p && TREE_CODE (type) == REAL_TYPE)
10372 error ("%<short%> invalid for %qs", name);
10373 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
10374 error ("%<long%> or %<short%> invalid for %qs", name);
10375 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
10376 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
10377 else if ((long_p || short_p) && explicit_char)
10378 error ("%<long%> or %<short%> specified with char for %qs", name);
10379 else if (long_p && short_p)
10380 error ("%<long%> and %<short%> specified together for %qs", name);
10381 else if (type == char16_type_node || type == char32_type_node)
10383 if (signed_p || unsigned_p)
10384 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10385 else if (short_p || long_p)
10386 error ("%<short%> or %<long%> invalid for %qs", name);
10388 else
10390 ok = 1;
10391 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
10393 pedwarn (input_location, OPT_Wpedantic,
10394 "long, short, signed or unsigned used invalidly for %qs",
10395 name);
10396 if (flag_pedantic_errors)
10397 ok = 0;
10401 /* Discard the type modifiers if they are invalid. */
10402 if (! ok)
10404 unsigned_p = false;
10405 signed_p = false;
10406 long_p = false;
10407 short_p = false;
10408 longlong = 0;
10412 /* Decide whether an integer type is signed or not.
10413 Optionally treat bitfields as signed by default. */
10414 if (unsigned_p
10415 /* [class.bit]
10417 It is implementation-defined whether a plain (neither
10418 explicitly signed or unsigned) char, short, int, or long
10419 bit-field is signed or unsigned.
10421 Naturally, we extend this to long long as well. Note that
10422 this does not include wchar_t. */
10423 || (bitfield && !flag_signed_bitfields
10424 && !signed_p
10425 /* A typedef for plain `int' without `signed' can be
10426 controlled just like plain `int', but a typedef for
10427 `signed int' cannot be so controlled. */
10428 && !(typedef_decl
10429 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10430 && TREE_CODE (type) == INTEGER_TYPE
10431 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10433 if (explicit_intN)
10434 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10435 else if (longlong)
10436 type = long_long_unsigned_type_node;
10437 else if (long_p)
10438 type = long_unsigned_type_node;
10439 else if (short_p)
10440 type = short_unsigned_type_node;
10441 else if (type == char_type_node)
10442 type = unsigned_char_type_node;
10443 else if (typedef_decl)
10444 type = unsigned_type_for (type);
10445 else
10446 type = unsigned_type_node;
10448 else if (signed_p && type == char_type_node)
10449 type = signed_char_type_node;
10450 else if (explicit_intN)
10451 type = int_n_trees[declspecs->int_n_idx].signed_type;
10452 else if (longlong)
10453 type = long_long_integer_type_node;
10454 else if (long_p)
10455 type = long_integer_type_node;
10456 else if (short_p)
10457 type = short_integer_type_node;
10459 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10461 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10462 error ("complex invalid for %qs", name);
10463 /* If a modifier is specified, the resulting complex is the complex
10464 form of TYPE. E.g, "complex short" is "complex short int". */
10465 else if (type == integer_type_node)
10466 type = complex_integer_type_node;
10467 else if (type == float_type_node)
10468 type = complex_float_type_node;
10469 else if (type == double_type_node)
10470 type = complex_double_type_node;
10471 else if (type == long_double_type_node)
10472 type = complex_long_double_type_node;
10473 else
10474 type = build_complex_type (type);
10477 /* If we're using the injected-class-name to form a compound type or a
10478 declaration, replace it with the underlying class so we don't get
10479 redundant typedefs in the debug output. But if we are returning the
10480 type unchanged, leave it alone so that it's available to
10481 maybe_get_template_decl_from_type_decl. */
10482 if (CLASS_TYPE_P (type)
10483 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10484 && type == TREE_TYPE (TYPE_NAME (type))
10485 && (declarator || type_quals))
10486 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10488 type_quals |= cp_type_quals (type);
10489 type = cp_build_qualified_type_real
10490 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10491 || declspecs->decltype_p)
10492 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10493 /* We might have ignored or rejected some of the qualifiers. */
10494 type_quals = cp_type_quals (type);
10496 if (cxx_dialect >= cxx1z && type && is_auto (type)
10497 && innermost_code != cdk_function
10498 && id_declarator && declarator != id_declarator)
10499 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10501 error_at (typespec_loc, "template placeholder type %qT must be followed "
10502 "by a simple declarator-id", type);
10503 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10506 staticp = 0;
10507 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10508 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10509 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10511 storage_class = declspecs->storage_class;
10512 if (storage_class == sc_static)
10513 staticp = 1 + (decl_context == FIELD);
10515 if (virtualp)
10517 if (staticp == 2)
10519 error ("member %qD cannot be declared both %<virtual%> "
10520 "and %<static%>", dname);
10521 storage_class = sc_none;
10522 staticp = 0;
10524 if (constexpr_p)
10525 error ("member %qD cannot be declared both %<virtual%> "
10526 "and %<constexpr%>", dname);
10528 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10530 /* Issue errors about use of storage classes for parameters. */
10531 if (decl_context == PARM)
10533 if (typedef_p)
10535 error ("typedef declaration invalid in parameter declaration");
10536 return error_mark_node;
10538 else if (template_parm_flag && storage_class != sc_none)
10540 error ("storage class specified for template parameter %qs", name);
10541 return error_mark_node;
10543 else if (storage_class == sc_static
10544 || storage_class == sc_extern
10545 || thread_p)
10546 error ("storage class specifiers invalid in parameter declarations");
10548 /* Function parameters cannot be concept. */
10549 if (concept_p)
10550 error ("a parameter cannot be declared %<concept%>");
10551 /* Function parameters cannot be constexpr. If we saw one, moan
10552 and pretend it wasn't there. */
10553 else if (constexpr_p)
10555 error ("a parameter cannot be declared %<constexpr%>");
10556 constexpr_p = 0;
10560 /* Give error if `virtual' is used outside of class declaration. */
10561 if (virtualp
10562 && (current_class_name == NULL_TREE || decl_context != FIELD))
10564 error_at (declspecs->locations[ds_virtual],
10565 "%<virtual%> outside class declaration");
10566 virtualp = 0;
10569 if (innermost_code == cdk_decomp)
10571 location_t loc = (declarator->kind == cdk_reference
10572 ? declarator->declarator->id_loc : declarator->id_loc);
10573 if (inlinep)
10574 error_at (declspecs->locations[ds_inline],
10575 "decomposition declaration cannot be declared %<inline%>");
10576 if (typedef_p)
10577 error_at (declspecs->locations[ds_typedef],
10578 "decomposition declaration cannot be declared %<typedef%>");
10579 if (constexpr_p)
10580 error_at (declspecs->locations[ds_constexpr], "decomposition "
10581 "declaration cannot be declared %<constexpr%>");
10582 if (thread_p)
10583 error_at (declspecs->locations[ds_thread],
10584 "decomposition declaration cannot be declared %qs",
10585 declspecs->gnu_thread_keyword_p
10586 ? "__thread" : "thread_local");
10587 if (concept_p)
10588 error_at (declspecs->locations[ds_concept],
10589 "decomposition declaration cannot be declared %<concept%>");
10590 switch (storage_class)
10592 case sc_none:
10593 break;
10594 case sc_register:
10595 error_at (loc, "decomposition declaration cannot be declared "
10596 "%<register%>");
10597 break;
10598 case sc_static:
10599 error_at (loc, "decomposition declaration cannot be declared "
10600 "%<static%>");
10601 break;
10602 case sc_extern:
10603 error_at (loc, "decomposition declaration cannot be declared "
10604 "%<extern%>");
10605 break;
10606 case sc_mutable:
10607 error_at (loc, "decomposition declaration cannot be declared "
10608 "%<mutable%>");
10609 break;
10610 case sc_auto:
10611 error_at (loc, "decomposition declaration cannot be declared "
10612 "C++98 %<auto%>");
10613 break;
10614 default:
10615 gcc_unreachable ();
10617 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
10618 || TYPE_IDENTIFIER (type) != auto_identifier)
10620 if (type != error_mark_node)
10622 error_at (loc, "decomposition declaration cannot be declared "
10623 "with type %qT", type);
10624 inform (loc,
10625 "type must be cv-qualified %<auto%> or reference to "
10626 "cv-qualified %<auto%>");
10628 type = build_qualified_type (make_auto (), type_quals);
10629 declspecs->type = type;
10631 inlinep = 0;
10632 typedef_p = 0;
10633 constexpr_p = 0;
10634 thread_p = 0;
10635 concept_p = 0;
10636 storage_class = sc_none;
10637 staticp = 0;
10638 declspecs->storage_class = sc_none;
10639 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
10642 /* Static anonymous unions are dealt with here. */
10643 if (staticp && decl_context == TYPENAME
10644 && declspecs->type
10645 && ANON_AGGR_TYPE_P (declspecs->type))
10646 decl_context = FIELD;
10648 /* Warn about storage classes that are invalid for certain
10649 kinds of declarations (parameters, typenames, etc.). */
10650 if (thread_p
10651 && ((storage_class
10652 && storage_class != sc_extern
10653 && storage_class != sc_static)
10654 || typedef_p))
10656 error ("multiple storage classes in declaration of %qs", name);
10657 thread_p = false;
10659 if (decl_context != NORMAL
10660 && ((storage_class != sc_none
10661 && storage_class != sc_mutable)
10662 || thread_p))
10664 if ((decl_context == PARM || decl_context == CATCHPARM)
10665 && (storage_class == sc_register
10666 || storage_class == sc_auto))
10668 else if (typedef_p)
10670 else if (decl_context == FIELD
10671 /* C++ allows static class elements. */
10672 && storage_class == sc_static)
10673 /* C++ also allows inlines and signed and unsigned elements,
10674 but in those cases we don't come in here. */
10676 else
10678 if (decl_context == FIELD)
10679 error ("storage class specified for %qs", name);
10680 else
10682 if (decl_context == PARM || decl_context == CATCHPARM)
10683 error ("storage class specified for parameter %qs", name);
10684 else
10685 error ("storage class specified for typename");
10687 if (storage_class == sc_register
10688 || storage_class == sc_auto
10689 || storage_class == sc_extern
10690 || thread_p)
10691 storage_class = sc_none;
10694 else if (storage_class == sc_extern && funcdef_flag
10695 && ! toplevel_bindings_p ())
10696 error ("nested function %qs declared %<extern%>", name);
10697 else if (toplevel_bindings_p ())
10699 if (storage_class == sc_auto)
10700 error ("top-level declaration of %qs specifies %<auto%>", name);
10702 else if (thread_p
10703 && storage_class != sc_extern
10704 && storage_class != sc_static)
10706 if (declspecs->gnu_thread_keyword_p)
10707 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
10708 "declared %<__thread%>", name);
10710 /* When thread_local is applied to a variable of block scope the
10711 storage-class-specifier static is implied if it does not appear
10712 explicitly. */
10713 storage_class = declspecs->storage_class = sc_static;
10714 staticp = 1;
10717 if (storage_class && friendp)
10719 error ("storage class specifiers invalid in friend function declarations");
10720 storage_class = sc_none;
10721 staticp = 0;
10724 if (!id_declarator)
10725 unqualified_id = NULL_TREE;
10726 else
10728 unqualified_id = id_declarator->u.id.unqualified_name;
10729 switch (TREE_CODE (unqualified_id))
10731 case BIT_NOT_EXPR:
10732 unqualified_id = TREE_OPERAND (unqualified_id, 0);
10733 if (TYPE_P (unqualified_id))
10734 unqualified_id = constructor_name (unqualified_id);
10735 break;
10737 case IDENTIFIER_NODE:
10738 case TEMPLATE_ID_EXPR:
10739 break;
10741 default:
10742 gcc_unreachable ();
10746 if (declspecs->std_attributes)
10748 /* Apply the c++11 attributes to the type preceding them. */
10749 input_location = declspecs->locations[ds_std_attribute];
10750 decl_attributes (&type, declspecs->std_attributes, 0);
10751 input_location = saved_loc;
10754 /* Determine the type of the entity declared by recurring on the
10755 declarator. */
10756 for (; declarator; declarator = declarator->declarator)
10758 const cp_declarator *inner_declarator;
10759 tree attrs;
10761 if (type == error_mark_node)
10762 return error_mark_node;
10764 attrs = declarator->attributes;
10765 if (attrs)
10767 int attr_flags;
10769 attr_flags = 0;
10770 if (declarator == NULL || declarator->kind == cdk_id)
10771 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
10772 if (declarator->kind == cdk_function)
10773 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
10774 if (declarator->kind == cdk_array)
10775 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
10776 returned_attrs = decl_attributes (&type,
10777 chainon (returned_attrs, attrs),
10778 attr_flags);
10781 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
10782 break;
10784 inner_declarator = declarator->declarator;
10786 switch (declarator->kind)
10788 case cdk_array:
10789 type = create_array_type_for_decl (dname, type,
10790 declarator->u.array.bounds);
10791 if (!valid_array_size_p (input_location, type, dname))
10792 type = error_mark_node;
10794 if (declarator->std_attributes)
10795 /* [dcl.array]/1:
10797 The optional attribute-specifier-seq appertains to the
10798 array. */
10799 returned_attrs = chainon (returned_attrs,
10800 declarator->std_attributes);
10801 break;
10803 case cdk_function:
10805 tree arg_types;
10806 int funcdecl_p;
10808 /* Declaring a function type.
10809 Make sure we have a valid type for the function to return. */
10811 if (type_quals != TYPE_UNQUALIFIED)
10813 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
10815 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
10816 "qualifiers ignored on function return type");
10818 /* We now know that the TYPE_QUALS don't apply to the
10819 decl, but to its return type. */
10820 type_quals = TYPE_UNQUALIFIED;
10823 /* Error about some types functions can't return. */
10825 if (TREE_CODE (type) == FUNCTION_TYPE)
10827 error ("%qs declared as function returning a function", name);
10828 return error_mark_node;
10830 if (TREE_CODE (type) == ARRAY_TYPE)
10832 error ("%qs declared as function returning an array", name);
10833 return error_mark_node;
10836 input_location = declspecs->locations[ds_type_spec];
10837 abstract_virtuals_error (ACU_RETURN, type);
10838 input_location = saved_loc;
10840 /* Pick up type qualifiers which should be applied to `this'. */
10841 memfn_quals = declarator->u.function.qualifiers;
10842 /* Pick up virt-specifiers. */
10843 virt_specifiers = declarator->u.function.virt_specifiers;
10844 /* And ref-qualifier, too */
10845 rqual = declarator->u.function.ref_qualifier;
10846 /* And tx-qualifier. */
10847 tree tx_qual = declarator->u.function.tx_qualifier;
10848 /* Pick up the exception specifications. */
10849 raises = declarator->u.function.exception_specification;
10850 /* If the exception-specification is ill-formed, let's pretend
10851 there wasn't one. */
10852 if (raises == error_mark_node)
10853 raises = NULL_TREE;
10855 if (reqs)
10856 error_at (location_of (reqs), "requires-clause on return type");
10857 reqs = declarator->u.function.requires_clause;
10859 /* Say it's a definition only for the CALL_EXPR
10860 closest to the identifier. */
10861 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
10863 /* Handle a late-specified return type. */
10864 tree late_return_type = declarator->u.function.late_return_type;
10865 if (funcdecl_p)
10867 if (tree auto_node = type_uses_auto (type))
10869 if (!late_return_type)
10871 if (current_class_type
10872 && LAMBDA_TYPE_P (current_class_type))
10873 /* OK for C++11 lambdas. */;
10874 else if (cxx_dialect < cxx14)
10876 error ("%qs function uses "
10877 "%<auto%> type specifier without trailing "
10878 "return type", name);
10879 inform (input_location, "deduced return type "
10880 "only available with -std=c++14 or "
10881 "-std=gnu++14");
10883 else if (virtualp)
10885 error ("virtual function cannot "
10886 "have deduced return type");
10887 virtualp = false;
10890 else if (!is_auto (type) && sfk != sfk_conversion)
10892 error ("%qs function with trailing return type has"
10893 " %qT as its type rather than plain %<auto%>",
10894 name, type);
10895 return error_mark_node;
10897 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
10899 if (!late_return_type)
10901 if (dguide_name_p (unqualified_id))
10902 error_at (typespec_loc, "deduction guide for "
10903 "%qT must have trailing return type",
10904 TREE_TYPE (tmpl));
10905 else
10906 error_at (typespec_loc, "deduced class type %qT "
10907 "in function return type", type);
10908 inform (DECL_SOURCE_LOCATION (tmpl),
10909 "%qD declared here", tmpl);
10911 else if (CLASS_TYPE_P (late_return_type)
10912 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
10913 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
10914 == tmpl))
10915 /* OK */;
10916 else
10917 error ("trailing return type %qT of deduction guide "
10918 "is not a specialization of %qT",
10919 late_return_type, TREE_TYPE (tmpl));
10922 else if (late_return_type
10923 && sfk != sfk_conversion)
10925 if (cxx_dialect < cxx11)
10926 /* Not using maybe_warn_cpp0x because this should
10927 always be an error. */
10928 error ("trailing return type only available with "
10929 "-std=c++11 or -std=gnu++11");
10930 else
10931 error ("%qs function with trailing return type not "
10932 "declared with %<auto%> type specifier", name);
10933 return error_mark_node;
10936 type = splice_late_return_type (type, late_return_type);
10937 if (type == error_mark_node)
10938 return error_mark_node;
10940 if (late_return_type)
10941 late_return_type_p = true;
10943 if (ctype == NULL_TREE
10944 && decl_context == FIELD
10945 && funcdecl_p
10946 && friendp == 0)
10947 ctype = current_class_type;
10949 if (ctype && (sfk == sfk_constructor
10950 || sfk == sfk_destructor))
10952 /* We are within a class's scope. If our declarator name
10953 is the same as the class name, and we are defining
10954 a function, then it is a constructor/destructor, and
10955 therefore returns a void type. */
10957 /* ISO C++ 12.4/2. A destructor may not be declared
10958 const or volatile. A destructor may not be static.
10959 A destructor may not be declared with ref-qualifier.
10961 ISO C++ 12.1. A constructor may not be declared
10962 const or volatile. A constructor may not be
10963 virtual. A constructor may not be static.
10964 A constructor may not be declared with ref-qualifier. */
10965 if (staticp == 2)
10966 error ((flags == DTOR_FLAG)
10967 ? G_("destructor cannot be static member function")
10968 : G_("constructor cannot be static member function"));
10969 if (memfn_quals)
10971 error ((flags == DTOR_FLAG)
10972 ? G_("destructors may not be cv-qualified")
10973 : G_("constructors may not be cv-qualified"));
10974 memfn_quals = TYPE_UNQUALIFIED;
10977 if (rqual)
10979 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
10980 error ((flags == DTOR_FLAG)
10981 ? "destructors may not be ref-qualified"
10982 : "constructors may not be ref-qualified");
10983 rqual = REF_QUAL_NONE;
10986 if (decl_context == FIELD
10987 && !member_function_or_else (ctype,
10988 current_class_type,
10989 flags))
10990 return error_mark_node;
10992 if (flags != DTOR_FLAG)
10994 /* It's a constructor. */
10995 if (explicitp == 1)
10996 explicitp = 2;
10997 if (virtualp)
10999 permerror (input_location,
11000 "constructors cannot be declared %<virtual%>");
11001 virtualp = 0;
11003 if (decl_context == FIELD
11004 && sfk != sfk_constructor)
11005 return error_mark_node;
11007 if (decl_context == FIELD)
11008 staticp = 0;
11010 else if (friendp)
11012 if (virtualp)
11014 /* Cannot be both friend and virtual. */
11015 error ("virtual functions cannot be friends");
11016 friendp = 0;
11018 if (decl_context == NORMAL)
11019 error ("friend declaration not in class definition");
11020 if (current_function_decl && funcdef_flag)
11021 error ("can%'t define friend function %qs in a local "
11022 "class definition",
11023 name);
11025 else if (ctype && sfk == sfk_conversion)
11027 if (explicitp == 1)
11029 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11030 explicitp = 2;
11032 if (late_return_type_p)
11033 error ("a conversion function cannot have a trailing return type");
11036 arg_types = grokparms (declarator->u.function.parameters,
11037 &parms);
11039 if (inner_declarator
11040 && inner_declarator->kind == cdk_id
11041 && inner_declarator->u.id.sfk == sfk_destructor
11042 && arg_types != void_list_node)
11044 error ("destructors may not have parameters");
11045 arg_types = void_list_node;
11046 parms = NULL_TREE;
11049 type = build_function_type (type, arg_types);
11051 tree attrs = declarator->std_attributes;
11052 if (tx_qual)
11054 tree att = build_tree_list (tx_qual, NULL_TREE);
11055 /* transaction_safe applies to the type, but
11056 transaction_safe_dynamic applies to the function. */
11057 if (is_attribute_p ("transaction_safe", tx_qual))
11058 attrs = chainon (attrs, att);
11059 else
11060 returned_attrs = chainon (returned_attrs, att);
11062 if (attrs)
11063 /* [dcl.fct]/2:
11065 The optional attribute-specifier-seq appertains to
11066 the function type. */
11067 decl_attributes (&type, attrs, 0);
11069 if (raises)
11070 type = build_exception_variant (type, raises);
11072 break;
11074 case cdk_pointer:
11075 case cdk_reference:
11076 case cdk_ptrmem:
11077 /* Filter out pointers-to-references and references-to-references.
11078 We can get these if a TYPE_DECL is used. */
11080 if (TREE_CODE (type) == REFERENCE_TYPE)
11082 if (declarator->kind != cdk_reference)
11084 error ("cannot declare pointer to %q#T", type);
11085 type = TREE_TYPE (type);
11088 /* In C++0x, we allow reference to reference declarations
11089 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11090 and template type arguments [14.3.1/4 temp.arg.type]. The
11091 check for direct reference to reference declarations, which
11092 are still forbidden, occurs below. Reasoning behind the change
11093 can be found in DR106, DR540, and the rvalue reference
11094 proposals. */
11095 else if (cxx_dialect == cxx98)
11097 error ("cannot declare reference to %q#T", type);
11098 type = TREE_TYPE (type);
11101 else if (VOID_TYPE_P (type))
11103 if (declarator->kind == cdk_reference)
11104 error ("cannot declare reference to %q#T", type);
11105 else if (declarator->kind == cdk_ptrmem)
11106 error ("cannot declare pointer to %q#T member", type);
11109 /* We now know that the TYPE_QUALS don't apply to the decl,
11110 but to the target of the pointer. */
11111 type_quals = TYPE_UNQUALIFIED;
11113 /* This code used to handle METHOD_TYPE, but I don't think it's
11114 possible to get it here anymore. */
11115 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11116 if (declarator->kind == cdk_ptrmem
11117 && TREE_CODE (type) == FUNCTION_TYPE)
11119 memfn_quals |= type_memfn_quals (type);
11120 type = build_memfn_type (type,
11121 declarator->u.pointer.class_type,
11122 memfn_quals,
11123 rqual);
11124 if (type == error_mark_node)
11125 return error_mark_node;
11127 rqual = REF_QUAL_NONE;
11128 memfn_quals = TYPE_UNQUALIFIED;
11131 if (TREE_CODE (type) == FUNCTION_TYPE
11132 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11133 || type_memfn_rqual (type) != REF_QUAL_NONE))
11134 error (declarator->kind == cdk_reference
11135 ? G_("cannot declare reference to qualified function type %qT")
11136 : G_("cannot declare pointer to qualified function type %qT"),
11137 type);
11139 /* When the pointed-to type involves components of variable size,
11140 care must be taken to ensure that the size evaluation code is
11141 emitted early enough to dominate all the possible later uses
11142 and late enough for the variables on which it depends to have
11143 been assigned.
11145 This is expected to happen automatically when the pointed-to
11146 type has a name/declaration of it's own, but special attention
11147 is required if the type is anonymous.
11149 We handle the NORMAL and FIELD contexts here by inserting a
11150 dummy statement that just evaluates the size at a safe point
11151 and ensures it is not deferred until e.g. within a deeper
11152 conditional context (c++/43555).
11154 We expect nothing to be needed here for PARM or TYPENAME.
11155 Evaluating the size at this point for TYPENAME would
11156 actually be incorrect, as we might be in the middle of an
11157 expression with side effects on the pointed-to type size
11158 "arguments" prior to the pointer declaration point and the
11159 size evaluation could end up prior to the side effects. */
11161 if (!TYPE_NAME (type)
11162 && (decl_context == NORMAL || decl_context == FIELD)
11163 && at_function_scope_p ()
11164 && variably_modified_type_p (type, NULL_TREE))
11166 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11167 NULL_TREE, type);
11168 add_decl_expr (TYPE_NAME (type));
11171 if (declarator->kind == cdk_reference)
11173 /* In C++0x, the type we are creating a reference to might be
11174 a typedef which is itself a reference type. In that case,
11175 we follow the reference collapsing rules in
11176 [7.1.3/8 dcl.typedef] to create the final reference type:
11178 "If a typedef TD names a type that is a reference to a type
11179 T, an attempt to create the type 'lvalue reference to cv TD'
11180 creates the type 'lvalue reference to T,' while an attempt
11181 to create the type "rvalue reference to cv TD' creates the
11182 type TD."
11184 if (VOID_TYPE_P (type))
11185 /* We already gave an error. */;
11186 else if (TREE_CODE (type) == REFERENCE_TYPE)
11188 if (declarator->u.reference.rvalue_ref)
11189 /* Leave type alone. */;
11190 else
11191 type = cp_build_reference_type (TREE_TYPE (type), false);
11193 else
11194 type = cp_build_reference_type
11195 (type, declarator->u.reference.rvalue_ref);
11197 /* In C++0x, we need this check for direct reference to
11198 reference declarations, which are forbidden by
11199 [8.3.2/5 dcl.ref]. Reference to reference declarations
11200 are only allowed indirectly through typedefs and template
11201 type arguments. Example:
11203 void foo(int & &); // invalid ref-to-ref decl
11205 typedef int & int_ref;
11206 void foo(int_ref &); // valid ref-to-ref decl
11208 if (inner_declarator && inner_declarator->kind == cdk_reference)
11209 error ("cannot declare reference to %q#T, which is not "
11210 "a typedef or a template type argument", type);
11212 else if (TREE_CODE (type) == METHOD_TYPE)
11213 type = build_ptrmemfunc_type (build_pointer_type (type));
11214 else if (declarator->kind == cdk_ptrmem)
11216 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11217 != NAMESPACE_DECL);
11218 if (declarator->u.pointer.class_type == error_mark_node)
11219 /* We will already have complained. */
11220 type = error_mark_node;
11221 else
11222 type = build_ptrmem_type (declarator->u.pointer.class_type,
11223 type);
11225 else
11226 type = build_pointer_type (type);
11228 /* Process a list of type modifier keywords (such as
11229 const or volatile) that were given inside the `*' or `&'. */
11231 if (declarator->u.pointer.qualifiers)
11233 type
11234 = cp_build_qualified_type (type,
11235 declarator->u.pointer.qualifiers);
11236 type_quals = cp_type_quals (type);
11239 /* Apply C++11 attributes to the pointer, and not to the
11240 type pointed to. This is unlike what is done for GNU
11241 attributes above. It is to comply with [dcl.ptr]/1:
11243 [the optional attribute-specifier-seq (7.6.1) appertains
11244 to the pointer and not to the object pointed to]. */
11245 if (declarator->std_attributes)
11246 decl_attributes (&type, declarator->std_attributes,
11249 ctype = NULL_TREE;
11250 break;
11252 case cdk_error:
11253 break;
11255 default:
11256 gcc_unreachable ();
11260 /* A `constexpr' specifier used in an object declaration declares
11261 the object as `const'. */
11262 if (constexpr_p && innermost_code != cdk_function)
11264 /* DR1688 says that a `constexpr' specifier in combination with
11265 `volatile' is valid. */
11267 if (TREE_CODE (type) != REFERENCE_TYPE)
11269 type_quals |= TYPE_QUAL_CONST;
11270 type = cp_build_qualified_type (type, type_quals);
11274 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11275 && TREE_CODE (type) != FUNCTION_TYPE
11276 && TREE_CODE (type) != METHOD_TYPE
11277 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11279 error ("template-id %qD used as a declarator",
11280 unqualified_id);
11281 unqualified_id = dname;
11284 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11285 qualified with a class-name, turn it into a METHOD_TYPE, unless
11286 we know that the function is static. We take advantage of this
11287 opportunity to do other processing that pertains to entities
11288 explicitly declared to be class members. Note that if DECLARATOR
11289 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11290 would not have exited the loop above. */
11291 if (declarator
11292 && declarator->kind == cdk_id
11293 && declarator->u.id.qualifying_scope
11294 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11296 ctype = declarator->u.id.qualifying_scope;
11297 ctype = TYPE_MAIN_VARIANT (ctype);
11298 template_count = num_template_headers_for_class (ctype);
11300 if (ctype == current_class_type)
11302 if (friendp)
11304 permerror (input_location, "member functions are implicitly "
11305 "friends of their class");
11306 friendp = 0;
11308 else
11309 permerror (declarator->id_loc,
11310 "extra qualification %<%T::%> on member %qs",
11311 ctype, name);
11313 else if (/* If the qualifying type is already complete, then we
11314 can skip the following checks. */
11315 !COMPLETE_TYPE_P (ctype)
11316 && (/* If the function is being defined, then
11317 qualifying type must certainly be complete. */
11318 funcdef_flag
11319 /* A friend declaration of "T::f" is OK, even if
11320 "T" is a template parameter. But, if this
11321 function is not a friend, the qualifying type
11322 must be a class. */
11323 || (!friendp && !CLASS_TYPE_P (ctype))
11324 /* For a declaration, the type need not be
11325 complete, if either it is dependent (since there
11326 is no meaningful definition of complete in that
11327 case) or the qualifying class is currently being
11328 defined. */
11329 || !(dependent_type_p (ctype)
11330 || currently_open_class (ctype)))
11331 /* Check that the qualifying type is complete. */
11332 && !complete_type_or_else (ctype, NULL_TREE))
11333 return error_mark_node;
11334 else if (TREE_CODE (type) == FUNCTION_TYPE)
11336 if (current_class_type
11337 && (!friendp || funcdef_flag))
11339 error (funcdef_flag
11340 ? G_("cannot define member function %<%T::%s%> "
11341 "within %<%T%>")
11342 : G_("cannot declare member function %<%T::%s%> "
11343 "within %<%T%>"),
11344 ctype, name, current_class_type);
11345 return error_mark_node;
11348 else if (typedef_p && current_class_type)
11350 error ("cannot declare member %<%T::%s%> within %qT",
11351 ctype, name, current_class_type);
11352 return error_mark_node;
11356 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11357 ctype = current_class_type;
11359 /* Now TYPE has the actual type. */
11361 if (returned_attrs)
11363 if (attrlist)
11364 *attrlist = chainon (returned_attrs, *attrlist);
11365 else
11366 attrlist = &returned_attrs;
11369 if (declarator
11370 && declarator->kind == cdk_id
11371 && declarator->std_attributes)
11372 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11373 a declarator-id appertains to the entity that is declared. */
11374 *attrlist = chainon (*attrlist, declarator->std_attributes);
11376 /* Handle parameter packs. */
11377 if (parameter_pack_p)
11379 if (decl_context == PARM)
11380 /* Turn the type into a pack expansion.*/
11381 type = make_pack_expansion (type);
11382 else
11383 error ("non-parameter %qs cannot be a parameter pack", name);
11386 if ((decl_context == FIELD || decl_context == PARM)
11387 && !processing_template_decl
11388 && variably_modified_type_p (type, NULL_TREE))
11390 if (decl_context == FIELD)
11391 error ("data member may not have variably modified type %qT", type);
11392 else
11393 error ("parameter may not have variably modified type %qT", type);
11394 type = error_mark_node;
11397 if (explicitp == 1 || (explicitp && friendp))
11399 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11400 in the declaration of a constructor or conversion function within
11401 a class definition. */
11402 if (!current_class_type)
11403 error_at (declspecs->locations[ds_explicit],
11404 "%<explicit%> outside class declaration");
11405 else if (friendp)
11406 error_at (declspecs->locations[ds_explicit],
11407 "%<explicit%> in friend declaration");
11408 else
11409 error_at (declspecs->locations[ds_explicit],
11410 "only declarations of constructors and conversion operators "
11411 "can be %<explicit%>");
11412 explicitp = 0;
11415 if (storage_class == sc_mutable)
11417 if (decl_context != FIELD || friendp)
11419 error ("non-member %qs cannot be declared %<mutable%>", name);
11420 storage_class = sc_none;
11422 else if (decl_context == TYPENAME || typedef_p)
11424 error ("non-object member %qs cannot be declared %<mutable%>", name);
11425 storage_class = sc_none;
11427 else if (TREE_CODE (type) == FUNCTION_TYPE
11428 || TREE_CODE (type) == METHOD_TYPE)
11430 error ("function %qs cannot be declared %<mutable%>", name);
11431 storage_class = sc_none;
11433 else if (staticp)
11435 error ("static %qs cannot be declared %<mutable%>", name);
11436 storage_class = sc_none;
11438 else if (type_quals & TYPE_QUAL_CONST)
11440 error ("const %qs cannot be declared %<mutable%>", name);
11441 storage_class = sc_none;
11443 else if (TREE_CODE (type) == REFERENCE_TYPE)
11445 permerror (input_location, "reference %qs cannot be declared "
11446 "%<mutable%>", name);
11447 storage_class = sc_none;
11451 /* If this is declaring a typedef name, return a TYPE_DECL. */
11452 if (typedef_p && decl_context != TYPENAME)
11454 tree decl;
11456 /* This declaration:
11458 typedef void f(int) const;
11460 declares a function type which is not a member of any
11461 particular class, but which is cv-qualified; for
11462 example "f S::*" declares a pointer to a const-qualified
11463 member function of S. We record the cv-qualification in the
11464 function type. */
11465 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11467 type = apply_memfn_quals (type, memfn_quals, rqual);
11469 /* We have now dealt with these qualifiers. */
11470 memfn_quals = TYPE_UNQUALIFIED;
11471 rqual = REF_QUAL_NONE;
11474 if (type_uses_auto (type))
11476 error ("typedef declared %<auto%>");
11477 type = error_mark_node;
11480 if (reqs)
11481 error_at (location_of (reqs), "requires-clause on typedef");
11483 if (decl_context == FIELD)
11484 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11485 else
11486 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11487 if (id_declarator && declarator->u.id.qualifying_scope) {
11488 error_at (DECL_SOURCE_LOCATION (decl),
11489 "typedef name may not be a nested-name-specifier");
11490 TREE_TYPE (decl) = error_mark_node;
11493 if (decl_context != FIELD)
11495 if (!current_function_decl)
11496 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11497 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
11498 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11499 (current_function_decl)))
11500 /* The TYPE_DECL is "abstract" because there will be
11501 clones of this constructor/destructor, and there will
11502 be copies of this TYPE_DECL generated in those
11503 clones. The decloning optimization (for space) may
11504 revert this subsequently if it determines that
11505 the clones should share a common implementation. */
11506 DECL_ABSTRACT_P (decl) = true;
11508 else if (current_class_type
11509 && constructor_name_p (unqualified_id, current_class_type))
11510 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11511 "as enclosing class",
11512 unqualified_id);
11514 /* If the user declares "typedef struct {...} foo" then the
11515 struct will have an anonymous name. Fill that name in now.
11516 Nothing can refer to it, so nothing needs know about the name
11517 change. */
11518 if (type != error_mark_node
11519 && unqualified_id
11520 && TYPE_NAME (type)
11521 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11522 && TYPE_UNNAMED_P (type)
11523 && declspecs->type_definition_p
11524 && attributes_naming_typedef_ok (*attrlist)
11525 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11527 tree t;
11529 /* Replace the anonymous name with the real name everywhere. */
11530 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11532 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
11533 /* We do not rename the debug info representing the
11534 unnamed tagged type because the standard says in
11535 [dcl.typedef] that the naming applies only for
11536 linkage purposes. */
11537 /*debug_hooks->set_name (t, decl);*/
11538 TYPE_NAME (t) = decl;
11541 if (TYPE_LANG_SPECIFIC (type))
11542 TYPE_WAS_UNNAMED (type) = 1;
11544 /* If this is a typedef within a template class, the nested
11545 type is a (non-primary) template. The name for the
11546 template needs updating as well. */
11547 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
11548 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
11549 = TYPE_IDENTIFIER (type);
11551 /* Adjust linkage now that we aren't unnamed anymore. */
11552 reset_type_linkage (type);
11554 /* FIXME remangle member functions; member functions of a
11555 type with external linkage have external linkage. */
11558 if (signed_p
11559 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11560 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11562 bad_specifiers (decl, BSP_TYPE, virtualp,
11563 memfn_quals != TYPE_UNQUALIFIED,
11564 inlinep, friendp, raises != NULL_TREE);
11566 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11567 /* Acknowledge that this was written:
11568 `using analias = atype;'. */
11569 TYPE_DECL_ALIAS_P (decl) = 1;
11571 return decl;
11574 /* Detect the case of an array type of unspecified size
11575 which came, as such, direct from a typedef name.
11576 We must copy the type, so that the array's domain can be
11577 individually set by the object's initializer. */
11579 if (type && typedef_type
11580 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11581 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11582 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11584 /* Detect where we're using a typedef of function type to declare a
11585 function. PARMS will not be set, so we must create it now. */
11587 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11589 tree decls = NULL_TREE;
11590 tree args;
11592 for (args = TYPE_ARG_TYPES (type);
11593 args && args != void_list_node;
11594 args = TREE_CHAIN (args))
11596 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
11598 DECL_CHAIN (decl) = decls;
11599 decls = decl;
11602 parms = nreverse (decls);
11604 if (decl_context != TYPENAME)
11606 /* The qualifiers on the function type become the qualifiers on
11607 the non-static member function. */
11608 memfn_quals |= type_memfn_quals (type);
11609 rqual = type_memfn_rqual (type);
11610 type_quals = TYPE_UNQUALIFIED;
11614 /* If this is a type name (such as, in a cast or sizeof),
11615 compute the type and return it now. */
11617 if (decl_context == TYPENAME)
11619 /* Note that here we don't care about type_quals. */
11621 /* Special case: "friend class foo" looks like a TYPENAME context. */
11622 if (friendp)
11624 if (inlinep)
11626 error ("%<inline%> specified for friend class declaration");
11627 inlinep = 0;
11630 if (!current_aggr)
11632 /* Don't allow friend declaration without a class-key. */
11633 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11634 permerror (input_location, "template parameters cannot be friends");
11635 else if (TREE_CODE (type) == TYPENAME_TYPE)
11636 permerror (input_location, "friend declaration requires class-key, "
11637 "i.e. %<friend class %T::%D%>",
11638 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11639 else
11640 permerror (input_location, "friend declaration requires class-key, "
11641 "i.e. %<friend %#T%>",
11642 type);
11645 /* Only try to do this stuff if we didn't already give up. */
11646 if (type != integer_type_node)
11648 /* A friendly class? */
11649 if (current_class_type)
11650 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11651 /*complain=*/true);
11652 else
11653 error ("trying to make class %qT a friend of global scope",
11654 type);
11656 type = void_type_node;
11659 else if (memfn_quals || rqual)
11661 if (ctype == NULL_TREE
11662 && TREE_CODE (type) == METHOD_TYPE)
11663 ctype = TYPE_METHOD_BASETYPE (type);
11665 if (ctype)
11666 type = build_memfn_type (type, ctype, memfn_quals, rqual);
11667 /* Core issue #547: need to allow this in template type args.
11668 Allow it in general in C++11 for alias-declarations. */
11669 else if ((template_type_arg || cxx_dialect >= cxx11)
11670 && TREE_CODE (type) == FUNCTION_TYPE)
11671 type = apply_memfn_quals (type, memfn_quals, rqual);
11672 else
11673 error ("invalid qualifiers on non-member function type");
11676 if (reqs)
11677 error_at (location_of (reqs), "requires-clause on type-id");
11679 return type;
11681 else if (unqualified_id == NULL_TREE && decl_context != PARM
11682 && decl_context != CATCHPARM
11683 && TREE_CODE (type) != UNION_TYPE
11684 && ! bitfield
11685 && innermost_code != cdk_decomp)
11687 error ("abstract declarator %qT used as declaration", type);
11688 return error_mark_node;
11691 /* Only functions may be declared using an operator-function-id. */
11692 if (unqualified_id
11693 && IDENTIFIER_OPNAME_P (unqualified_id)
11694 && TREE_CODE (type) != FUNCTION_TYPE
11695 && TREE_CODE (type) != METHOD_TYPE)
11697 error ("declaration of %qD as non-function", unqualified_id);
11698 return error_mark_node;
11701 if (reqs
11702 && TREE_CODE (type) != FUNCTION_TYPE
11703 && TREE_CODE (type) != METHOD_TYPE)
11704 error_at (location_of (reqs),
11705 "requires-clause on declaration of non-function type %qT",
11706 type);
11708 /* We don't check parameter types here because we can emit a better
11709 error message later. */
11710 if (decl_context != PARM)
11712 type = check_var_type (unqualified_id, type);
11713 if (type == error_mark_node)
11714 return error_mark_node;
11717 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11718 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11720 if (decl_context == PARM || decl_context == CATCHPARM)
11722 if (ctype || in_namespace)
11723 error ("cannot use %<::%> in parameter declaration");
11725 if (type_uses_auto (type)
11726 && !(cxx_dialect >= cxx1z && template_parm_flag))
11728 if (cxx_dialect >= cxx14)
11729 error ("%<auto%> parameter not permitted in this context");
11730 else
11731 error ("parameter declared %<auto%>");
11732 type = error_mark_node;
11735 /* A parameter declared as an array of T is really a pointer to T.
11736 One declared as a function is really a pointer to a function.
11737 One declared as a member is really a pointer to member. */
11739 if (TREE_CODE (type) == ARRAY_TYPE)
11741 /* Transfer const-ness of array into that of type pointed to. */
11742 type = build_pointer_type (TREE_TYPE (type));
11743 type_quals = TYPE_UNQUALIFIED;
11744 array_parameter_p = true;
11746 else if (TREE_CODE (type) == FUNCTION_TYPE)
11747 type = build_pointer_type (type);
11750 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
11751 && !NEW_DELETE_OPNAME_P (unqualified_id))
11753 cp_cv_quals real_quals = memfn_quals;
11754 if (cxx_dialect < cxx14 && constexpr_p
11755 && sfk != sfk_constructor && sfk != sfk_destructor)
11756 real_quals |= TYPE_QUAL_CONST;
11757 type = build_memfn_type (type, ctype, real_quals, rqual);
11761 tree decl = NULL_TREE;
11763 if (decl_context == PARM)
11765 decl = cp_build_parm_decl (unqualified_id, type);
11766 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
11768 bad_specifiers (decl, BSP_PARM, virtualp,
11769 memfn_quals != TYPE_UNQUALIFIED,
11770 inlinep, friendp, raises != NULL_TREE);
11772 else if (decl_context == FIELD)
11774 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
11775 if (tree auto_node = type_uses_auto (type))
11777 location_t loc = declspecs->locations[ds_type_spec];
11778 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
11779 error_at (loc, "invalid use of template-name %qE without an "
11780 "argument list",
11781 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
11782 else
11783 error_at (loc, "non-static data member declared with "
11784 "placeholder %qT", auto_node);
11785 type = error_mark_node;
11788 /* The C99 flexible array extension. */
11789 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
11790 && TYPE_DOMAIN (type) == NULL_TREE)
11792 if (ctype
11793 && (TREE_CODE (ctype) == UNION_TYPE
11794 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
11796 error ("flexible array member in union");
11797 type = error_mark_node;
11799 else
11801 /* Flexible array member has a null domain. */
11802 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11806 if (type == error_mark_node)
11808 /* Happens when declaring arrays of sizes which
11809 are error_mark_node, for example. */
11810 decl = NULL_TREE;
11812 else if (in_namespace && !friendp)
11814 /* Something like struct S { int N::j; }; */
11815 error ("invalid use of %<::%>");
11816 return error_mark_node;
11818 else if (TREE_CODE (type) == FUNCTION_TYPE
11819 || TREE_CODE (type) == METHOD_TYPE)
11821 int publicp = 0;
11822 tree function_context;
11824 if (friendp == 0)
11826 /* This should never happen in pure C++ (the check
11827 could be an assert). It could happen in
11828 Objective-C++ if someone writes invalid code that
11829 uses a function declaration for an instance
11830 variable or property (instance variables and
11831 properties are parsed as FIELD_DECLs, but they are
11832 part of an Objective-C class, not a C++ class).
11833 That code is invalid and is caught by this
11834 check. */
11835 if (!ctype)
11837 error ("declaration of function %qD in invalid context",
11838 unqualified_id);
11839 return error_mark_node;
11842 /* ``A union may [ ... ] not [ have ] virtual functions.''
11843 ARM 9.5 */
11844 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11846 error ("function %qD declared %<virtual%> inside a union",
11847 unqualified_id);
11848 return error_mark_node;
11851 if (NEW_DELETE_OPNAME_P (unqualified_id))
11853 if (virtualp)
11855 error ("%qD cannot be declared %<virtual%>, since it "
11856 "is always static",
11857 unqualified_id);
11858 virtualp = 0;
11863 /* Check that the name used for a destructor makes sense. */
11864 if (sfk == sfk_destructor)
11866 tree uqname = id_declarator->u.id.unqualified_name;
11868 if (!ctype)
11870 gcc_assert (friendp);
11871 error ("expected qualified name in friend declaration "
11872 "for destructor %qD", uqname);
11873 return error_mark_node;
11876 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
11878 error ("declaration of %qD as member of %qT",
11879 uqname, ctype);
11880 return error_mark_node;
11882 if (concept_p)
11884 error ("a destructor cannot be %<concept%>");
11885 return error_mark_node;
11887 if (constexpr_p)
11889 error ("a destructor cannot be %<constexpr%>");
11890 return error_mark_node;
11893 else if (sfk == sfk_constructor && friendp && !ctype)
11895 error ("expected qualified name in friend declaration "
11896 "for constructor %qD",
11897 id_declarator->u.id.unqualified_name);
11898 return error_mark_node;
11900 if (sfk == sfk_constructor)
11901 if (concept_p)
11903 error ("a constructor cannot be %<concept%>");
11904 return error_mark_node;
11906 if (concept_p)
11908 error ("a concept cannot be a member function");
11909 concept_p = false;
11912 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
11914 tree tmpl = TREE_OPERAND (unqualified_id, 0);
11915 if (variable_template_p (tmpl))
11917 error ("specialization of variable template %qD "
11918 "declared as function", tmpl);
11919 inform (DECL_SOURCE_LOCATION (tmpl),
11920 "variable template declared here");
11921 return error_mark_node;
11925 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
11926 function_context = (ctype != NULL_TREE) ?
11927 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11928 publicp = (! friendp || ! staticp)
11929 && function_context == NULL_TREE;
11931 if (late_return_type_p)
11932 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
11934 decl = grokfndecl (ctype, type,
11935 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
11936 ? unqualified_id : dname,
11937 parms,
11938 unqualified_id,
11939 reqs,
11940 virtualp, flags, memfn_quals, rqual, raises,
11941 friendp ? -1 : 0, friendp, publicp,
11942 inlinep | (2 * constexpr_p) | (4 * concept_p),
11943 initialized == SD_DELETED, sfk,
11944 funcdef_flag, template_count, in_namespace,
11945 attrlist, declarator->id_loc);
11946 decl = set_virt_specifiers (decl, virt_specifiers);
11947 if (decl == NULL_TREE)
11948 return error_mark_node;
11949 #if 0
11950 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11951 /* The decl and setting of decl_attr is also turned off. */
11952 decl = build_decl_attribute_variant (decl, decl_attr);
11953 #endif
11955 /* [class.conv.ctor]
11957 A constructor declared without the function-specifier
11958 explicit that can be called with a single parameter
11959 specifies a conversion from the type of its first
11960 parameter to the type of its class. Such a constructor
11961 is called a converting constructor. */
11962 if (explicitp == 2)
11963 DECL_NONCONVERTING_P (decl) = 1;
11965 else if (!staticp && !dependent_type_p (type)
11966 && !COMPLETE_TYPE_P (complete_type (type))
11967 && (!complete_or_array_type_p (type)
11968 || initialized == 0))
11970 if (TREE_CODE (type) != ARRAY_TYPE
11971 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
11973 if (unqualified_id)
11975 error ("field %qD has incomplete type %qT",
11976 unqualified_id, type);
11977 cxx_incomplete_type_inform (strip_array_types (type));
11979 else
11980 error ("name %qT has incomplete type", type);
11982 type = error_mark_node;
11983 decl = NULL_TREE;
11986 else
11988 if (friendp)
11990 error ("%qE is neither function nor member function; "
11991 "cannot be declared friend", unqualified_id);
11992 friendp = 0;
11994 decl = NULL_TREE;
11997 if (friendp)
11999 /* Friends are treated specially. */
12000 if (ctype == current_class_type)
12001 ; /* We already issued a permerror. */
12002 else if (decl && DECL_NAME (decl))
12004 if (template_class_depth (current_class_type) == 0)
12006 decl = check_explicit_specialization
12007 (unqualified_id, decl, template_count,
12008 2 * funcdef_flag + 4);
12009 if (decl == error_mark_node)
12010 return error_mark_node;
12013 decl = do_friend (ctype, unqualified_id, decl,
12014 *attrlist, flags,
12015 funcdef_flag);
12016 return decl;
12018 else
12019 return error_mark_node;
12022 /* Structure field. It may not be a function, except for C++. */
12024 if (decl == NULL_TREE)
12026 if (staticp)
12028 /* C++ allows static class members. All other work
12029 for this is done by grokfield. */
12030 decl = build_lang_decl_loc (declarator
12031 ? declarator->id_loc
12032 : input_location,
12033 VAR_DECL, unqualified_id, type);
12034 set_linkage_for_static_data_member (decl);
12035 if (thread_p)
12037 CP_DECL_THREAD_LOCAL_P (decl) = true;
12038 if (!processing_template_decl)
12039 set_decl_tls_model (decl, decl_default_tls_model (decl));
12040 if (declspecs->gnu_thread_keyword_p)
12041 SET_DECL_GNU_TLS_P (decl);
12043 if (concept_p)
12044 error ("static data member %qE declared %<concept%>",
12045 unqualified_id);
12046 else if (constexpr_p && !initialized)
12048 error ("constexpr static data member %qD must have an "
12049 "initializer", decl);
12050 constexpr_p = false;
12053 if (inlinep)
12054 mark_inline_variable (decl);
12056 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12057 && !(cxx_dialect >= cxx1z && constexpr_p))
12058 /* Even if there is an in-class initialization, DECL
12059 is considered undefined until an out-of-class
12060 definition is provided, unless this is an inline
12061 variable. */
12062 DECL_EXTERNAL (decl) = 1;
12064 else
12066 if (concept_p)
12067 error ("non-static data member %qE declared %<concept%>",
12068 unqualified_id);
12069 else if (constexpr_p)
12071 error ("non-static data member %qE declared %<constexpr%>",
12072 unqualified_id);
12073 constexpr_p = false;
12075 decl = build_decl (input_location,
12076 FIELD_DECL, unqualified_id, type);
12077 DECL_NONADDRESSABLE_P (decl) = bitfield;
12078 if (bitfield && !unqualified_id)
12079 TREE_NO_WARNING (decl) = 1;
12081 if (storage_class == sc_mutable)
12083 DECL_MUTABLE_P (decl) = 1;
12084 storage_class = sc_none;
12087 if (initialized)
12089 /* An attempt is being made to initialize a non-static
12090 member. This is new in C++11. */
12091 maybe_warn_cpp0x (CPP0X_NSDMI);
12093 /* If this has been parsed with static storage class, but
12094 errors forced staticp to be cleared, ensure NSDMI is
12095 not present. */
12096 if (declspecs->storage_class == sc_static)
12097 DECL_INITIAL (decl) = error_mark_node;
12101 bad_specifiers (decl, BSP_FIELD, virtualp,
12102 memfn_quals != TYPE_UNQUALIFIED,
12103 staticp ? false : inlinep, friendp,
12104 raises != NULL_TREE);
12107 else if (TREE_CODE (type) == FUNCTION_TYPE
12108 || TREE_CODE (type) == METHOD_TYPE)
12110 tree original_name;
12111 int publicp = 0;
12113 if (!unqualified_id)
12114 return error_mark_node;
12116 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12117 original_name = dname;
12118 else
12119 original_name = unqualified_id;
12121 if (storage_class == sc_auto)
12122 error ("storage class %<auto%> invalid for function %qs", name);
12123 else if (storage_class == sc_register)
12124 error ("storage class %<register%> invalid for function %qs", name);
12125 else if (thread_p)
12127 if (declspecs->gnu_thread_keyword_p)
12128 error ("storage class %<__thread%> invalid for function %qs",
12129 name);
12130 else
12131 error ("storage class %<thread_local%> invalid for function %qs",
12132 name);
12135 if (virt_specifiers)
12136 error ("virt-specifiers in %qs not allowed outside a class definition", name);
12137 /* Function declaration not at top level.
12138 Storage classes other than `extern' are not allowed
12139 and `extern' makes no difference. */
12140 if (! toplevel_bindings_p ()
12141 && (storage_class == sc_static
12142 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12143 && pedantic)
12145 if (storage_class == sc_static)
12146 pedwarn (input_location, OPT_Wpedantic,
12147 "%<static%> specifier invalid for function %qs "
12148 "declared out of global scope", name);
12149 else
12150 pedwarn (input_location, OPT_Wpedantic,
12151 "%<inline%> specifier invalid for function %qs "
12152 "declared out of global scope", name);
12155 if (ctype == NULL_TREE)
12157 if (virtualp)
12159 error ("virtual non-class function %qs", name);
12160 virtualp = 0;
12162 else if (sfk == sfk_constructor
12163 || sfk == sfk_destructor)
12165 error (funcdef_flag
12166 ? G_("%qs defined in a non-class scope")
12167 : G_("%qs declared in a non-class scope"), name);
12168 sfk = sfk_none;
12172 /* Record whether the function is public. */
12173 publicp = (ctype != NULL_TREE
12174 || storage_class != sc_static);
12176 if (late_return_type_p)
12177 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12179 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12180 reqs, virtualp, flags, memfn_quals, rqual, raises,
12181 1, friendp,
12182 publicp,
12183 inlinep | (2 * constexpr_p) | (4 * concept_p),
12184 initialized == SD_DELETED,
12185 sfk,
12186 funcdef_flag,
12187 template_count, in_namespace, attrlist,
12188 declarator->id_loc);
12189 if (decl == NULL_TREE)
12190 return error_mark_node;
12192 if (staticp == 1)
12194 int invalid_static = 0;
12196 /* Don't allow a static member function in a class, and forbid
12197 declaring main to be static. */
12198 if (TREE_CODE (type) == METHOD_TYPE)
12200 permerror (input_location, "cannot declare member function %qD to have "
12201 "static linkage", decl);
12202 invalid_static = 1;
12204 else if (current_function_decl)
12206 /* 7.1.1: There can be no static function declarations within a
12207 block. */
12208 error ("cannot declare static function inside another function");
12209 invalid_static = 1;
12212 if (invalid_static)
12214 staticp = 0;
12215 storage_class = sc_none;
12219 else
12221 /* It's a variable. */
12223 /* An uninitialized decl with `extern' is a reference. */
12224 decl = grokvardecl (type, dname, unqualified_id,
12225 declspecs,
12226 initialized,
12227 type_quals,
12228 inlinep,
12229 concept_p,
12230 template_count,
12231 ctype ? ctype : in_namespace);
12232 if (decl == NULL_TREE)
12233 return error_mark_node;
12235 bad_specifiers (decl, BSP_VAR, virtualp,
12236 memfn_quals != TYPE_UNQUALIFIED,
12237 inlinep, friendp, raises != NULL_TREE);
12239 if (ctype)
12241 DECL_CONTEXT (decl) = ctype;
12242 if (staticp == 1)
12244 permerror (input_location, "%<static%> may not be used when defining "
12245 "(as opposed to declaring) a static data member");
12246 staticp = 0;
12247 storage_class = sc_none;
12249 if (storage_class == sc_register && TREE_STATIC (decl))
12251 error ("static member %qD declared %<register%>", decl);
12252 storage_class = sc_none;
12254 if (storage_class == sc_extern && pedantic)
12256 pedwarn (input_location, OPT_Wpedantic,
12257 "cannot explicitly declare member %q#D to have "
12258 "extern linkage", decl);
12259 storage_class = sc_none;
12262 else if (constexpr_p && DECL_EXTERNAL (decl))
12264 error ("declaration of constexpr variable %qD is not a definition",
12265 decl);
12266 constexpr_p = false;
12269 if (inlinep)
12270 mark_inline_variable (decl);
12271 if (innermost_code == cdk_decomp)
12273 gcc_assert (declarator && declarator->kind == cdk_decomp);
12274 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12275 retrofit_lang_decl (decl);
12276 DECL_ARTIFICIAL (decl) = 1;
12277 SET_DECL_DECOMPOSITION_P (decl);
12281 if (VAR_P (decl) && !initialized)
12282 if (tree auto_node = type_uses_auto (type))
12284 location_t loc = declspecs->locations[ds_type_spec];
12285 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12287 error_at (loc, "invalid use of template-name %qE without an "
12288 "argument list", tmpl);
12289 inform (loc, "class template argument deduction "
12290 "requires an initializer");
12292 else
12293 error_at (loc, "declaration of %q#D has no initializer", decl);
12294 TREE_TYPE (decl) = error_mark_node;
12297 if (storage_class == sc_extern && initialized && !funcdef_flag)
12299 if (toplevel_bindings_p ())
12301 /* It's common practice (and completely valid) to have a const
12302 be initialized and declared extern. */
12303 if (!(type_quals & TYPE_QUAL_CONST))
12304 warning (0, "%qs initialized and declared %<extern%>", name);
12306 else
12308 error ("%qs has both %<extern%> and initializer", name);
12309 return error_mark_node;
12313 /* Record `register' declaration for warnings on &
12314 and in case doing stupid register allocation. */
12316 if (storage_class == sc_register)
12318 DECL_REGISTER (decl) = 1;
12319 /* Warn about register storage specifiers on PARM_DECLs. */
12320 if (TREE_CODE (decl) == PARM_DECL)
12322 if (cxx_dialect >= cxx1z)
12323 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12324 "ISO C++1z does not allow %<register%> storage "
12325 "class specifier");
12326 else
12327 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12328 "%<register%> storage class specifier used");
12331 else if (storage_class == sc_extern)
12332 DECL_THIS_EXTERN (decl) = 1;
12333 else if (storage_class == sc_static)
12334 DECL_THIS_STATIC (decl) = 1;
12336 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12337 if (constexpr_p && VAR_P (decl))
12338 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12340 /* Record constancy and volatility on the DECL itself . There's
12341 no need to do this when processing a template; we'll do this
12342 for the instantiated declaration based on the type of DECL. */
12343 if (!processing_template_decl)
12344 cp_apply_type_quals_to_decl (type_quals, decl);
12346 return decl;
12350 /* Subroutine of start_function. Ensure that each of the parameter
12351 types (as listed in PARMS) is complete, as is required for a
12352 function definition. */
12354 static void
12355 require_complete_types_for_parms (tree parms)
12357 for (; parms; parms = DECL_CHAIN (parms))
12359 if (dependent_type_p (TREE_TYPE (parms)))
12360 continue;
12361 if (!VOID_TYPE_P (TREE_TYPE (parms))
12362 && complete_type_or_else (TREE_TYPE (parms), parms))
12364 relayout_decl (parms);
12365 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12367 else
12368 /* grokparms or complete_type_or_else will have already issued
12369 an error. */
12370 TREE_TYPE (parms) = error_mark_node;
12374 /* Returns nonzero if T is a local variable. */
12377 local_variable_p (const_tree t)
12379 if ((VAR_P (t)
12380 /* A VAR_DECL with a context that is a _TYPE is a static data
12381 member. */
12382 && !TYPE_P (CP_DECL_CONTEXT (t))
12383 /* Any other non-local variable must be at namespace scope. */
12384 && !DECL_NAMESPACE_SCOPE_P (t))
12385 || (TREE_CODE (t) == PARM_DECL))
12386 return 1;
12388 return 0;
12391 /* Like local_variable_p, but suitable for use as a tree-walking
12392 function. */
12394 static tree
12395 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12396 void * /*data*/)
12398 if (local_variable_p (*tp)
12399 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12400 return *tp;
12401 else if (TYPE_P (*tp))
12402 *walk_subtrees = 0;
12404 return NULL_TREE;
12407 /* Check that ARG, which is a default-argument expression for a
12408 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12409 something goes wrong. DECL may also be a _TYPE node, rather than a
12410 DECL, if there is no DECL available. */
12412 tree
12413 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12415 tree var;
12416 tree decl_type;
12418 if (TREE_CODE (arg) == DEFAULT_ARG)
12419 /* We get a DEFAULT_ARG when looking at an in-class declaration
12420 with a default argument. Ignore the argument for now; we'll
12421 deal with it after the class is complete. */
12422 return arg;
12424 if (TYPE_P (decl))
12426 decl_type = decl;
12427 decl = NULL_TREE;
12429 else
12430 decl_type = TREE_TYPE (decl);
12432 if (arg == error_mark_node
12433 || decl == error_mark_node
12434 || TREE_TYPE (arg) == error_mark_node
12435 || decl_type == error_mark_node)
12436 /* Something already went wrong. There's no need to check
12437 further. */
12438 return error_mark_node;
12440 /* [dcl.fct.default]
12442 A default argument expression is implicitly converted to the
12443 parameter type. */
12444 ++cp_unevaluated_operand;
12445 perform_implicit_conversion_flags (decl_type, arg, complain,
12446 LOOKUP_IMPLICIT);
12447 --cp_unevaluated_operand;
12449 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12450 the call sites. */
12451 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12452 && null_ptr_cst_p (arg))
12453 return nullptr_node;
12455 /* [dcl.fct.default]
12457 Local variables shall not be used in default argument
12458 expressions.
12460 The keyword `this' shall not be used in a default argument of a
12461 member function. */
12462 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12463 if (var)
12465 if (complain & tf_warning_or_error)
12467 if (DECL_NAME (var) == this_identifier)
12468 permerror (input_location, "default argument %qE uses %qD",
12469 arg, var);
12470 else
12471 error ("default argument %qE uses local variable %qD", arg, var);
12473 return error_mark_node;
12476 /* All is well. */
12477 return arg;
12480 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12482 static tree
12483 type_is_deprecated (tree type)
12485 enum tree_code code;
12486 if (TREE_DEPRECATED (type))
12487 return type;
12488 if (TYPE_NAME (type))
12490 if (TREE_DEPRECATED (TYPE_NAME (type)))
12491 return type;
12492 else
12493 return NULL_TREE;
12496 /* Do warn about using typedefs to a deprecated class. */
12497 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12498 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12500 code = TREE_CODE (type);
12502 if (code == POINTER_TYPE || code == REFERENCE_TYPE
12503 || code == OFFSET_TYPE || code == FUNCTION_TYPE
12504 || code == METHOD_TYPE || code == ARRAY_TYPE)
12505 return type_is_deprecated (TREE_TYPE (type));
12507 if (TYPE_PTRMEMFUNC_P (type))
12508 return type_is_deprecated
12509 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12511 return NULL_TREE;
12514 /* Decode the list of parameter types for a function type.
12515 Given the list of things declared inside the parens,
12516 return a list of types.
12518 If this parameter does not end with an ellipsis, we append
12519 void_list_node.
12521 *PARMS is set to the chain of PARM_DECLs created. */
12523 tree
12524 grokparms (tree parmlist, tree *parms)
12526 tree result = NULL_TREE;
12527 tree decls = NULL_TREE;
12528 tree parm;
12529 int any_error = 0;
12531 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12533 tree type = NULL_TREE;
12534 tree init = TREE_PURPOSE (parm);
12535 tree decl = TREE_VALUE (parm);
12537 if (parm == void_list_node)
12538 break;
12540 if (! decl || TREE_TYPE (decl) == error_mark_node)
12541 continue;
12543 type = TREE_TYPE (decl);
12544 if (VOID_TYPE_P (type))
12546 if (same_type_p (type, void_type_node)
12547 && !init
12548 && !DECL_NAME (decl) && !result
12549 && TREE_CHAIN (parm) == void_list_node)
12550 /* DR 577: A parameter list consisting of a single
12551 unnamed parameter of non-dependent type 'void'. */
12552 break;
12553 else if (cv_qualified_p (type))
12554 error_at (DECL_SOURCE_LOCATION (decl),
12555 "invalid use of cv-qualified type %qT in "
12556 "parameter declaration", type);
12557 else
12558 error_at (DECL_SOURCE_LOCATION (decl),
12559 "invalid use of type %<void%> in parameter "
12560 "declaration");
12561 /* It's not a good idea to actually create parameters of
12562 type `void'; other parts of the compiler assume that a
12563 void type terminates the parameter list. */
12564 type = error_mark_node;
12565 TREE_TYPE (decl) = error_mark_node;
12568 if (type != error_mark_node)
12570 if (deprecated_state != DEPRECATED_SUPPRESS)
12572 tree deptype = type_is_deprecated (type);
12573 if (deptype)
12574 warn_deprecated_use (deptype, NULL_TREE);
12577 /* Top-level qualifiers on the parameters are
12578 ignored for function types. */
12579 type = cp_build_qualified_type (type, 0);
12580 if (TREE_CODE (type) == METHOD_TYPE)
12582 error ("parameter %qD invalidly declared method type", decl);
12583 type = build_pointer_type (type);
12584 TREE_TYPE (decl) = type;
12586 else if (abstract_virtuals_error (decl, type))
12587 any_error = 1; /* Seems like a good idea. */
12588 else if (POINTER_TYPE_P (type))
12590 /* [dcl.fct]/6, parameter types cannot contain pointers
12591 (references) to arrays of unknown bound. */
12592 tree t = TREE_TYPE (type);
12593 int ptr = TYPE_PTR_P (type);
12595 while (1)
12597 if (TYPE_PTR_P (t))
12598 ptr = 1;
12599 else if (TREE_CODE (t) != ARRAY_TYPE)
12600 break;
12601 else if (!TYPE_DOMAIN (t))
12602 break;
12603 t = TREE_TYPE (t);
12605 if (TREE_CODE (t) == ARRAY_TYPE)
12606 error (ptr
12607 ? G_("parameter %qD includes pointer to array of "
12608 "unknown bound %qT")
12609 : G_("parameter %qD includes reference to array of "
12610 "unknown bound %qT"),
12611 decl, t);
12614 if (any_error)
12615 init = NULL_TREE;
12616 else if (init && !processing_template_decl)
12617 init = check_default_argument (decl, init, tf_warning_or_error);
12620 DECL_CHAIN (decl) = decls;
12621 decls = decl;
12622 result = tree_cons (init, type, result);
12624 decls = nreverse (decls);
12625 result = nreverse (result);
12626 if (parm)
12627 result = chainon (result, void_list_node);
12628 *parms = decls;
12630 return result;
12634 /* D is a constructor or overloaded `operator='.
12636 Let T be the class in which D is declared. Then, this function
12637 returns:
12639 -1 if D's is an ill-formed constructor or copy assignment operator
12640 whose first parameter is of type `T'.
12641 0 if D is not a copy constructor or copy assignment
12642 operator.
12643 1 if D is a copy constructor or copy assignment operator whose
12644 first parameter is a reference to non-const qualified T.
12645 2 if D is a copy constructor or copy assignment operator whose
12646 first parameter is a reference to const qualified T.
12648 This function can be used as a predicate. Positive values indicate
12649 a copy constructor and nonzero values indicate a copy assignment
12650 operator. */
12653 copy_fn_p (const_tree d)
12655 tree args;
12656 tree arg_type;
12657 int result = 1;
12659 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12661 if (TREE_CODE (d) == TEMPLATE_DECL
12662 || (DECL_TEMPLATE_INFO (d)
12663 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12664 /* Instantiations of template member functions are never copy
12665 functions. Note that member functions of templated classes are
12666 represented as template functions internally, and we must
12667 accept those as copy functions. */
12668 return 0;
12670 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12671 if (!args)
12672 return 0;
12674 arg_type = TREE_VALUE (args);
12675 if (arg_type == error_mark_node)
12676 return 0;
12678 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12680 /* Pass by value copy assignment operator. */
12681 result = -1;
12683 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
12684 && !TYPE_REF_IS_RVALUE (arg_type)
12685 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12687 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12688 result = 2;
12690 else
12691 return 0;
12693 args = TREE_CHAIN (args);
12695 if (args && args != void_list_node && !TREE_PURPOSE (args))
12696 /* There are more non-optional args. */
12697 return 0;
12699 return result;
12702 /* D is a constructor or overloaded `operator='.
12704 Let T be the class in which D is declared. Then, this function
12705 returns true when D is a move constructor or move assignment
12706 operator, false otherwise. */
12708 bool
12709 move_fn_p (const_tree d)
12711 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12713 if (cxx_dialect == cxx98)
12714 /* There are no move constructors if we are in C++98 mode. */
12715 return false;
12717 if (TREE_CODE (d) == TEMPLATE_DECL
12718 || (DECL_TEMPLATE_INFO (d)
12719 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12720 /* Instantiations of template member functions are never move
12721 functions. Note that member functions of templated classes are
12722 represented as template functions internally, and we must
12723 accept those as move functions. */
12724 return 0;
12726 return move_signature_fn_p (d);
12729 /* D is a constructor or overloaded `operator='.
12731 Then, this function returns true when D has the same signature as a move
12732 constructor or move assignment operator (because either it is such a
12733 ctor/op= or it is a template specialization with the same signature),
12734 false otherwise. */
12736 bool
12737 move_signature_fn_p (const_tree d)
12739 tree args;
12740 tree arg_type;
12741 bool result = false;
12743 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12744 if (!args)
12745 return 0;
12747 arg_type = TREE_VALUE (args);
12748 if (arg_type == error_mark_node)
12749 return 0;
12751 if (TREE_CODE (arg_type) == REFERENCE_TYPE
12752 && TYPE_REF_IS_RVALUE (arg_type)
12753 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
12754 DECL_CONTEXT (d)))
12755 result = true;
12757 args = TREE_CHAIN (args);
12759 if (args && args != void_list_node && !TREE_PURPOSE (args))
12760 /* There are more non-optional args. */
12761 return false;
12763 return result;
12766 /* Remember any special properties of member function DECL. */
12768 void
12769 grok_special_member_properties (tree decl)
12771 tree class_type;
12773 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
12774 return;
12776 class_type = DECL_CONTEXT (decl);
12777 if (DECL_CONSTRUCTOR_P (decl))
12779 int ctor = copy_fn_p (decl);
12781 if (!DECL_ARTIFICIAL (decl))
12782 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
12784 if (ctor > 0)
12786 /* [class.copy]
12788 A non-template constructor for class X is a copy
12789 constructor if its first parameter is of type X&, const
12790 X&, volatile X& or const volatile X&, and either there
12791 are no other parameters or else all other parameters have
12792 default arguments. */
12793 TYPE_HAS_COPY_CTOR (class_type) = 1;
12794 if (user_provided_p (decl))
12795 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
12796 if (ctor > 1)
12797 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
12799 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
12800 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
12801 else if (move_fn_p (decl) && user_provided_p (decl))
12802 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
12803 else if (is_list_ctor (decl))
12804 TYPE_HAS_LIST_CTOR (class_type) = 1;
12806 if (DECL_DECLARED_CONSTEXPR_P (decl)
12807 && !copy_fn_p (decl) && !move_fn_p (decl))
12808 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
12810 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
12812 /* [class.copy]
12814 A non-template assignment operator for class X is a copy
12815 assignment operator if its parameter is of type X, X&, const
12816 X&, volatile X& or const volatile X&. */
12818 int assop = copy_fn_p (decl);
12820 if (assop)
12822 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
12823 if (user_provided_p (decl))
12824 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
12825 if (assop != 1)
12826 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
12828 else if (move_fn_p (decl) && user_provided_p (decl))
12829 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
12831 /* Destructors are handled in check_methods. */
12834 /* Check a constructor DECL has the correct form. Complains
12835 if the class has a constructor of the form X(X). */
12838 grok_ctor_properties (const_tree ctype, const_tree decl)
12840 int ctor_parm = copy_fn_p (decl);
12842 if (ctor_parm < 0)
12844 /* [class.copy]
12846 A declaration of a constructor for a class X is ill-formed if
12847 its first parameter is of type (optionally cv-qualified) X
12848 and either there are no other parameters or else all other
12849 parameters have default arguments.
12851 We *don't* complain about member template instantiations that
12852 have this form, though; they can occur as we try to decide
12853 what constructor to use during overload resolution. Since
12854 overload resolution will never prefer such a constructor to
12855 the non-template copy constructor (which is either explicitly
12856 or implicitly defined), there's no need to worry about their
12857 existence. Theoretically, they should never even be
12858 instantiated, but that's hard to forestall. */
12859 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
12860 ctype, ctype);
12861 return 0;
12864 return 1;
12867 /* An operator with this code is unary, but can also be binary. */
12869 static int
12870 ambi_op_p (enum tree_code code)
12872 return (code == INDIRECT_REF
12873 || code == ADDR_EXPR
12874 || code == UNARY_PLUS_EXPR
12875 || code == NEGATE_EXPR
12876 || code == PREINCREMENT_EXPR
12877 || code == PREDECREMENT_EXPR);
12880 /* An operator with this name can only be unary. */
12882 static int
12883 unary_op_p (enum tree_code code)
12885 return (code == TRUTH_NOT_EXPR
12886 || code == BIT_NOT_EXPR
12887 || code == COMPONENT_REF
12888 || code == TYPE_EXPR);
12891 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
12892 errors are issued for invalid declarations. */
12894 bool
12895 grok_op_properties (tree decl, bool complain)
12897 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12898 tree argtype;
12899 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12900 tree name = DECL_NAME (decl);
12901 enum tree_code operator_code;
12902 int arity;
12903 bool ellipsis_p;
12904 tree class_type;
12906 /* Count the number of arguments and check for ellipsis. */
12907 for (argtype = argtypes, arity = 0;
12908 argtype && argtype != void_list_node;
12909 argtype = TREE_CHAIN (argtype))
12910 ++arity;
12911 ellipsis_p = !argtype;
12913 class_type = DECL_CONTEXT (decl);
12914 if (class_type && !CLASS_TYPE_P (class_type))
12915 class_type = NULL_TREE;
12917 if (DECL_CONV_FN_P (decl))
12918 operator_code = TYPE_EXPR;
12919 else
12922 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
12923 if (ansi_opname (CODE) == name) \
12925 operator_code = (CODE); \
12926 break; \
12928 else if (ansi_assopname (CODE) == name) \
12930 operator_code = (CODE); \
12931 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
12932 break; \
12935 #include "operators.def"
12936 #undef DEF_OPERATOR
12938 gcc_unreachable ();
12940 while (0);
12941 gcc_assert (operator_code != MAX_TREE_CODES);
12942 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12944 if (class_type)
12945 switch (operator_code)
12947 case NEW_EXPR:
12948 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
12949 break;
12951 case DELETE_EXPR:
12952 TYPE_GETS_DELETE (class_type) |= 1;
12953 break;
12955 case VEC_NEW_EXPR:
12956 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
12957 break;
12959 case VEC_DELETE_EXPR:
12960 TYPE_GETS_DELETE (class_type) |= 2;
12961 break;
12963 default:
12964 break;
12967 /* [basic.std.dynamic.allocation]/1:
12969 A program is ill-formed if an allocation function is declared
12970 in a namespace scope other than global scope or declared static
12971 in global scope.
12973 The same also holds true for deallocation functions. */
12974 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
12975 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
12977 if (DECL_NAMESPACE_SCOPE_P (decl))
12979 if (CP_DECL_CONTEXT (decl) != global_namespace)
12981 error ("%qD may not be declared within a namespace", decl);
12982 return false;
12984 else if (!TREE_PUBLIC (decl))
12986 error ("%qD may not be declared as static", decl);
12987 return false;
12992 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
12994 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12995 DECL_IS_OPERATOR_NEW (decl) = 1;
12997 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
12998 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12999 else
13001 /* An operator function must either be a non-static member function
13002 or have at least one parameter of a class, a reference to a class,
13003 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13004 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13006 if (operator_code == TYPE_EXPR
13007 || operator_code == CALL_EXPR
13008 || operator_code == COMPONENT_REF
13009 || operator_code == ARRAY_REF
13010 || operator_code == NOP_EXPR)
13012 error ("%qD must be a nonstatic member function", decl);
13013 return false;
13015 else
13017 tree p;
13019 if (DECL_STATIC_FUNCTION_P (decl))
13021 error ("%qD must be either a non-static member "
13022 "function or a non-member function", decl);
13023 return false;
13026 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
13028 tree arg = non_reference (TREE_VALUE (p));
13029 if (arg == error_mark_node)
13030 return false;
13032 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13033 because these checks are performed even on
13034 template functions. */
13035 if (MAYBE_CLASS_TYPE_P (arg)
13036 || TREE_CODE (arg) == ENUMERAL_TYPE)
13037 break;
13040 if (!p || p == void_list_node)
13042 if (complain)
13043 error ("%qD must have an argument of class or "
13044 "enumerated type", decl);
13045 return false;
13050 /* There are no restrictions on the arguments to an overloaded
13051 "operator ()". */
13052 if (operator_code == CALL_EXPR)
13053 return true;
13055 /* Warn about conversion operators that will never be used. */
13056 if (IDENTIFIER_TYPENAME_P (name)
13057 && ! DECL_TEMPLATE_INFO (decl)
13058 && warn_conversion
13059 /* Warn only declaring the function; there is no need to
13060 warn again about out-of-class definitions. */
13061 && class_type == current_class_type)
13063 tree t = TREE_TYPE (name);
13064 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
13066 if (ref)
13067 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13069 if (VOID_TYPE_P (t))
13070 warning (OPT_Wconversion,
13072 ? G_("conversion to a reference to void "
13073 "will never use a type conversion operator")
13074 : G_("conversion to void "
13075 "will never use a type conversion operator"));
13076 else if (class_type)
13078 if (t == class_type)
13079 warning (OPT_Wconversion,
13081 ? G_("conversion to a reference to the same type "
13082 "will never use a type conversion operator")
13083 : G_("conversion to the same type "
13084 "will never use a type conversion operator"));
13085 /* Don't force t to be complete here. */
13086 else if (MAYBE_CLASS_TYPE_P (t)
13087 && COMPLETE_TYPE_P (t)
13088 && DERIVED_FROM_P (t, class_type))
13089 warning (OPT_Wconversion,
13091 ? G_("conversion to a reference to a base class "
13092 "will never use a type conversion operator")
13093 : G_("conversion to a base class "
13094 "will never use a type conversion operator"));
13099 if (operator_code == COND_EXPR)
13101 /* 13.4.0.3 */
13102 error ("ISO C++ prohibits overloading operator ?:");
13103 return false;
13105 else if (ellipsis_p)
13107 error ("%qD must not have variable number of arguments", decl);
13108 return false;
13110 else if (ambi_op_p (operator_code))
13112 if (arity == 1)
13113 /* We pick the one-argument operator codes by default, so
13114 we don't have to change anything. */
13116 else if (arity == 2)
13118 /* If we thought this was a unary operator, we now know
13119 it to be a binary operator. */
13120 switch (operator_code)
13122 case INDIRECT_REF:
13123 operator_code = MULT_EXPR;
13124 break;
13126 case ADDR_EXPR:
13127 operator_code = BIT_AND_EXPR;
13128 break;
13130 case UNARY_PLUS_EXPR:
13131 operator_code = PLUS_EXPR;
13132 break;
13134 case NEGATE_EXPR:
13135 operator_code = MINUS_EXPR;
13136 break;
13138 case PREINCREMENT_EXPR:
13139 operator_code = POSTINCREMENT_EXPR;
13140 break;
13142 case PREDECREMENT_EXPR:
13143 operator_code = POSTDECREMENT_EXPR;
13144 break;
13146 default:
13147 gcc_unreachable ();
13150 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
13152 if ((operator_code == POSTINCREMENT_EXPR
13153 || operator_code == POSTDECREMENT_EXPR)
13154 && ! processing_template_decl
13155 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
13157 if (methodp)
13158 error ("postfix %qD must take %<int%> as its argument",
13159 decl);
13160 else
13161 error ("postfix %qD must take %<int%> as its second "
13162 "argument", decl);
13163 return false;
13166 else
13168 if (methodp)
13169 error ("%qD must take either zero or one argument", decl);
13170 else
13171 error ("%qD must take either one or two arguments", decl);
13172 return false;
13175 /* More Effective C++ rule 6. */
13176 if (warn_ecpp
13177 && (operator_code == POSTINCREMENT_EXPR
13178 || operator_code == POSTDECREMENT_EXPR
13179 || operator_code == PREINCREMENT_EXPR
13180 || operator_code == PREDECREMENT_EXPR))
13182 tree arg = TREE_VALUE (argtypes);
13183 tree ret = TREE_TYPE (TREE_TYPE (decl));
13184 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
13185 arg = TREE_TYPE (arg);
13186 arg = TYPE_MAIN_VARIANT (arg);
13187 if (operator_code == PREINCREMENT_EXPR
13188 || operator_code == PREDECREMENT_EXPR)
13190 if (TREE_CODE (ret) != REFERENCE_TYPE
13191 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
13192 arg))
13193 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
13194 build_reference_type (arg));
13196 else
13198 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13199 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
13203 else if (unary_op_p (operator_code))
13205 if (arity != 1)
13207 if (methodp)
13208 error ("%qD must take %<void%>", decl);
13209 else
13210 error ("%qD must take exactly one argument", decl);
13211 return false;
13214 else /* if (binary_op_p (operator_code)) */
13216 if (arity != 2)
13218 if (methodp)
13219 error ("%qD must take exactly one argument", decl);
13220 else
13221 error ("%qD must take exactly two arguments", decl);
13222 return false;
13225 /* More Effective C++ rule 7. */
13226 if (warn_ecpp
13227 && (operator_code == TRUTH_ANDIF_EXPR
13228 || operator_code == TRUTH_ORIF_EXPR
13229 || operator_code == COMPOUND_EXPR))
13230 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
13231 decl);
13234 /* Effective C++ rule 23. */
13235 if (warn_ecpp
13236 && arity == 2
13237 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
13238 && (operator_code == PLUS_EXPR
13239 || operator_code == MINUS_EXPR
13240 || operator_code == TRUNC_DIV_EXPR
13241 || operator_code == MULT_EXPR
13242 || operator_code == TRUNC_MOD_EXPR)
13243 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
13244 warning (OPT_Weffc__, "%qD should return by value", decl);
13246 /* [over.oper]/8 */
13247 for (; argtypes && argtypes != void_list_node;
13248 argtypes = TREE_CHAIN (argtypes))
13249 if (TREE_PURPOSE (argtypes))
13251 TREE_PURPOSE (argtypes) = NULL_TREE;
13252 if (operator_code == POSTINCREMENT_EXPR
13253 || operator_code == POSTDECREMENT_EXPR)
13255 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments",
13256 decl);
13258 else
13260 error ("%qD cannot have default arguments", decl);
13261 return false;
13265 return true;
13268 /* Return a string giving the keyword associate with CODE. */
13270 static const char *
13271 tag_name (enum tag_types code)
13273 switch (code)
13275 case record_type:
13276 return "struct";
13277 case class_type:
13278 return "class";
13279 case union_type:
13280 return "union";
13281 case enum_type:
13282 return "enum";
13283 case typename_type:
13284 return "typename";
13285 default:
13286 gcc_unreachable ();
13290 /* Name lookup in an elaborated-type-specifier (after the keyword
13291 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13292 elaborated-type-specifier is invalid, issue a diagnostic and return
13293 error_mark_node; otherwise, return the *_TYPE to which it referred.
13294 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13296 tree
13297 check_elaborated_type_specifier (enum tag_types tag_code,
13298 tree decl,
13299 bool allow_template_p)
13301 tree type;
13303 /* In the case of:
13305 struct S { struct S *p; };
13307 name lookup will find the TYPE_DECL for the implicit "S::S"
13308 typedef. Adjust for that here. */
13309 if (DECL_SELF_REFERENCE_P (decl))
13310 decl = TYPE_NAME (TREE_TYPE (decl));
13312 type = TREE_TYPE (decl);
13314 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13315 is false for this case as well. */
13316 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13318 error ("using template type parameter %qT after %qs",
13319 type, tag_name (tag_code));
13320 return error_mark_node;
13322 /* Accept template template parameters. */
13323 else if (allow_template_p
13324 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13325 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13327 /* [dcl.type.elab]
13329 If the identifier resolves to a typedef-name or the
13330 simple-template-id resolves to an alias template
13331 specialization, the elaborated-type-specifier is ill-formed.
13333 In other words, the only legitimate declaration to use in the
13334 elaborated type specifier is the implicit typedef created when
13335 the type is declared. */
13336 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13337 && !DECL_SELF_REFERENCE_P (decl)
13338 && tag_code != typename_type)
13340 if (alias_template_specialization_p (type))
13341 error ("using alias template specialization %qT after %qs",
13342 type, tag_name (tag_code));
13343 else
13344 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13345 inform (DECL_SOURCE_LOCATION (decl),
13346 "%qD has a previous declaration here", decl);
13347 return error_mark_node;
13349 else if (TREE_CODE (type) != RECORD_TYPE
13350 && TREE_CODE (type) != UNION_TYPE
13351 && tag_code != enum_type
13352 && tag_code != typename_type)
13354 error ("%qT referred to as %qs", type, tag_name (tag_code));
13355 inform (location_of (type), "%qT has a previous declaration here", type);
13356 return error_mark_node;
13358 else if (TREE_CODE (type) != ENUMERAL_TYPE
13359 && tag_code == enum_type)
13361 error ("%qT referred to as enum", type);
13362 inform (location_of (type), "%qT has a previous declaration here", type);
13363 return error_mark_node;
13365 else if (!allow_template_p
13366 && TREE_CODE (type) == RECORD_TYPE
13367 && CLASSTYPE_IS_TEMPLATE (type))
13369 /* If a class template appears as elaborated type specifier
13370 without a template header such as:
13372 template <class T> class C {};
13373 void f(class C); // No template header here
13375 then the required template argument is missing. */
13376 error ("template argument required for %<%s %T%>",
13377 tag_name (tag_code),
13378 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13379 return error_mark_node;
13382 return type;
13385 /* Lookup NAME in elaborate type specifier in scope according to
13386 SCOPE and issue diagnostics if necessary.
13387 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13388 found, and ERROR_MARK_NODE for type error. */
13390 static tree
13391 lookup_and_check_tag (enum tag_types tag_code, tree name,
13392 tag_scope scope, bool template_header_p)
13394 tree t;
13395 tree decl;
13396 if (scope == ts_global)
13398 /* First try ordinary name lookup, ignoring hidden class name
13399 injected via friend declaration. */
13400 decl = lookup_name_prefer_type (name, 2);
13401 decl = strip_using_decl (decl);
13402 /* If that fails, the name will be placed in the smallest
13403 non-class, non-function-prototype scope according to 3.3.1/5.
13404 We may already have a hidden name declared as friend in this
13405 scope. So lookup again but not ignoring hidden names.
13406 If we find one, that name will be made visible rather than
13407 creating a new tag. */
13408 if (!decl)
13409 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13411 else
13412 decl = lookup_type_scope (name, scope);
13414 if (decl
13415 && (DECL_CLASS_TEMPLATE_P (decl)
13416 /* If scope is ts_current we're defining a class, so ignore a
13417 template template parameter. */
13418 || (scope != ts_current
13419 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13420 decl = DECL_TEMPLATE_RESULT (decl);
13422 if (decl && TREE_CODE (decl) == TYPE_DECL)
13424 /* Look for invalid nested type:
13425 class C {
13426 class C {};
13427 }; */
13428 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13430 error ("%qD has the same name as the class in which it is "
13431 "declared",
13432 decl);
13433 return error_mark_node;
13436 /* Two cases we need to consider when deciding if a class
13437 template is allowed as an elaborated type specifier:
13438 1. It is a self reference to its own class.
13439 2. It comes with a template header.
13441 For example:
13443 template <class T> class C {
13444 class C *c1; // DECL_SELF_REFERENCE_P is true
13445 class D;
13447 template <class U> class C; // template_header_p is true
13448 template <class T> class C<T>::D {
13449 class C *c2; // DECL_SELF_REFERENCE_P is true
13450 }; */
13452 t = check_elaborated_type_specifier (tag_code,
13453 decl,
13454 template_header_p
13455 | DECL_SELF_REFERENCE_P (decl));
13456 if (template_header_p && t && CLASS_TYPE_P (t)
13457 && (!CLASSTYPE_TEMPLATE_INFO (t)
13458 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13460 error ("%qT is not a template", t);
13461 inform (location_of (t), "previous declaration here");
13462 if (TYPE_CLASS_SCOPE_P (t)
13463 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13464 inform (input_location,
13465 "perhaps you want to explicitly add %<%T::%>",
13466 TYPE_CONTEXT (t));
13467 t = error_mark_node;
13470 return t;
13472 else if (decl && TREE_CODE (decl) == TREE_LIST)
13474 error ("reference to %qD is ambiguous", name);
13475 print_candidates (decl);
13476 return error_mark_node;
13478 else
13479 return NULL_TREE;
13482 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13483 Define the tag as a forward-reference if it is not defined.
13485 If a declaration is given, process it here, and report an error if
13486 multiple declarations are not identical.
13488 SCOPE is TS_CURRENT when this is also a definition. Only look in
13489 the current frame for the name (since C++ allows new names in any
13490 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13491 declaration. Only look beginning from the current scope outward up
13492 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13494 TEMPLATE_HEADER_P is true when this declaration is preceded by
13495 a set of template parameters. */
13497 static tree
13498 xref_tag_1 (enum tag_types tag_code, tree name,
13499 tag_scope orig_scope, bool template_header_p)
13501 enum tree_code code;
13502 tree t;
13503 tree context = NULL_TREE;
13504 tag_scope scope;
13506 gcc_assert (identifier_p (name));
13508 switch (tag_code)
13510 case record_type:
13511 case class_type:
13512 code = RECORD_TYPE;
13513 break;
13514 case union_type:
13515 code = UNION_TYPE;
13516 break;
13517 case enum_type:
13518 code = ENUMERAL_TYPE;
13519 break;
13520 default:
13521 gcc_unreachable ();
13524 if (orig_scope == ts_lambda)
13525 scope = ts_current;
13526 else
13527 scope = orig_scope;
13529 /* In case of anonymous name, xref_tag is only called to
13530 make type node and push name. Name lookup is not required. */
13531 if (anon_aggrname_p (name))
13532 t = NULL_TREE;
13533 else
13534 t = lookup_and_check_tag (tag_code, name,
13535 scope, template_header_p);
13537 if (t == error_mark_node)
13538 return error_mark_node;
13540 if (scope != ts_current && t && current_class_type
13541 && template_class_depth (current_class_type)
13542 && template_header_p)
13544 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13545 return t;
13547 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13548 definition of this tag. Since, in addition, we are currently
13549 processing a (member) template declaration of a template
13550 class, we must be very careful; consider:
13552 template <class X>
13553 struct S1
13555 template <class U>
13556 struct S2
13557 { template <class V>
13558 friend struct S1; };
13560 Here, the S2::S1 declaration should not be confused with the
13561 outer declaration. In particular, the inner version should
13562 have a template parameter of level 2, not level 1. This
13563 would be particularly important if the member declaration
13564 were instead:
13566 template <class V = U> friend struct S1;
13568 say, when we should tsubst into `U' when instantiating
13569 S2. On the other hand, when presented with:
13571 template <class T>
13572 struct S1 {
13573 template <class U>
13574 struct S2 {};
13575 template <class U>
13576 friend struct S2;
13579 we must find the inner binding eventually. We
13580 accomplish this by making sure that the new type we
13581 create to represent this declaration has the right
13582 TYPE_CONTEXT. */
13583 context = TYPE_CONTEXT (t);
13584 t = NULL_TREE;
13587 if (! t)
13589 /* If no such tag is yet defined, create a forward-reference node
13590 and record it as the "definition".
13591 When a real declaration of this type is found,
13592 the forward-reference will be altered into a real type. */
13593 if (code == ENUMERAL_TYPE)
13595 error ("use of enum %q#D without previous declaration", name);
13596 return error_mark_node;
13598 else
13600 t = make_class_type (code);
13601 TYPE_CONTEXT (t) = context;
13602 if (orig_scope == ts_lambda)
13603 /* Remember that we're declaring a lambda to avoid bogus errors
13604 in push_template_decl. */
13605 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13606 t = pushtag (name, t, scope);
13609 else
13611 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13613 /* Check that we aren't trying to overload a class with different
13614 constraints. */
13615 tree constr = NULL_TREE;
13616 if (current_template_parms)
13618 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13619 constr = build_constraints (reqs, NULL_TREE);
13621 if (!redeclare_class_template (t, current_template_parms, constr))
13622 return error_mark_node;
13624 else if (!processing_template_decl
13625 && CLASS_TYPE_P (t)
13626 && CLASSTYPE_IS_TEMPLATE (t))
13628 error ("redeclaration of %qT as a non-template", t);
13629 inform (location_of (t), "previous declaration %qD", t);
13630 return error_mark_node;
13633 /* Make injected friend class visible. */
13634 if (scope != ts_within_enclosing_non_class
13635 && hidden_name_p (TYPE_NAME (t)))
13637 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
13638 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
13640 if (TYPE_TEMPLATE_INFO (t))
13642 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
13643 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
13648 return t;
13651 /* Wrapper for xref_tag_1. */
13653 tree
13654 xref_tag (enum tag_types tag_code, tree name,
13655 tag_scope scope, bool template_header_p)
13657 tree ret;
13658 bool subtime;
13659 subtime = timevar_cond_start (TV_NAME_LOOKUP);
13660 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13661 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13662 return ret;
13666 tree
13667 xref_tag_from_type (tree old, tree id, tag_scope scope)
13669 enum tag_types tag_kind;
13671 if (TREE_CODE (old) == RECORD_TYPE)
13672 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13673 else
13674 tag_kind = union_type;
13676 if (id == NULL_TREE)
13677 id = TYPE_IDENTIFIER (old);
13679 return xref_tag (tag_kind, id, scope, false);
13682 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13683 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
13684 access_* node, and the TREE_VALUE is the type of the base-class.
13685 Non-NULL TREE_TYPE indicates virtual inheritance. */
13687 void
13688 xref_basetypes (tree ref, tree base_list)
13690 tree *basep;
13691 tree binfo, base_binfo;
13692 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
13693 unsigned max_bases = 0; /* Maximum direct bases. */
13694 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
13695 int i;
13696 tree default_access;
13697 tree igo_prev; /* Track Inheritance Graph Order. */
13699 if (ref == error_mark_node)
13700 return;
13702 /* The base of a derived class is private by default, all others are
13703 public. */
13704 default_access = (TREE_CODE (ref) == RECORD_TYPE
13705 && CLASSTYPE_DECLARED_CLASS (ref)
13706 ? access_private_node : access_public_node);
13708 /* First, make sure that any templates in base-classes are
13709 instantiated. This ensures that if we call ourselves recursively
13710 we do not get confused about which classes are marked and which
13711 are not. */
13712 basep = &base_list;
13713 while (*basep)
13715 tree basetype = TREE_VALUE (*basep);
13717 /* The dependent_type_p call below should really be dependent_scope_p
13718 so that we give a hard error about using an incomplete type as a
13719 base, but we allow it with a pedwarn for backward
13720 compatibility. */
13721 if (processing_template_decl
13722 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13723 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13724 if (!dependent_type_p (basetype)
13725 && !complete_type_or_else (basetype, NULL))
13726 /* An incomplete type. Remove it from the list. */
13727 *basep = TREE_CHAIN (*basep);
13728 else
13730 max_bases++;
13731 if (TREE_TYPE (*basep))
13732 max_dvbases++;
13733 if (CLASS_TYPE_P (basetype))
13734 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13735 basep = &TREE_CHAIN (*basep);
13738 max_vbases += max_dvbases;
13740 TYPE_MARKED_P (ref) = 1;
13742 /* The binfo slot should be empty, unless this is an (ill-formed)
13743 redefinition. */
13744 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13746 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13748 binfo = make_tree_binfo (max_bases);
13750 TYPE_BINFO (ref) = binfo;
13751 BINFO_OFFSET (binfo) = size_zero_node;
13752 BINFO_TYPE (binfo) = ref;
13754 /* Apply base-class info set up to the variants of this type. */
13755 fixup_type_variants (ref);
13757 if (max_bases)
13759 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
13760 /* A C++98 POD cannot have base classes. */
13761 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
13763 if (TREE_CODE (ref) == UNION_TYPE)
13764 error ("derived union %qT invalid", ref);
13767 if (max_bases > 1)
13768 warning (OPT_Wmultiple_inheritance,
13769 "%qT defined with multiple direct bases", ref);
13771 if (max_vbases)
13773 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
13775 if (max_dvbases)
13776 warning (OPT_Wvirtual_inheritance,
13777 "%qT defined with direct virtual base", ref);
13780 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
13782 tree access = TREE_PURPOSE (base_list);
13783 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
13784 tree basetype = TREE_VALUE (base_list);
13786 if (access == access_default_node)
13787 access = default_access;
13789 /* Before C++17, an aggregate cannot have base classes. In C++17, an
13790 aggregate can't have virtual, private, or protected base classes. */
13791 if (cxx_dialect < cxx1z
13792 || access != access_public_node
13793 || via_virtual)
13794 CLASSTYPE_NON_AGGREGATE (ref) = true;
13796 if (PACK_EXPANSION_P (basetype))
13797 basetype = PACK_EXPANSION_PATTERN (basetype);
13798 if (TREE_CODE (basetype) == TYPE_DECL)
13799 basetype = TREE_TYPE (basetype);
13800 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
13802 error ("base type %qT fails to be a struct or class type",
13803 basetype);
13804 goto dropped_base;
13807 base_binfo = NULL_TREE;
13808 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
13810 base_binfo = TYPE_BINFO (basetype);
13811 /* The original basetype could have been a typedef'd type. */
13812 basetype = BINFO_TYPE (base_binfo);
13814 /* Inherit flags from the base. */
13815 TYPE_HAS_NEW_OPERATOR (ref)
13816 |= TYPE_HAS_NEW_OPERATOR (basetype);
13817 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13818 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
13819 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
13820 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
13821 CLASSTYPE_DIAMOND_SHAPED_P (ref)
13822 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
13823 CLASSTYPE_REPEATED_BASE_P (ref)
13824 |= CLASSTYPE_REPEATED_BASE_P (basetype);
13827 /* We must do this test after we've seen through a typedef
13828 type. */
13829 if (TYPE_MARKED_P (basetype))
13831 if (basetype == ref)
13832 error ("recursive type %qT undefined", basetype);
13833 else
13834 error ("duplicate base type %qT invalid", basetype);
13835 goto dropped_base;
13838 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
13839 /* Regenerate the pack expansion for the bases. */
13840 basetype = make_pack_expansion (basetype);
13842 TYPE_MARKED_P (basetype) = 1;
13844 base_binfo = copy_binfo (base_binfo, basetype, ref,
13845 &igo_prev, via_virtual);
13846 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
13847 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
13849 BINFO_BASE_APPEND (binfo, base_binfo);
13850 BINFO_BASE_ACCESS_APPEND (binfo, access);
13851 continue;
13853 dropped_base:
13854 /* Update max_vbases to reflect the reality that we are dropping
13855 this base: if it reaches zero we want to undo the vec_alloc
13856 above to avoid inconsistencies during error-recovery: eg, in
13857 build_special_member_call, CLASSTYPE_VBASECLASSES non null
13858 and vtt null (c++/27952). */
13859 if (via_virtual)
13860 max_vbases--;
13861 if (CLASS_TYPE_P (basetype))
13862 max_vbases
13863 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13866 if (CLASSTYPE_VBASECLASSES (ref)
13867 && max_vbases == 0)
13868 vec_free (CLASSTYPE_VBASECLASSES (ref));
13870 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
13871 /* If we didn't get max_vbases vbases, we must have shared at
13872 least one of them, and are therefore diamond shaped. */
13873 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
13875 /* Unmark all the types. */
13876 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
13877 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13878 TYPE_MARKED_P (ref) = 0;
13880 /* Now see if we have a repeated base type. */
13881 if (!CLASSTYPE_REPEATED_BASE_P (ref))
13883 for (base_binfo = binfo; base_binfo;
13884 base_binfo = TREE_CHAIN (base_binfo))
13886 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13888 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
13889 break;
13891 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
13893 for (base_binfo = binfo; base_binfo;
13894 base_binfo = TREE_CHAIN (base_binfo))
13895 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13896 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13897 else
13898 break;
13903 /* Copies the enum-related properties from type SRC to type DST.
13904 Used with the underlying type of an enum and the enum itself. */
13905 static void
13906 copy_type_enum (tree dst, tree src)
13908 tree t;
13909 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
13911 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
13912 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
13913 TYPE_SIZE (t) = TYPE_SIZE (src);
13914 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
13915 SET_TYPE_MODE (dst, TYPE_MODE (src));
13916 TYPE_PRECISION (t) = TYPE_PRECISION (src);
13917 unsigned valign = TYPE_ALIGN (src);
13918 if (TYPE_USER_ALIGN (t))
13919 valign = MAX (valign, TYPE_ALIGN (t));
13920 else
13921 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
13922 SET_TYPE_ALIGN (t, valign);
13923 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
13927 /* Begin compiling the definition of an enumeration type.
13928 NAME is its name,
13930 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
13932 UNDERLYING_TYPE is the type that will be used as the storage for
13933 the enumeration type. This should be NULL_TREE if no storage type
13934 was specified.
13936 ATTRIBUTES are any attributes specified after the enum-key.
13938 SCOPED_ENUM_P is true if this is a scoped enumeration type.
13940 if IS_NEW is not NULL, gets TRUE iff a new type is created.
13942 Returns the type object, as yet incomplete.
13943 Also records info about it so that build_enumerator
13944 may be used to declare the individual values as they are read. */
13946 tree
13947 start_enum (tree name, tree enumtype, tree underlying_type,
13948 tree attributes, bool scoped_enum_p, bool *is_new)
13950 tree prevtype = NULL_TREE;
13951 gcc_assert (identifier_p (name));
13953 if (is_new)
13954 *is_new = false;
13955 /* [C++0x dcl.enum]p5:
13957 If not explicitly specified, the underlying type of a scoped
13958 enumeration type is int. */
13959 if (!underlying_type && scoped_enum_p)
13960 underlying_type = integer_type_node;
13962 if (underlying_type)
13963 underlying_type = cv_unqualified (underlying_type);
13965 /* If this is the real definition for a previous forward reference,
13966 fill in the contents in the same object that used to be the
13967 forward reference. */
13968 if (!enumtype)
13969 enumtype = lookup_and_check_tag (enum_type, name,
13970 /*tag_scope=*/ts_current,
13971 /*template_header_p=*/false);
13973 /* In case of a template_decl, the only check that should be deferred
13974 to instantiation time is the comparison of underlying types. */
13975 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
13977 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
13979 error_at (input_location, "scoped/unscoped mismatch "
13980 "in enum %q#T", enumtype);
13981 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
13982 "previous definition here");
13983 enumtype = error_mark_node;
13985 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
13987 error_at (input_location, "underlying type mismatch "
13988 "in enum %q#T", enumtype);
13989 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
13990 "previous definition here");
13991 enumtype = error_mark_node;
13993 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
13994 && !dependent_type_p (underlying_type)
13995 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
13996 && !same_type_p (underlying_type,
13997 ENUM_UNDERLYING_TYPE (enumtype)))
13999 error_at (input_location, "different underlying type "
14000 "in enum %q#T", enumtype);
14001 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14002 "previous definition here");
14003 underlying_type = NULL_TREE;
14007 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14008 || processing_template_decl)
14010 /* In case of error, make a dummy enum to allow parsing to
14011 continue. */
14012 if (enumtype == error_mark_node)
14014 name = make_anon_name ();
14015 enumtype = NULL_TREE;
14018 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14019 of an opaque enum, or an opaque enum of an already defined
14020 enumeration (C++0x only).
14021 In any other case, it'll be NULL_TREE. */
14022 if (!enumtype)
14024 if (is_new)
14025 *is_new = true;
14027 prevtype = enumtype;
14029 /* Do not push the decl more than once, unless we need to
14030 compare underlying types at instantiation time */
14031 if (!enumtype
14032 || TREE_CODE (enumtype) != ENUMERAL_TYPE
14033 || (underlying_type
14034 && dependent_type_p (underlying_type))
14035 || (ENUM_UNDERLYING_TYPE (enumtype)
14036 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
14038 enumtype = cxx_make_type (ENUMERAL_TYPE);
14039 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14041 else
14042 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14043 false);
14045 if (enumtype == error_mark_node)
14046 return error_mark_node;
14048 /* The enum is considered opaque until the opening '{' of the
14049 enumerator list. */
14050 SET_OPAQUE_ENUM_P (enumtype, true);
14051 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14054 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14056 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14058 if (underlying_type)
14060 if (ENUM_UNDERLYING_TYPE (enumtype))
14061 /* We already checked that it matches, don't change it to a different
14062 typedef variant. */;
14063 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14065 copy_type_enum (enumtype, underlying_type);
14066 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14068 else if (dependent_type_p (underlying_type))
14069 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14070 else
14071 error ("underlying type %<%T%> of %<%T%> must be an integral type",
14072 underlying_type, enumtype);
14075 /* If into a template class, the returned enum is always the first
14076 declaration (opaque or not) seen. This way all the references to
14077 this type will be to the same declaration. The following ones are used
14078 only to check for definition errors. */
14079 if (prevtype && processing_template_decl)
14080 return prevtype;
14081 else
14082 return enumtype;
14085 /* After processing and defining all the values of an enumeration type,
14086 install their decls in the enumeration type.
14087 ENUMTYPE is the type object. */
14089 void
14090 finish_enum_value_list (tree enumtype)
14092 tree values;
14093 tree underlying_type;
14094 tree decl;
14095 tree value;
14096 tree minnode, maxnode;
14097 tree t;
14099 bool fixed_underlying_type_p
14100 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14102 /* We built up the VALUES in reverse order. */
14103 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14105 /* For an enum defined in a template, just set the type of the values;
14106 all further processing is postponed until the template is
14107 instantiated. We need to set the type so that tsubst of a CONST_DECL
14108 works. */
14109 if (processing_template_decl)
14111 for (values = TYPE_VALUES (enumtype);
14112 values;
14113 values = TREE_CHAIN (values))
14114 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14115 return;
14118 /* Determine the minimum and maximum values of the enumerators. */
14119 if (TYPE_VALUES (enumtype))
14121 minnode = maxnode = NULL_TREE;
14123 for (values = TYPE_VALUES (enumtype);
14124 values;
14125 values = TREE_CHAIN (values))
14127 decl = TREE_VALUE (values);
14129 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14130 each enumerator has the type of its enumeration. Prior to the
14131 closing brace, the type of each enumerator is the type of its
14132 initializing value. */
14133 TREE_TYPE (decl) = enumtype;
14135 /* Update the minimum and maximum values, if appropriate. */
14136 value = DECL_INITIAL (decl);
14137 if (value == error_mark_node)
14138 value = integer_zero_node;
14139 /* Figure out what the minimum and maximum values of the
14140 enumerators are. */
14141 if (!minnode)
14142 minnode = maxnode = value;
14143 else if (tree_int_cst_lt (maxnode, value))
14144 maxnode = value;
14145 else if (tree_int_cst_lt (value, minnode))
14146 minnode = value;
14149 else
14150 /* [dcl.enum]
14152 If the enumerator-list is empty, the underlying type is as if
14153 the enumeration had a single enumerator with value 0. */
14154 minnode = maxnode = integer_zero_node;
14156 if (!fixed_underlying_type_p)
14158 /* Compute the number of bits require to represent all values of the
14159 enumeration. We must do this before the type of MINNODE and
14160 MAXNODE are transformed, since tree_int_cst_min_precision relies
14161 on the TREE_TYPE of the value it is passed. */
14162 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14163 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14164 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14165 int precision = MAX (lowprec, highprec);
14166 unsigned int itk;
14167 bool use_short_enum;
14169 /* Determine the underlying type of the enumeration.
14171 [dcl.enum]
14173 The underlying type of an enumeration is an integral type that
14174 can represent all the enumerator values defined in the
14175 enumeration. It is implementation-defined which integral type is
14176 used as the underlying type for an enumeration except that the
14177 underlying type shall not be larger than int unless the value of
14178 an enumerator cannot fit in an int or unsigned int.
14180 We use "int" or an "unsigned int" as the underlying type, even if
14181 a smaller integral type would work, unless the user has
14182 explicitly requested that we use the smallest possible type. The
14183 user can request that for all enumerations with a command line
14184 flag, or for just one enumeration with an attribute. */
14186 use_short_enum = flag_short_enums
14187 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14189 /* If the precision of the type was specified with an attribute and it
14190 was too small, give an error. Otherwise, use it. */
14191 if (TYPE_PRECISION (enumtype))
14193 if (precision > TYPE_PRECISION (enumtype))
14194 error ("specified mode too small for enumeral values");
14195 else
14197 use_short_enum = true;
14198 precision = TYPE_PRECISION (enumtype);
14202 for (itk = (use_short_enum ? itk_char : itk_int);
14203 itk != itk_none;
14204 itk++)
14206 underlying_type = integer_types[itk];
14207 if (underlying_type != NULL_TREE
14208 && TYPE_PRECISION (underlying_type) >= precision
14209 && TYPE_SIGN (underlying_type) == sgn)
14210 break;
14212 if (itk == itk_none)
14214 /* DR 377
14216 IF no integral type can represent all the enumerator values, the
14217 enumeration is ill-formed. */
14218 error ("no integral type can represent all of the enumerator values "
14219 "for %qT", enumtype);
14220 precision = TYPE_PRECISION (long_long_integer_type_node);
14221 underlying_type = integer_types[itk_unsigned_long_long];
14224 /* [dcl.enum]
14226 The value of sizeof() applied to an enumeration type, an object
14227 of an enumeration type, or an enumerator, is the value of sizeof()
14228 applied to the underlying type. */
14229 copy_type_enum (enumtype, underlying_type);
14231 /* Compute the minimum and maximum values for the type.
14233 [dcl.enum]
14235 For an enumeration where emin is the smallest enumerator and emax
14236 is the largest, the values of the enumeration are the values of the
14237 underlying type in the range bmin to bmax, where bmin and bmax are,
14238 respectively, the smallest and largest values of the smallest bit-
14239 field that can store emin and emax. */
14241 /* The middle-end currently assumes that types with TYPE_PRECISION
14242 narrower than their underlying type are suitably zero or sign
14243 extended to fill their mode. Similarly, it assumes that the front
14244 end assures that a value of a particular type must be within
14245 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14247 We used to set these fields based on bmin and bmax, but that led
14248 to invalid assumptions like optimizing away bounds checking. So
14249 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14250 TYPE_MAX_VALUE to the values for the mode above and only restrict
14251 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14252 ENUM_UNDERLYING_TYPE (enumtype)
14253 = build_distinct_type_copy (underlying_type);
14254 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14255 set_min_and_max_values_for_integral_type
14256 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14258 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14259 if (flag_strict_enums)
14260 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14262 else
14263 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14265 /* Convert each of the enumerators to the type of the underlying
14266 type of the enumeration. */
14267 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14269 location_t saved_location;
14271 decl = TREE_VALUE (values);
14272 saved_location = input_location;
14273 input_location = DECL_SOURCE_LOCATION (decl);
14274 if (fixed_underlying_type_p)
14275 /* If the enumeration type has a fixed underlying type, we
14276 already checked all of the enumerator values. */
14277 value = DECL_INITIAL (decl);
14278 else
14279 value = perform_implicit_conversion (underlying_type,
14280 DECL_INITIAL (decl),
14281 tf_warning_or_error);
14282 input_location = saved_location;
14284 /* Do not clobber shared ints. */
14285 value = copy_node (value);
14287 TREE_TYPE (value) = enumtype;
14288 DECL_INITIAL (decl) = value;
14291 /* Fix up all variant types of this enum type. */
14292 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14293 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14295 if (at_class_scope_p ()
14296 && COMPLETE_TYPE_P (current_class_type)
14297 && UNSCOPED_ENUM_P (enumtype))
14299 insert_late_enum_def_into_classtype_sorted_fields (enumtype,
14300 current_class_type);
14301 fixup_type_variants (current_class_type);
14304 /* Finish debugging output for this type. */
14305 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14307 /* Each enumerator now has the type of its enumeration. Clear the cache
14308 so that this change in types doesn't confuse us later on. */
14309 clear_cv_and_fold_caches ();
14312 /* Finishes the enum type. This is called only the first time an
14313 enumeration is seen, be it opaque or odinary.
14314 ENUMTYPE is the type object. */
14316 void
14317 finish_enum (tree enumtype)
14319 if (processing_template_decl)
14321 if (at_function_scope_p ())
14322 add_stmt (build_min (TAG_DEFN, enumtype));
14323 return;
14326 /* If this is a forward declaration, there should not be any variants,
14327 though we can get a variant in the middle of an enum-specifier with
14328 wacky code like 'enum E { e = sizeof(const E*) };' */
14329 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14330 && (TYPE_VALUES (enumtype)
14331 || !TYPE_NEXT_VARIANT (enumtype)));
14334 /* Build and install a CONST_DECL for an enumeration constant of the
14335 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14336 Apply ATTRIBUTES if available. LOC is the location of NAME.
14337 Assignment of sequential values by default is handled here. */
14339 void
14340 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14341 location_t loc)
14343 tree decl;
14344 tree context;
14345 tree type;
14347 /* scalar_constant_value will pull out this expression, so make sure
14348 it's folded as appropriate. */
14349 if (processing_template_decl)
14350 value = fold_non_dependent_expr (value);
14352 /* If the VALUE was erroneous, pretend it wasn't there; that will
14353 result in the enum being assigned the next value in sequence. */
14354 if (value == error_mark_node)
14355 value = NULL_TREE;
14357 /* Remove no-op casts from the value. */
14358 if (value)
14359 STRIP_TYPE_NOPS (value);
14361 if (! processing_template_decl)
14363 /* Validate and default VALUE. */
14364 if (value != NULL_TREE)
14366 if (!ENUM_UNDERLYING_TYPE (enumtype))
14368 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14369 value, true);
14370 if (tmp_value)
14371 value = tmp_value;
14373 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14374 (TREE_TYPE (value)))
14375 value = perform_implicit_conversion_flags
14376 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14377 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14379 if (value == error_mark_node)
14380 value = NULL_TREE;
14382 if (value != NULL_TREE)
14384 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14385 (TREE_TYPE (value)))
14387 error ("enumerator value for %qD must have integral or "
14388 "unscoped enumeration type", name);
14389 value = NULL_TREE;
14391 else
14393 value = cxx_constant_value (value);
14395 if (TREE_CODE (value) != INTEGER_CST)
14397 error ("enumerator value for %qD is not an integer "
14398 "constant", name);
14399 value = NULL_TREE;
14405 /* Default based on previous value. */
14406 if (value == NULL_TREE)
14408 if (TYPE_VALUES (enumtype))
14410 tree prev_value;
14411 bool overflowed;
14413 /* C++03 7.2/4: If no initializer is specified for the first
14414 enumerator, the type is an unspecified integral
14415 type. Otherwise the type is the same as the type of the
14416 initializing value of the preceding enumerator unless the
14417 incremented value is not representable in that type, in
14418 which case the type is an unspecified integral type
14419 sufficient to contain the incremented value. */
14420 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14421 if (error_operand_p (prev_value))
14422 value = error_mark_node;
14423 else
14425 tree type = TREE_TYPE (prev_value);
14426 signop sgn = TYPE_SIGN (type);
14427 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14428 &overflowed);
14429 if (!overflowed)
14431 bool pos = !wi::neg_p (wi, sgn);
14432 if (!wi::fits_to_tree_p (wi, type))
14434 unsigned int itk;
14435 for (itk = itk_int; itk != itk_none; itk++)
14437 type = integer_types[itk];
14438 if (type != NULL_TREE
14439 && (pos || !TYPE_UNSIGNED (type))
14440 && wi::fits_to_tree_p (wi, type))
14441 break;
14443 if (type && cxx_dialect < cxx11
14444 && itk > itk_unsigned_long)
14445 pedwarn (input_location, OPT_Wlong_long, pos ? "\
14446 incremented enumerator value is too large for %<unsigned long%>" : "\
14447 incremented enumerator value is too large for %<long%>");
14449 if (type == NULL_TREE)
14450 overflowed = true;
14451 else
14452 value = wide_int_to_tree (type, wi);
14455 if (overflowed)
14457 error ("overflow in enumeration values at %qD", name);
14458 value = error_mark_node;
14462 else
14463 value = integer_zero_node;
14466 /* Remove no-op casts from the value. */
14467 STRIP_TYPE_NOPS (value);
14469 /* If the underlying type of the enum is fixed, check whether
14470 the enumerator values fits in the underlying type. If it
14471 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14472 if (ENUM_UNDERLYING_TYPE (enumtype)
14473 && value
14474 && TREE_CODE (value) == INTEGER_CST)
14476 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14477 error ("enumerator value %E is outside the range of underlying "
14478 "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
14480 /* Convert the value to the appropriate type. */
14481 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14485 /* C++ associates enums with global, function, or class declarations. */
14486 context = current_scope ();
14488 /* Build the actual enumeration constant. Note that the enumeration
14489 constants have the underlying type of the enum (if it is fixed)
14490 or the type of their initializer (if the underlying type of the
14491 enum is not fixed):
14493 [ C++0x dcl.enum ]
14495 If the underlying type is fixed, the type of each enumerator
14496 prior to the closing brace is the underlying type; if the
14497 initializing value of an enumerator cannot be represented by
14498 the underlying type, the program is ill-formed. If the
14499 underlying type is not fixed, the type of each enumerator is
14500 the type of its initializing value.
14502 If the underlying type is not fixed, it will be computed by
14503 finish_enum and we will reset the type of this enumerator. Of
14504 course, if we're processing a template, there may be no value. */
14505 type = value ? TREE_TYPE (value) : NULL_TREE;
14507 decl = build_decl (loc, CONST_DECL, name, type);
14509 DECL_CONTEXT (decl) = enumtype;
14510 TREE_CONSTANT (decl) = 1;
14511 TREE_READONLY (decl) = 1;
14512 DECL_INITIAL (decl) = value;
14514 if (attributes)
14515 cplus_decl_attributes (&decl, attributes, 0);
14517 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14519 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14520 on the TYPE_FIELDS list for `S'. (That's so that you can say
14521 things like `S::i' later.) */
14523 /* The enumerator may be getting declared outside of its enclosing
14524 class, like so:
14526 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14528 For which case we need to make sure that the access of `S::i'
14529 matches the access of `S::E'. */
14530 tree saved_cas = current_access_specifier;
14531 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14532 current_access_specifier = access_private_node;
14533 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14534 current_access_specifier = access_protected_node;
14535 else
14536 current_access_specifier = access_public_node;
14538 finish_member_declaration (decl);
14540 current_access_specifier = saved_cas;
14542 else
14543 pushdecl (decl);
14545 /* Add this enumeration constant to the list for this type. */
14546 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14549 /* Look for an enumerator with the given NAME within the enumeration
14550 type ENUMTYPE. This routine is used primarily for qualified name
14551 lookup into an enumerator in C++0x, e.g.,
14553 enum class Color { Red, Green, Blue };
14555 Color color = Color::Red;
14557 Returns the value corresponding to the enumerator, or
14558 NULL_TREE if no such enumerator was found. */
14559 tree
14560 lookup_enumerator (tree enumtype, tree name)
14562 tree e;
14563 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14565 e = purpose_member (name, TYPE_VALUES (enumtype));
14566 return e? TREE_VALUE (e) : NULL_TREE;
14570 /* We're defining DECL. Make sure that its type is OK. */
14572 static void
14573 check_function_type (tree decl, tree current_function_parms)
14575 tree fntype = TREE_TYPE (decl);
14576 tree return_type = complete_type (TREE_TYPE (fntype));
14578 /* In a function definition, arg types must be complete. */
14579 require_complete_types_for_parms (current_function_parms);
14581 if (dependent_type_p (return_type)
14582 || type_uses_auto (return_type))
14583 return;
14584 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14586 tree args = TYPE_ARG_TYPES (fntype);
14588 error ("return type %q#T is incomplete", return_type);
14590 /* Make it return void instead. */
14591 if (TREE_CODE (fntype) == METHOD_TYPE)
14592 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14593 void_type_node,
14594 TREE_CHAIN (args));
14595 else
14596 fntype = build_function_type (void_type_node, args);
14597 fntype
14598 = build_exception_variant (fntype,
14599 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
14600 fntype = (cp_build_type_attribute_variant
14601 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14602 TREE_TYPE (decl) = fntype;
14604 else
14605 abstract_virtuals_error (decl, TREE_TYPE (fntype));
14608 /* True iff FN is an implicitly-defined default constructor. */
14610 static bool
14611 implicit_default_ctor_p (tree fn)
14613 return (DECL_CONSTRUCTOR_P (fn)
14614 && !user_provided_p (fn)
14615 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14618 /* Clobber the contents of *this to let the back end know that the object
14619 storage is dead when we enter the constructor or leave the destructor. */
14621 static tree
14622 build_clobber_this ()
14624 /* Clobbering an empty base is pointless, and harmful if its one byte
14625 TYPE_SIZE overlays real data. */
14626 if (is_empty_class (current_class_type))
14627 return void_node;
14629 /* If we have virtual bases, clobber the whole object, but only if we're in
14630 charge. If we don't have virtual bases, clobber the as-base type so we
14631 don't mess with tail padding. */
14632 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14634 tree ctype = current_class_type;
14635 if (!vbases)
14636 ctype = CLASSTYPE_AS_BASE (ctype);
14638 tree clobber = build_constructor (ctype, NULL);
14639 TREE_THIS_VOLATILE (clobber) = true;
14641 tree thisref = current_class_ref;
14642 if (ctype != current_class_type)
14644 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14645 thisref = convert_from_reference (thisref);
14648 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14649 if (vbases)
14650 exprstmt = build_if_in_charge (exprstmt);
14652 return exprstmt;
14655 /* Create the FUNCTION_DECL for a function definition.
14656 DECLSPECS and DECLARATOR are the parts of the declaration;
14657 they describe the function's name and the type it returns,
14658 but twisted together in a fashion that parallels the syntax of C.
14660 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14661 DECLARATOR is really the DECL for the function we are about to
14662 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14663 indicating that the function is an inline defined in-class.
14665 This function creates a binding context for the function body
14666 as well as setting up the FUNCTION_DECL in current_function_decl.
14668 For C++, we must first check whether that datum makes any sense.
14669 For example, "class A local_a(1,2);" means that variable local_a
14670 is an aggregate of type A, which should have a constructor
14671 applied to it with the argument list [1, 2].
14673 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14674 or may be a BLOCK if the function has been defined previously
14675 in this translation unit. On exit, DECL_INITIAL (decl1) will be
14676 error_mark_node if the function has never been defined, or
14677 a BLOCK if the function has been defined somewhere. */
14679 bool
14680 start_preparsed_function (tree decl1, tree attrs, int flags)
14682 tree ctype = NULL_TREE;
14683 tree fntype;
14684 tree restype;
14685 int doing_friend = 0;
14686 cp_binding_level *bl;
14687 tree current_function_parms;
14688 struct c_fileinfo *finfo
14689 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14690 bool honor_interface;
14692 /* Sanity check. */
14693 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14694 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14696 fntype = TREE_TYPE (decl1);
14697 if (TREE_CODE (fntype) == METHOD_TYPE)
14698 ctype = TYPE_METHOD_BASETYPE (fntype);
14700 /* ISO C++ 11.4/5. A friend function defined in a class is in
14701 the (lexical) scope of the class in which it is defined. */
14702 if (!ctype && DECL_FRIEND_P (decl1))
14704 ctype = DECL_FRIEND_CONTEXT (decl1);
14706 /* CTYPE could be null here if we're dealing with a template;
14707 for example, `inline friend float foo()' inside a template
14708 will have no CTYPE set. */
14709 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14710 ctype = NULL_TREE;
14711 else
14712 doing_friend = 1;
14715 if (DECL_DECLARED_INLINE_P (decl1)
14716 && lookup_attribute ("noinline", attrs))
14717 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14718 "inline function %qD given attribute noinline", decl1);
14720 /* Handle gnu_inline attribute. */
14721 if (GNU_INLINE_P (decl1))
14723 DECL_EXTERNAL (decl1) = 1;
14724 DECL_NOT_REALLY_EXTERN (decl1) = 0;
14725 DECL_INTERFACE_KNOWN (decl1) = 1;
14726 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14729 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
14730 /* This is a constructor, we must ensure that any default args
14731 introduced by this definition are propagated to the clones
14732 now. The clones are used directly in overload resolution. */
14733 adjust_clone_args (decl1);
14735 /* Sometimes we don't notice that a function is a static member, and
14736 build a METHOD_TYPE for it. Fix that up now. */
14737 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
14738 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
14740 /* Set up current_class_type, and enter the scope of the class, if
14741 appropriate. */
14742 if (ctype)
14743 push_nested_class (ctype);
14744 else if (DECL_STATIC_FUNCTION_P (decl1))
14745 push_nested_class (DECL_CONTEXT (decl1));
14747 /* Now that we have entered the scope of the class, we must restore
14748 the bindings for any template parameters surrounding DECL1, if it
14749 is an inline member template. (Order is important; consider the
14750 case where a template parameter has the same name as a field of
14751 the class.) It is not until after this point that
14752 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14753 if (flags & SF_INCLASS_INLINE)
14754 maybe_begin_member_template_processing (decl1);
14756 /* Effective C++ rule 15. */
14757 if (warn_ecpp
14758 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
14759 && VOID_TYPE_P (TREE_TYPE (fntype)))
14760 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
14762 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14763 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14764 if (!DECL_INITIAL (decl1))
14765 DECL_INITIAL (decl1) = error_mark_node;
14767 /* This function exists in static storage.
14768 (This does not mean `static' in the C sense!) */
14769 TREE_STATIC (decl1) = 1;
14771 /* We must call push_template_decl after current_class_type is set
14772 up. (If we are processing inline definitions after exiting a
14773 class scope, current_class_type will be NULL_TREE until set above
14774 by push_nested_class.) */
14775 if (processing_template_decl)
14777 tree newdecl1 = push_template_decl (decl1);
14778 if (newdecl1 == error_mark_node)
14780 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
14781 pop_nested_class ();
14782 return false;
14784 decl1 = newdecl1;
14787 /* We are now in the scope of the function being defined. */
14788 current_function_decl = decl1;
14790 /* Save the parm names or decls from this function's declarator
14791 where store_parm_decls will find them. */
14792 current_function_parms = DECL_ARGUMENTS (decl1);
14794 /* Make sure the parameter and return types are reasonable. When
14795 you declare a function, these types can be incomplete, but they
14796 must be complete when you define the function. */
14797 check_function_type (decl1, current_function_parms);
14799 /* Build the return declaration for the function. */
14800 restype = TREE_TYPE (fntype);
14802 if (DECL_RESULT (decl1) == NULL_TREE)
14804 tree resdecl;
14806 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
14807 DECL_ARTIFICIAL (resdecl) = 1;
14808 DECL_IGNORED_P (resdecl) = 1;
14809 DECL_RESULT (decl1) = resdecl;
14811 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
14814 /* Let the user know we're compiling this function. */
14815 announce_function (decl1);
14817 /* Record the decl so that the function name is defined.
14818 If we already have a decl for this name, and it is a FUNCTION_DECL,
14819 use the old decl. */
14820 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
14822 /* A specialization is not used to guide overload resolution. */
14823 if (!DECL_FUNCTION_MEMBER_P (decl1)
14824 && !(DECL_USE_TEMPLATE (decl1) &&
14825 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
14827 tree olddecl = pushdecl (decl1);
14829 if (olddecl == error_mark_node)
14830 /* If something went wrong when registering the declaration,
14831 use DECL1; we have to have a FUNCTION_DECL to use when
14832 parsing the body of the function. */
14834 else
14836 /* Otherwise, OLDDECL is either a previous declaration
14837 of the same function or DECL1 itself. */
14839 if (warn_missing_declarations
14840 && olddecl == decl1
14841 && !DECL_MAIN_P (decl1)
14842 && TREE_PUBLIC (decl1)
14843 && !DECL_DECLARED_INLINE_P (decl1))
14845 tree context;
14847 /* Check whether DECL1 is in an anonymous
14848 namespace. */
14849 for (context = DECL_CONTEXT (decl1);
14850 context;
14851 context = DECL_CONTEXT (context))
14853 if (TREE_CODE (context) == NAMESPACE_DECL
14854 && DECL_NAME (context) == NULL_TREE)
14855 break;
14858 if (context == NULL)
14859 warning_at (DECL_SOURCE_LOCATION (decl1),
14860 OPT_Wmissing_declarations,
14861 "no previous declaration for %qD", decl1);
14864 decl1 = olddecl;
14867 else
14869 /* We need to set the DECL_CONTEXT. */
14870 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
14871 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
14873 fntype = TREE_TYPE (decl1);
14874 restype = TREE_TYPE (fntype);
14876 /* If #pragma weak applies, mark the decl appropriately now.
14877 The pragma only applies to global functions. Because
14878 determining whether or not the #pragma applies involves
14879 computing the mangled name for the declaration, we cannot
14880 apply the pragma until after we have merged this declaration
14881 with any previous declarations; if the original declaration
14882 has a linkage specification, that specification applies to
14883 the definition as well, and may affect the mangled name. */
14884 if (DECL_FILE_SCOPE_P (decl1))
14885 maybe_apply_pragma_weak (decl1);
14888 /* Reset this in case the call to pushdecl changed it. */
14889 current_function_decl = decl1;
14891 gcc_assert (DECL_INITIAL (decl1));
14893 /* This function may already have been parsed, in which case just
14894 return; our caller will skip over the body without parsing. */
14895 if (DECL_INITIAL (decl1) != error_mark_node)
14896 return true;
14898 /* Initialize RTL machinery. We cannot do this until
14899 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
14900 even when processing a template; this is how we get
14901 CFUN set up, and our per-function variables initialized.
14902 FIXME factor out the non-RTL stuff. */
14903 bl = current_binding_level;
14904 allocate_struct_function (decl1, processing_template_decl);
14906 /* Initialize the language data structures. Whenever we start
14907 a new function, we destroy temporaries in the usual way. */
14908 cfun->language = ggc_cleared_alloc<language_function> ();
14909 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
14910 current_binding_level = bl;
14912 if (!processing_template_decl && type_uses_auto (restype))
14914 FNDECL_USED_AUTO (decl1) = true;
14915 current_function_auto_return_pattern = restype;
14918 /* Start the statement-tree, start the tree now. */
14919 DECL_SAVED_TREE (decl1) = push_stmt_list ();
14921 /* If we are (erroneously) defining a function that we have already
14922 defined before, wipe out what we knew before. */
14923 if (!DECL_PENDING_INLINE_P (decl1))
14924 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
14926 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
14928 /* We know that this was set up by `grokclassfn'. We do not
14929 wait until `store_parm_decls', since evil parse errors may
14930 never get us to that point. Here we keep the consistency
14931 between `current_class_type' and `current_class_ptr'. */
14932 tree t = DECL_ARGUMENTS (decl1);
14934 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
14935 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
14937 cp_function_chain->x_current_class_ref
14938 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
14939 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
14940 cp_function_chain->x_current_class_ptr = t;
14942 /* Constructors and destructors need to know whether they're "in
14943 charge" of initializing virtual base classes. */
14944 t = DECL_CHAIN (t);
14945 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
14947 current_in_charge_parm = t;
14948 t = DECL_CHAIN (t);
14950 if (DECL_HAS_VTT_PARM_P (decl1))
14952 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
14953 current_vtt_parm = t;
14957 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
14958 /* Implicitly-defined methods (like the
14959 destructor for a class in which no destructor
14960 is explicitly declared) must not be defined
14961 until their definition is needed. So, we
14962 ignore interface specifications for
14963 compiler-generated functions. */
14964 && !DECL_ARTIFICIAL (decl1));
14966 if (processing_template_decl)
14967 /* Don't mess with interface flags. */;
14968 else if (DECL_INTERFACE_KNOWN (decl1))
14970 tree ctx = decl_function_context (decl1);
14972 if (DECL_NOT_REALLY_EXTERN (decl1))
14973 DECL_EXTERNAL (decl1) = 0;
14975 if (ctx != NULL_TREE && vague_linkage_p (ctx))
14976 /* This is a function in a local class in an extern inline
14977 or template function. */
14978 comdat_linkage (decl1);
14980 /* If this function belongs to an interface, it is public.
14981 If it belongs to someone else's interface, it is also external.
14982 This only affects inlines and template instantiations. */
14983 else if (!finfo->interface_unknown && honor_interface)
14985 if (DECL_DECLARED_INLINE_P (decl1)
14986 || DECL_TEMPLATE_INSTANTIATION (decl1))
14988 DECL_EXTERNAL (decl1)
14989 = (finfo->interface_only
14990 || (DECL_DECLARED_INLINE_P (decl1)
14991 && ! flag_implement_inlines
14992 && !DECL_VINDEX (decl1)));
14994 /* For WIN32 we also want to put these in linkonce sections. */
14995 maybe_make_one_only (decl1);
14997 else
14998 DECL_EXTERNAL (decl1) = 0;
14999 DECL_INTERFACE_KNOWN (decl1) = 1;
15000 /* If this function is in an interface implemented in this file,
15001 make sure that the back end knows to emit this function
15002 here. */
15003 if (!DECL_EXTERNAL (decl1))
15004 mark_needed (decl1);
15006 else if (finfo->interface_unknown && finfo->interface_only
15007 && honor_interface)
15009 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15010 interface, we will have both finfo->interface_unknown and
15011 finfo->interface_only set. In that case, we don't want to
15012 use the normal heuristics because someone will supply a
15013 #pragma implementation elsewhere, and deducing it here would
15014 produce a conflict. */
15015 comdat_linkage (decl1);
15016 DECL_EXTERNAL (decl1) = 0;
15017 DECL_INTERFACE_KNOWN (decl1) = 1;
15018 DECL_DEFER_OUTPUT (decl1) = 1;
15020 else
15022 /* This is a definition, not a reference.
15023 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15024 if (!GNU_INLINE_P (decl1))
15025 DECL_EXTERNAL (decl1) = 0;
15027 if ((DECL_DECLARED_INLINE_P (decl1)
15028 || DECL_TEMPLATE_INSTANTIATION (decl1))
15029 && ! DECL_INTERFACE_KNOWN (decl1))
15030 DECL_DEFER_OUTPUT (decl1) = 1;
15031 else
15032 DECL_INTERFACE_KNOWN (decl1) = 1;
15035 /* Determine the ELF visibility attribute for the function. We must not
15036 do this before calling "pushdecl", as we must allow "duplicate_decls"
15037 to merge any attributes appropriately. We also need to wait until
15038 linkage is set. */
15039 if (!DECL_CLONED_FUNCTION_P (decl1))
15040 determine_visibility (decl1);
15042 if (!processing_template_decl)
15043 maybe_instantiate_noexcept (decl1);
15045 begin_scope (sk_function_parms, decl1);
15047 ++function_depth;
15049 if (DECL_DESTRUCTOR_P (decl1)
15050 || (DECL_CONSTRUCTOR_P (decl1)
15051 && targetm.cxx.cdtor_returns_this ()))
15052 cdtor_label = create_artificial_label (input_location);
15054 start_fname_decls ();
15056 store_parm_decls (current_function_parms);
15058 if (!processing_template_decl
15059 && (flag_lifetime_dse > 1)
15060 && DECL_CONSTRUCTOR_P (decl1)
15061 && !DECL_CLONED_FUNCTION_P (decl1)
15062 /* Clobbering an empty base is harmful if it overlays real data. */
15063 && !is_empty_class (current_class_type)
15064 /* We can't clobber safely for an implicitly-defined default constructor
15065 because part of the initialization might happen before we enter the
15066 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15067 && !implicit_default_ctor_p (decl1))
15068 finish_expr_stmt (build_clobber_this ());
15070 if (!processing_template_decl
15071 && DECL_CONSTRUCTOR_P (decl1)
15072 && (flag_sanitize & SANITIZE_VPTR)
15073 && !DECL_CLONED_FUNCTION_P (decl1)
15074 && !implicit_default_ctor_p (decl1))
15075 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15077 return true;
15081 /* Like start_preparsed_function, except that instead of a
15082 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15084 Returns true on success. If the DECLARATOR is not suitable
15085 for a function, we return false, which tells the parser to
15086 skip the entire function. */
15088 bool
15089 start_function (cp_decl_specifier_seq *declspecs,
15090 const cp_declarator *declarator,
15091 tree attrs)
15093 tree decl1;
15095 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15096 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15097 if (decl1 == error_mark_node)
15098 return false;
15099 /* If the declarator is not suitable for a function definition,
15100 cause a syntax error. */
15101 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15103 error ("invalid function declaration");
15104 return false;
15107 if (DECL_MAIN_P (decl1))
15108 /* main must return int. grokfndecl should have corrected it
15109 (and issued a diagnostic) if the user got it wrong. */
15110 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15111 integer_type_node));
15113 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15116 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15117 FN. */
15119 static bool
15120 use_eh_spec_block (tree fn)
15122 return (flag_exceptions && flag_enforce_eh_specs
15123 && !processing_template_decl
15124 && !type_throw_all_p (TREE_TYPE (fn))
15125 /* We insert the EH_SPEC_BLOCK only in the original
15126 function; then, it is copied automatically to the
15127 clones. */
15128 && !DECL_CLONED_FUNCTION_P (fn)
15129 /* Implicitly-generated constructors and destructors have
15130 exception specifications. However, those specifications
15131 are the union of the possible exceptions specified by the
15132 constructors/destructors for bases and members, so no
15133 unallowed exception will ever reach this function. By
15134 not creating the EH_SPEC_BLOCK we save a little memory,
15135 and we avoid spurious warnings about unreachable
15136 code. */
15137 && !DECL_DEFAULTED_FN (fn));
15140 /* Store the parameter declarations into the current function declaration.
15141 This is called after parsing the parameter declarations, before
15142 digesting the body of the function.
15144 Also install to binding contour return value identifier, if any. */
15146 static void
15147 store_parm_decls (tree current_function_parms)
15149 tree fndecl = current_function_decl;
15150 tree parm;
15152 /* This is a chain of any other decls that came in among the parm
15153 declarations. If a parm is declared with enum {foo, bar} x;
15154 then CONST_DECLs for foo and bar are put here. */
15155 tree nonparms = NULL_TREE;
15157 if (current_function_parms)
15159 /* This case is when the function was defined with an ANSI prototype.
15160 The parms already have decls, so we need not do anything here
15161 except record them as in effect
15162 and complain if any redundant old-style parm decls were written. */
15164 tree specparms = current_function_parms;
15165 tree next;
15167 /* Must clear this because it might contain TYPE_DECLs declared
15168 at class level. */
15169 current_binding_level->names = NULL;
15171 /* If we're doing semantic analysis, then we'll call pushdecl
15172 for each of these. We must do them in reverse order so that
15173 they end in the correct forward order. */
15174 specparms = nreverse (specparms);
15176 for (parm = specparms; parm; parm = next)
15178 next = DECL_CHAIN (parm);
15179 if (TREE_CODE (parm) == PARM_DECL)
15180 pushdecl (parm);
15181 else
15183 /* If we find an enum constant or a type tag,
15184 put it aside for the moment. */
15185 TREE_CHAIN (parm) = NULL_TREE;
15186 nonparms = chainon (nonparms, parm);
15190 /* Get the decls in their original chain order and record in the
15191 function. This is all and only the PARM_DECLs that were
15192 pushed into scope by the loop above. */
15193 DECL_ARGUMENTS (fndecl) = getdecls ();
15195 else
15196 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15198 /* Now store the final chain of decls for the arguments
15199 as the decl-chain of the current lexical scope.
15200 Put the enumerators in as well, at the front so that
15201 DECL_ARGUMENTS is not modified. */
15202 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15204 if (use_eh_spec_block (current_function_decl))
15205 current_eh_spec_block = begin_eh_spec_block ();
15209 /* We have finished doing semantic analysis on DECL, but have not yet
15210 generated RTL for its body. Save away our current state, so that
15211 when we want to generate RTL later we know what to do. */
15213 static void
15214 save_function_data (tree decl)
15216 struct language_function *f;
15218 /* Save the language-specific per-function data so that we can
15219 get it back when we really expand this function. */
15220 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15222 /* Make a copy. */
15223 f = ggc_alloc<language_function> ();
15224 memcpy (f, cp_function_chain, sizeof (struct language_function));
15225 DECL_SAVED_FUNCTION_DATA (decl) = f;
15227 /* Clear out the bits we don't need. */
15228 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15229 f->bindings = NULL;
15230 f->x_local_names = NULL;
15231 f->base.local_typedefs = NULL;
15235 /* Set the return value of the constructor (if present). */
15237 static void
15238 finish_constructor_body (void)
15240 tree val;
15241 tree exprstmt;
15243 if (targetm.cxx.cdtor_returns_this ())
15245 /* Any return from a constructor will end up here. */
15246 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15248 val = DECL_ARGUMENTS (current_function_decl);
15249 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15250 DECL_RESULT (current_function_decl), val);
15251 /* Return the address of the object. */
15252 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15253 add_stmt (exprstmt);
15257 /* Do all the processing for the beginning of a destructor; set up the
15258 vtable pointers and cleanups for bases and members. */
15260 static void
15261 begin_destructor_body (void)
15263 tree compound_stmt;
15265 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15266 issued an error message. We still want to try to process the
15267 body of the function, but initialize_vtbl_ptrs will crash if
15268 TYPE_BINFO is NULL. */
15269 if (COMPLETE_TYPE_P (current_class_type))
15271 compound_stmt = begin_compound_stmt (0);
15272 /* Make all virtual function table pointers in non-virtual base
15273 classes point to CURRENT_CLASS_TYPE's virtual function
15274 tables. */
15275 initialize_vtbl_ptrs (current_class_ptr);
15276 finish_compound_stmt (compound_stmt);
15278 if (flag_lifetime_dse
15279 /* Clobbering an empty base is harmful if it overlays real data. */
15280 && !is_empty_class (current_class_type))
15281 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15283 /* And insert cleanups for our bases and members so that they
15284 will be properly destroyed if we throw. */
15285 push_base_cleanups ();
15289 /* At the end of every destructor we generate code to delete the object if
15290 necessary. Do that now. */
15292 static void
15293 finish_destructor_body (void)
15295 tree exprstmt;
15297 /* Any return from a destructor will end up here; that way all base
15298 and member cleanups will be run when the function returns. */
15299 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15301 if (targetm.cxx.cdtor_returns_this ())
15303 tree val;
15305 val = DECL_ARGUMENTS (current_function_decl);
15306 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15307 DECL_RESULT (current_function_decl), val);
15308 /* Return the address of the object. */
15309 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15310 add_stmt (exprstmt);
15314 /* Do the necessary processing for the beginning of a function body, which
15315 in this case includes member-initializers, but not the catch clauses of
15316 a function-try-block. Currently, this means opening a binding level
15317 for the member-initializers (in a ctor), member cleanups (in a dtor),
15318 and capture proxies (in a lambda operator()). */
15320 tree
15321 begin_function_body (void)
15323 tree stmt;
15325 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15326 return NULL_TREE;
15328 if (processing_template_decl)
15329 /* Do nothing now. */;
15330 else
15331 /* Always keep the BLOCK node associated with the outermost pair of
15332 curly braces of a function. These are needed for correct
15333 operation of dwarfout.c. */
15334 keep_next_level (true);
15336 stmt = begin_compound_stmt (BCS_FN_BODY);
15338 if (processing_template_decl)
15339 /* Do nothing now. */;
15340 else if (DECL_DESTRUCTOR_P (current_function_decl))
15341 begin_destructor_body ();
15343 return stmt;
15346 /* Do the processing for the end of a function body. Currently, this means
15347 closing out the cleanups for fully-constructed bases and members, and in
15348 the case of the destructor, deleting the object if desired. Again, this
15349 is only meaningful for [cd]tors, since they are the only functions where
15350 there is a significant distinction between the main body and any
15351 function catch clauses. Handling, say, main() return semantics here
15352 would be wrong, as flowing off the end of a function catch clause for
15353 main() would also need to return 0. */
15355 void
15356 finish_function_body (tree compstmt)
15358 if (compstmt == NULL_TREE)
15359 return;
15361 /* Close the block. */
15362 finish_compound_stmt (compstmt);
15364 if (processing_template_decl)
15365 /* Do nothing now. */;
15366 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15367 finish_constructor_body ();
15368 else if (DECL_DESTRUCTOR_P (current_function_decl))
15369 finish_destructor_body ();
15372 /* Given a function, returns the BLOCK corresponding to the outermost level
15373 of curly braces, skipping the artificial block created for constructor
15374 initializers. */
15376 tree
15377 outer_curly_brace_block (tree fndecl)
15379 tree block = DECL_INITIAL (fndecl);
15380 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15381 return block;
15382 block = BLOCK_SUBBLOCKS (block);
15383 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15384 return block;
15385 block = BLOCK_SUBBLOCKS (block);
15386 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15387 return block;
15390 /* If FNDECL is a class's key method, add the class to the list of
15391 keyed classes that should be emitted. */
15393 static void
15394 record_key_method_defined (tree fndecl)
15396 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15397 && DECL_VIRTUAL_P (fndecl)
15398 && !processing_template_decl)
15400 tree fnclass = DECL_CONTEXT (fndecl);
15401 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15402 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
15406 /* Subroutine of finish_function.
15407 Save the body of constexpr functions for possible
15408 future compile time evaluation. */
15410 static void
15411 maybe_save_function_definition (tree fun)
15413 if (!processing_template_decl
15414 && DECL_DECLARED_CONSTEXPR_P (fun)
15415 && !cp_function_chain->invalid_constexpr
15416 && !DECL_CLONED_FUNCTION_P (fun))
15417 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15420 /* Finish up a function declaration and compile that function
15421 all the way to assembler language output. The free the storage
15422 for the function definition.
15424 FLAGS is a bitwise or of the following values:
15425 2 - INCLASS_INLINE
15426 We just finished processing the body of an in-class inline
15427 function definition. (This processing will have taken place
15428 after the class definition is complete.) */
15430 tree
15431 finish_function (int flags)
15433 tree fndecl = current_function_decl;
15434 tree fntype, ctype = NULL_TREE;
15435 int inclass_inline = (flags & 2) != 0;
15437 /* When we get some parse errors, we can end up without a
15438 current_function_decl, so cope. */
15439 if (fndecl == NULL_TREE)
15440 return error_mark_node;
15442 if (c_dialect_objc ())
15443 objc_finish_function ();
15445 record_key_method_defined (fndecl);
15447 fntype = TREE_TYPE (fndecl);
15449 /* TREE_READONLY (fndecl) = 1;
15450 This caused &foo to be of type ptr-to-const-function
15451 which then got a warning when stored in a ptr-to-function variable. */
15453 gcc_assert (building_stmt_list_p ());
15454 /* The current function is being defined, so its DECL_INITIAL should
15455 be set, and unless there's a multiple definition, it should be
15456 error_mark_node. */
15457 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15459 /* For a cloned function, we've already got all the code we need;
15460 there's no need to add any extra bits. */
15461 if (!DECL_CLONED_FUNCTION_P (fndecl))
15463 /* Make it so that `main' always returns 0 by default. */
15464 if (DECL_MAIN_P (current_function_decl))
15465 finish_return_stmt (integer_zero_node);
15467 if (use_eh_spec_block (current_function_decl))
15468 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15469 (TREE_TYPE (current_function_decl)),
15470 current_eh_spec_block);
15473 /* If we're saving up tree structure, tie off the function now. */
15474 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15476 if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
15477 cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
15479 finish_fname_decls ();
15481 /* If this function can't throw any exceptions, remember that. */
15482 if (!processing_template_decl
15483 && !cp_function_chain->can_throw
15484 && !flag_non_call_exceptions
15485 && !decl_replaceable_p (fndecl))
15486 TREE_NOTHROW (fndecl) = 1;
15488 /* This must come after expand_function_end because cleanups might
15489 have declarations (from inline functions) that need to go into
15490 this function's blocks. */
15492 /* If the current binding level isn't the outermost binding level
15493 for this function, either there is a bug, or we have experienced
15494 syntax errors and the statement tree is malformed. */
15495 if (current_binding_level->kind != sk_function_parms)
15497 /* Make sure we have already experienced errors. */
15498 gcc_assert (errorcount);
15500 /* Throw away the broken statement tree and extra binding
15501 levels. */
15502 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15504 while (current_binding_level->kind != sk_function_parms)
15506 if (current_binding_level->kind == sk_class)
15507 pop_nested_class ();
15508 else
15509 poplevel (0, 0, 0);
15512 poplevel (1, 0, 1);
15514 /* Statements should always be full-expressions at the outermost set
15515 of curly braces for a function. */
15516 gcc_assert (stmts_are_full_exprs_p ());
15518 /* If there are no return statements in a function with auto return type,
15519 the return type is void. But if the declared type is something like
15520 auto*, this is an error. */
15521 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15522 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15524 if (!is_auto (current_function_auto_return_pattern)
15525 && !current_function_returns_value && !current_function_returns_null)
15527 error ("no return statements in function returning %qT",
15528 current_function_auto_return_pattern);
15529 inform (input_location, "only plain %<auto%> return type can be "
15530 "deduced to %<void%>");
15532 apply_deduced_return_type (fndecl, void_type_node);
15533 fntype = TREE_TYPE (fndecl);
15536 // If this is a concept, check that the definition is reasonable.
15537 if (DECL_DECLARED_CONCEPT_P (fndecl))
15538 check_function_concept (fndecl);
15540 /* Lambda closure members are implicitly constexpr if possible. */
15541 if (cxx_dialect >= cxx1z
15542 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl))
15543 && (processing_template_decl
15544 || is_valid_constexpr_fn (fndecl, /*complain*/false))
15545 && potential_constant_expression (DECL_SAVED_TREE (fndecl)))
15546 DECL_DECLARED_CONSTEXPR_P (fndecl) = true;
15548 /* Save constexpr function body before it gets munged by
15549 the NRV transformation. */
15550 maybe_save_function_definition (fndecl);
15552 /* Invoke the pre-genericize plugin before we start munging things. */
15553 if (!processing_template_decl)
15554 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15556 /* Perform delayed folding before NRV transformation. */
15557 if (!processing_template_decl)
15558 cp_fold_function (fndecl);
15560 /* Set up the named return value optimization, if we can. Candidate
15561 variables are selected in check_return_expr. */
15562 if (current_function_return_value)
15564 tree r = current_function_return_value;
15565 tree outer;
15567 if (r != error_mark_node
15568 /* This is only worth doing for fns that return in memory--and
15569 simpler, since we don't have to worry about promoted modes. */
15570 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15571 /* Only allow this for variables declared in the outer scope of
15572 the function so we know that their lifetime always ends with a
15573 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15574 we were to do this optimization in tree-ssa. */
15575 && (outer = outer_curly_brace_block (fndecl))
15576 && chain_member (r, BLOCK_VARS (outer)))
15577 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15579 current_function_return_value = NULL_TREE;
15582 /* Remember that we were in class scope. */
15583 if (current_class_name)
15584 ctype = current_class_type;
15586 /* Must mark the RESULT_DECL as being in this function. */
15587 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15589 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15590 to the FUNCTION_DECL node itself. */
15591 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15593 /* Save away current state, if appropriate. */
15594 if (!processing_template_decl)
15595 save_function_data (fndecl);
15597 /* Complain if there's just no return statement. */
15598 if (warn_return_type
15599 && !VOID_TYPE_P (TREE_TYPE (fntype))
15600 && !dependent_type_p (TREE_TYPE (fntype))
15601 && !current_function_returns_value && !current_function_returns_null
15602 /* Don't complain if we abort or throw. */
15603 && !current_function_returns_abnormally
15604 /* Don't complain if there's an infinite loop. */
15605 && !current_function_infinite_loop
15606 /* Don't complain if we are declared noreturn. */
15607 && !TREE_THIS_VOLATILE (fndecl)
15608 && !DECL_NAME (DECL_RESULT (fndecl))
15609 && !TREE_NO_WARNING (fndecl)
15610 /* Structor return values (if any) are set by the compiler. */
15611 && !DECL_CONSTRUCTOR_P (fndecl)
15612 && !DECL_DESTRUCTOR_P (fndecl)
15613 && targetm.warn_func_return (fndecl))
15615 warning (OPT_Wreturn_type,
15616 "no return statement in function returning non-void");
15617 TREE_NO_WARNING (fndecl) = 1;
15620 /* Store the end of the function, so that we get good line number
15621 info for the epilogue. */
15622 cfun->function_end_locus = input_location;
15624 /* Complain about parameters that are only set, but never otherwise used. */
15625 if (warn_unused_but_set_parameter
15626 && !processing_template_decl
15627 && errorcount == unused_but_set_errorcount
15628 && !DECL_CLONED_FUNCTION_P (fndecl))
15630 tree decl;
15632 for (decl = DECL_ARGUMENTS (fndecl);
15633 decl;
15634 decl = DECL_CHAIN (decl))
15635 if (TREE_USED (decl)
15636 && TREE_CODE (decl) == PARM_DECL
15637 && !DECL_READ_P (decl)
15638 && DECL_NAME (decl)
15639 && !DECL_ARTIFICIAL (decl)
15640 && !TREE_NO_WARNING (decl)
15641 && !DECL_IN_SYSTEM_HEADER (decl)
15642 && TREE_TYPE (decl) != error_mark_node
15643 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
15644 && (!CLASS_TYPE_P (TREE_TYPE (decl))
15645 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15646 warning_at (DECL_SOURCE_LOCATION (decl),
15647 OPT_Wunused_but_set_parameter,
15648 "parameter %qD set but not used", decl);
15649 unused_but_set_errorcount = errorcount;
15652 /* Complain about locally defined typedefs that are not used in this
15653 function. */
15654 maybe_warn_unused_local_typedefs ();
15656 /* Possibly warn about unused parameters. */
15657 if (warn_unused_parameter
15658 && !processing_template_decl
15659 && !DECL_CLONED_FUNCTION_P (fndecl))
15660 do_warn_unused_parameter (fndecl);
15662 /* Genericize before inlining. */
15663 if (!processing_template_decl)
15665 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15666 cp_genericize (fndecl);
15667 /* Clear out the bits we don't need. */
15668 f->x_current_class_ptr = NULL;
15669 f->x_current_class_ref = NULL;
15670 f->x_eh_spec_block = NULL;
15671 f->x_in_charge_parm = NULL;
15672 f->x_vtt_parm = NULL;
15673 f->x_return_value = NULL;
15674 f->bindings = NULL;
15675 f->extern_decl_map = NULL;
15676 f->infinite_loops = NULL;
15678 /* Clear out the bits we don't need. */
15679 local_names = NULL;
15681 /* We're leaving the context of this function, so zap cfun. It's still in
15682 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
15683 set_cfun (NULL);
15684 current_function_decl = NULL;
15686 /* If this is an in-class inline definition, we may have to pop the
15687 bindings for the template parameters that we added in
15688 maybe_begin_member_template_processing when start_function was
15689 called. */
15690 if (inclass_inline)
15691 maybe_end_member_template_processing ();
15693 /* Leave the scope of the class. */
15694 if (ctype)
15695 pop_nested_class ();
15697 --function_depth;
15699 /* Clean up. */
15700 current_function_decl = NULL_TREE;
15702 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
15703 return fndecl;
15706 /* Create the FUNCTION_DECL for a function definition.
15707 DECLSPECS and DECLARATOR are the parts of the declaration;
15708 they describe the return type and the name of the function,
15709 but twisted together in a fashion that parallels the syntax of C.
15711 This function creates a binding context for the function body
15712 as well as setting up the FUNCTION_DECL in current_function_decl.
15714 Returns a FUNCTION_DECL on success.
15716 If the DECLARATOR is not suitable for a function (it defines a datum
15717 instead), we return 0, which tells yyparse to report a parse error.
15719 May return void_type_node indicating that this method is actually
15720 a friend. See grokfield for more details.
15722 Came here with a `.pushlevel' .
15724 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15725 CHANGES TO CODE IN `grokfield'. */
15727 tree
15728 grokmethod (cp_decl_specifier_seq *declspecs,
15729 const cp_declarator *declarator, tree attrlist)
15731 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
15732 &attrlist);
15734 if (fndecl == error_mark_node)
15735 return error_mark_node;
15737 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
15739 error ("invalid member function declaration");
15740 return error_mark_node;
15743 if (attrlist)
15744 cplus_decl_attributes (&fndecl, attrlist, 0);
15746 /* Pass friends other than inline friend functions back. */
15747 if (fndecl == void_type_node)
15748 return fndecl;
15750 if (DECL_IN_AGGR_P (fndecl))
15752 if (DECL_CLASS_SCOPE_P (fndecl))
15753 error ("%qD is already defined in class %qT", fndecl,
15754 DECL_CONTEXT (fndecl));
15755 return error_mark_node;
15758 check_template_shadow (fndecl);
15760 if (TREE_PUBLIC (fndecl))
15761 DECL_COMDAT (fndecl) = 1;
15762 DECL_DECLARED_INLINE_P (fndecl) = 1;
15763 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
15765 /* We process method specializations in finish_struct_1. */
15766 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
15768 fndecl = push_template_decl (fndecl);
15769 if (fndecl == error_mark_node)
15770 return fndecl;
15773 if (! DECL_FRIEND_P (fndecl))
15775 if (DECL_CHAIN (fndecl))
15777 fndecl = copy_node (fndecl);
15778 TREE_CHAIN (fndecl) = NULL_TREE;
15782 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
15784 DECL_IN_AGGR_P (fndecl) = 1;
15785 return fndecl;
15789 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
15790 we can lay it out later, when and if its type becomes complete.
15792 Also handle constexpr variables where the initializer involves
15793 an unlowered PTRMEM_CST because the class isn't complete yet. */
15795 void
15796 maybe_register_incomplete_var (tree var)
15798 gcc_assert (VAR_P (var));
15800 /* Keep track of variables with incomplete types. */
15801 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
15802 && DECL_EXTERNAL (var))
15804 tree inner_type = TREE_TYPE (var);
15806 while (TREE_CODE (inner_type) == ARRAY_TYPE)
15807 inner_type = TREE_TYPE (inner_type);
15808 inner_type = TYPE_MAIN_VARIANT (inner_type);
15810 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
15811 /* RTTI TD entries are created while defining the type_info. */
15812 || (TYPE_LANG_SPECIFIC (inner_type)
15813 && TYPE_BEING_DEFINED (inner_type)))
15815 incomplete_var iv = {var, inner_type};
15816 vec_safe_push (incomplete_vars, iv);
15818 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
15819 && decl_constant_var_p (var)
15820 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
15822 /* When the outermost open class is complete we can resolve any
15823 pointers-to-members. */
15824 tree context = outermost_open_class ();
15825 incomplete_var iv = {var, context};
15826 vec_safe_push (incomplete_vars, iv);
15831 /* Called when a class type (given by TYPE) is defined. If there are
15832 any existing VAR_DECLs whose type has been completed by this
15833 declaration, update them now. */
15835 void
15836 complete_vars (tree type)
15838 unsigned ix;
15839 incomplete_var *iv;
15841 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
15843 if (same_type_p (type, iv->incomplete_type))
15845 tree var = iv->decl;
15846 tree type = TREE_TYPE (var);
15848 if (type != error_mark_node
15849 && (TYPE_MAIN_VARIANT (strip_array_types (type))
15850 == iv->incomplete_type))
15852 /* Complete the type of the variable. The VAR_DECL itself
15853 will be laid out in expand_expr. */
15854 complete_type (type);
15855 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
15858 /* Remove this entry from the list. */
15859 incomplete_vars->unordered_remove (ix);
15861 else
15862 ix++;
15865 /* Check for pending declarations which may have abstract type. */
15866 complete_type_check_abstract (type);
15869 /* If DECL is of a type which needs a cleanup, build and return an
15870 expression to perform that cleanup here. Return NULL_TREE if no
15871 cleanup need be done. DECL can also be a _REF when called from
15872 split_nonconstant_init_1. */
15874 tree
15875 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
15877 tree type;
15878 tree attr;
15879 tree cleanup;
15881 /* Assume no cleanup is required. */
15882 cleanup = NULL_TREE;
15884 if (error_operand_p (decl))
15885 return cleanup;
15887 /* Handle "__attribute__((cleanup))". We run the cleanup function
15888 before the destructor since the destructor is what actually
15889 terminates the lifetime of the object. */
15890 if (DECL_P (decl))
15891 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
15892 else
15893 attr = NULL_TREE;
15894 if (attr)
15896 tree id;
15897 tree fn;
15898 tree arg;
15900 /* Get the name specified by the user for the cleanup function. */
15901 id = TREE_VALUE (TREE_VALUE (attr));
15902 /* Look up the name to find the cleanup function to call. It is
15903 important to use lookup_name here because that is what is
15904 used in c-common.c:handle_cleanup_attribute when performing
15905 initial checks on the attribute. Note that those checks
15906 include ensuring that the function found is not an overloaded
15907 function, or an object with an overloaded call operator,
15908 etc.; we can rely on the fact that the function found is an
15909 ordinary FUNCTION_DECL. */
15910 fn = lookup_name (id);
15911 arg = build_address (decl);
15912 if (!mark_used (decl, complain) && !(complain & tf_error))
15913 return error_mark_node;
15914 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
15915 if (cleanup == error_mark_node)
15916 return error_mark_node;
15918 /* Handle ordinary C++ destructors. */
15919 type = TREE_TYPE (decl);
15920 if (type_build_dtor_call (type))
15922 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
15923 tree addr;
15924 tree call;
15926 if (TREE_CODE (type) == ARRAY_TYPE)
15927 addr = decl;
15928 else
15929 addr = build_address (decl);
15931 call = build_delete (TREE_TYPE (addr), addr,
15932 sfk_complete_destructor, flags, 0, complain);
15933 if (call == error_mark_node)
15934 cleanup = error_mark_node;
15935 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
15936 /* Discard the call. */;
15937 else if (cleanup)
15938 cleanup = cp_build_compound_expr (cleanup, call, complain);
15939 else
15940 cleanup = call;
15943 /* build_delete sets the location of the destructor call to the
15944 current location, even though the destructor is going to be
15945 called later, at the end of the current scope. This can lead to
15946 a "jumpy" behavior for users of debuggers when they step around
15947 the end of the block. So let's unset the location of the
15948 destructor call instead. */
15949 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
15951 if (cleanup
15952 && DECL_P (decl)
15953 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
15954 /* Treat objects with destructors as used; the destructor may do
15955 something substantive. */
15956 && !mark_used (decl, complain) && !(complain & tf_error))
15957 return error_mark_node;
15959 return cleanup;
15963 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
15964 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
15965 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
15967 tree
15968 static_fn_type (tree memfntype)
15970 tree fntype;
15971 tree args;
15973 if (TYPE_PTRMEMFUNC_P (memfntype))
15974 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
15975 if (POINTER_TYPE_P (memfntype)
15976 || TREE_CODE (memfntype) == FUNCTION_DECL)
15977 memfntype = TREE_TYPE (memfntype);
15978 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
15979 return memfntype;
15980 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
15981 args = TYPE_ARG_TYPES (memfntype);
15982 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
15983 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
15984 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
15985 fntype = (cp_build_type_attribute_variant
15986 (fntype, TYPE_ATTRIBUTES (memfntype)));
15987 fntype = (build_exception_variant
15988 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
15989 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
15990 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
15991 return fntype;
15994 /* DECL was originally constructed as a non-static member function,
15995 but turned out to be static. Update it accordingly. */
15997 void
15998 revert_static_member_fn (tree decl)
16000 tree stype = static_fn_type (decl);
16001 cp_cv_quals quals = type_memfn_quals (stype);
16002 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16004 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16005 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16007 TREE_TYPE (decl) = stype;
16009 if (DECL_ARGUMENTS (decl))
16010 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16011 DECL_STATIC_FUNCTION_P (decl) = 1;
16014 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16015 one of the language-independent trees. */
16017 enum cp_tree_node_structure_enum
16018 cp_tree_node_structure (union lang_tree_node * t)
16020 switch (TREE_CODE (&t->generic))
16022 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16023 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16024 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16025 case OVERLOAD: return TS_CP_OVERLOAD;
16026 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16027 case PTRMEM_CST: return TS_CP_PTRMEM;
16028 case BASELINK: return TS_CP_BASELINK;
16029 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16030 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16031 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16032 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16033 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16034 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16035 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16036 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16037 default: return TS_CP_GENERIC;
16041 /* Build the void_list_node (void_type_node having been created). */
16042 tree
16043 build_void_list_node (void)
16045 tree t = build_tree_list (NULL_TREE, void_type_node);
16046 return t;
16049 bool
16050 cp_missing_noreturn_ok_p (tree decl)
16052 /* A missing noreturn is ok for the `main' function. */
16053 return DECL_MAIN_P (decl);
16056 /* Return the decl used to identify the COMDAT group into which DECL should
16057 be placed. */
16059 tree
16060 cxx_comdat_group (tree decl)
16062 /* Virtual tables, construction virtual tables, and virtual table
16063 tables all go in a single COMDAT group, named after the primary
16064 virtual table. */
16065 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16066 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16067 /* For all other DECLs, the COMDAT group is the mangled name of the
16068 declaration itself. */
16069 else
16071 while (DECL_THUNK_P (decl))
16073 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16074 into the same section as the target function. In that case
16075 we must return target's name. */
16076 tree target = THUNK_TARGET (decl);
16077 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16078 && DECL_SECTION_NAME (target) != NULL
16079 && DECL_ONE_ONLY (target))
16080 decl = target;
16081 else
16082 break;
16086 return decl;
16089 /* Returns the return type for FN as written by the user, which may include
16090 a placeholder for a deduced return type. */
16092 tree
16093 fndecl_declared_return_type (tree fn)
16095 fn = STRIP_TEMPLATE (fn);
16096 if (FNDECL_USED_AUTO (fn))
16098 struct language_function *f = NULL;
16099 if (DECL_STRUCT_FUNCTION (fn))
16100 f = DECL_STRUCT_FUNCTION (fn)->language;
16101 if (f == NULL)
16102 f = DECL_SAVED_FUNCTION_DATA (fn);
16103 return f->x_auto_return_pattern;
16105 return TREE_TYPE (TREE_TYPE (fn));
16108 /* Returns true iff DECL was declared with an auto return type and it has
16109 not yet been deduced to a real type. */
16111 bool
16112 undeduced_auto_decl (tree decl)
16114 if (cxx_dialect < cxx14)
16115 return false;
16116 return type_uses_auto (TREE_TYPE (decl));
16119 /* Complain if DECL has an undeduced return type. */
16121 void
16122 require_deduced_type (tree decl)
16124 if (undeduced_auto_decl (decl))
16125 error ("use of %qD before deduction of %<auto%>", decl);
16128 #include "gt-cp-decl.h"