2014-07-30 Robert Dewar <dewar@adacore.com>
[official-gcc.git] / gcc / cp / decl.c
blobaafb91751434683106dea32bf43e5585beebe216
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2014 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 "tm.h"
33 #include "tree.h"
34 #include "stringpool.h"
35 #include "stor-layout.h"
36 #include "varasm.h"
37 #include "attribs.h"
38 #include "calls.h"
39 #include "flags.h"
40 #include "cp-tree.h"
41 #include "tree-iterator.h"
42 #include "tree-inline.h"
43 #include "decl.h"
44 #include "intl.h"
45 #include "toplev.h"
46 #include "hashtab.h"
47 #include "tm_p.h"
48 #include "target.h"
49 #include "c-family/c-common.h"
50 #include "c-family/c-objc.h"
51 #include "c-family/c-pragma.h"
52 #include "c-family/c-target.h"
53 #include "c-family/c-ubsan.h"
54 #include "diagnostic.h"
55 #include "intl.h"
56 #include "debug.h"
57 #include "timevar.h"
58 #include "pointer-set.h"
59 #include "splay-tree.h"
60 #include "plugin.h"
61 #include "cgraph.h"
62 #include "cilk.h"
63 #include "wide-int.h"
64 #include "builtins.h"
66 /* Possible cases of bad specifiers type used by bad_specifiers. */
67 enum bad_spec_place {
68 BSP_VAR, /* variable */
69 BSP_PARM, /* parameter */
70 BSP_TYPE, /* type */
71 BSP_FIELD /* field */
74 static tree grokparms (tree parmlist, tree *);
75 static const char *redeclaration_error_message (tree, tree);
77 static int decl_jump_unsafe (tree);
78 static void require_complete_types_for_parms (tree);
79 static int ambi_op_p (enum tree_code);
80 static int unary_op_p (enum tree_code);
81 static void push_local_name (tree);
82 static tree grok_reference_init (tree, tree, tree, int);
83 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
84 int, int, tree);
85 static int check_static_variable_definition (tree, tree);
86 static void record_unknown_type (tree, const char *);
87 static tree builtin_function_1 (tree, tree, bool);
88 static int member_function_or_else (tree, tree, enum overload_flags);
89 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
90 int);
91 static void check_for_uninitialized_const_var (tree);
92 static hashval_t typename_hash (const void *);
93 static int typename_compare (const void *, const void *);
94 static tree local_variable_p_walkfn (tree *, int *, void *);
95 static tree record_builtin_java_type (const char *, int);
96 static const char *tag_name (enum tag_types);
97 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
98 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
99 static void maybe_deduce_size_from_array_init (tree, tree);
100 static void layout_var_decl (tree);
101 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
102 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
103 static void save_function_data (tree);
104 static void copy_type_enum (tree , tree);
105 static void check_function_type (tree, tree);
106 static void finish_constructor_body (void);
107 static void begin_destructor_body (void);
108 static void finish_destructor_body (void);
109 static void record_key_method_defined (tree);
110 static tree create_array_type_for_decl (tree, tree, tree);
111 static tree get_atexit_node (void);
112 static tree get_dso_handle_node (void);
113 static tree start_cleanup_fn (void);
114 static void end_cleanup_fn (void);
115 static tree cp_make_fname_decl (location_t, tree, int);
116 static void initialize_predefined_identifiers (void);
117 static tree check_special_function_return_type
118 (special_function_kind, tree, tree);
119 static tree push_cp_library_fn (enum tree_code, tree, int);
120 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
121 static void store_parm_decls (tree);
122 static void initialize_local_var (tree, tree);
123 static void expand_static_init (tree, tree);
125 /* The following symbols are subsumed in the cp_global_trees array, and
126 listed here individually for documentation purposes.
128 C++ extensions
129 tree wchar_decl_node;
131 tree vtable_entry_type;
132 tree delta_type_node;
133 tree __t_desc_type_node;
135 tree class_type_node;
136 tree unknown_type_node;
138 Array type `vtable_entry_type[]'
140 tree vtbl_type_node;
141 tree vtbl_ptr_type_node;
143 Namespaces,
145 tree std_node;
146 tree abi_node;
148 A FUNCTION_DECL which can call `abort'. Not necessarily the
149 one that the user will declare, but sufficient to be called
150 by routines that want to abort the program.
152 tree abort_fndecl;
154 The FUNCTION_DECL for the default `::operator delete'.
156 tree global_delete_fndecl;
158 Used by RTTI
159 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
160 tree tinfo_var_id; */
162 tree cp_global_trees[CPTI_MAX];
164 /* Indicates that there is a type value in some namespace, although
165 that is not necessarily in scope at the moment. */
167 tree global_type_node;
169 /* The node that holds the "name" of the global scope. */
170 tree global_scope_name;
172 #define local_names cp_function_chain->x_local_names
174 /* A list of objects which have constructors or destructors
175 which reside in the global scope. The decl is stored in
176 the TREE_VALUE slot and the initializer is stored
177 in the TREE_PURPOSE slot. */
178 tree static_aggregates;
180 /* Like static_aggregates, but for thread_local variables. */
181 tree tls_aggregates;
183 /* -- end of C++ */
185 /* A node for the integer constant 2. */
187 tree integer_two_node;
189 /* Used only for jumps to as-yet undefined labels, since jumps to
190 defined labels can have their validity checked immediately. */
192 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
193 struct named_label_use_entry *next;
194 /* The binding level to which this entry is *currently* attached.
195 This is initially the binding level in which the goto appeared,
196 but is modified as scopes are closed. */
197 cp_binding_level *binding_level;
198 /* The head of the names list that was current when the goto appeared,
199 or the inner scope popped. These are the decls that will *not* be
200 skipped when jumping to the label. */
201 tree names_in_scope;
202 /* The location of the goto, for error reporting. */
203 location_t o_goto_locus;
204 /* True if an OpenMP structured block scope has been closed since
205 the goto appeared. This means that the branch from the label will
206 illegally exit an OpenMP scope. */
207 bool in_omp_scope;
210 /* A list of all LABEL_DECLs in the function that have names. Here so
211 we can clear out their names' definitions at the end of the
212 function, and so we can check the validity of jumps to these labels. */
214 struct GTY(()) named_label_entry {
215 /* The decl itself. */
216 tree label_decl;
218 /* The binding level to which the label is *currently* attached.
219 This is initially set to the binding level in which the label
220 is defined, but is modified as scopes are closed. */
221 cp_binding_level *binding_level;
222 /* The head of the names list that was current when the label was
223 defined, or the inner scope popped. These are the decls that will
224 be skipped when jumping to the label. */
225 tree names_in_scope;
226 /* A vector of all decls from all binding levels that would be
227 crossed by a backward branch to the label. */
228 vec<tree, va_gc> *bad_decls;
230 /* A list of uses of the label, before the label is defined. */
231 struct named_label_use_entry *uses;
233 /* The following bits are set after the label is defined, and are
234 updated as scopes are popped. They indicate that a backward jump
235 to the label will illegally enter a scope of the given flavor. */
236 bool in_try_scope;
237 bool in_catch_scope;
238 bool in_omp_scope;
241 #define named_labels cp_function_chain->x_named_labels
243 /* The number of function bodies which we are currently processing.
244 (Zero if we are at namespace scope, one inside the body of a
245 function, two inside the body of a function in a local class, etc.) */
246 int function_depth;
248 /* To avoid unwanted recursion, finish_function defers all mark_used calls
249 encountered during its execution until it finishes. */
250 bool defer_mark_used_calls;
251 vec<tree, va_gc> *deferred_mark_used_calls;
253 /* States indicating how grokdeclarator() should handle declspecs marked
254 with __attribute__((deprecated)). An object declared as
255 __attribute__((deprecated)) suppresses warnings of uses of other
256 deprecated items. */
257 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
260 /* A list of VAR_DECLs whose type was incomplete at the time the
261 variable was declared. */
263 typedef struct GTY(()) incomplete_var_d {
264 tree decl;
265 tree incomplete_type;
266 } incomplete_var;
269 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
271 /* Returns the kind of template specialization we are currently
272 processing, given that it's declaration contained N_CLASS_SCOPES
273 explicit scope qualifications. */
275 tmpl_spec_kind
276 current_tmpl_spec_kind (int n_class_scopes)
278 int n_template_parm_scopes = 0;
279 int seen_specialization_p = 0;
280 int innermost_specialization_p = 0;
281 cp_binding_level *b;
283 /* Scan through the template parameter scopes. */
284 for (b = current_binding_level;
285 b->kind == sk_template_parms;
286 b = b->level_chain)
288 /* If we see a specialization scope inside a parameter scope,
289 then something is wrong. That corresponds to a declaration
290 like:
292 template <class T> template <> ...
294 which is always invalid since [temp.expl.spec] forbids the
295 specialization of a class member template if the enclosing
296 class templates are not explicitly specialized as well. */
297 if (b->explicit_spec_p)
299 if (n_template_parm_scopes == 0)
300 innermost_specialization_p = 1;
301 else
302 seen_specialization_p = 1;
304 else if (seen_specialization_p == 1)
305 return tsk_invalid_member_spec;
307 ++n_template_parm_scopes;
310 /* Handle explicit instantiations. */
311 if (processing_explicit_instantiation)
313 if (n_template_parm_scopes != 0)
314 /* We've seen a template parameter list during an explicit
315 instantiation. For example:
317 template <class T> template void f(int);
319 This is erroneous. */
320 return tsk_invalid_expl_inst;
321 else
322 return tsk_expl_inst;
325 if (n_template_parm_scopes < n_class_scopes)
326 /* We've not seen enough template headers to match all the
327 specialized classes present. For example:
329 template <class T> void R<T>::S<T>::f(int);
331 This is invalid; there needs to be one set of template
332 parameters for each class. */
333 return tsk_insufficient_parms;
334 else if (n_template_parm_scopes == n_class_scopes)
335 /* We're processing a non-template declaration (even though it may
336 be a member of a template class.) For example:
338 template <class T> void S<T>::f(int);
340 The `class T' matches the `S<T>', leaving no template headers
341 corresponding to the `f'. */
342 return tsk_none;
343 else if (n_template_parm_scopes > n_class_scopes + 1)
344 /* We've got too many template headers. For example:
346 template <> template <class T> void f (T);
348 There need to be more enclosing classes. */
349 return tsk_excessive_parms;
350 else
351 /* This must be a template. It's of the form:
353 template <class T> template <class U> void S<T>::f(U);
355 This is a specialization if the innermost level was a
356 specialization; otherwise it's just a definition of the
357 template. */
358 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
361 /* Exit the current scope. */
363 void
364 finish_scope (void)
366 poplevel (0, 0, 0);
369 /* When a label goes out of scope, check to see if that label was used
370 in a valid manner, and issue any appropriate warnings or errors. */
372 static void
373 pop_label (tree label, tree old_value)
375 if (!processing_template_decl)
377 if (DECL_INITIAL (label) == NULL_TREE)
379 location_t location;
381 error ("label %q+D used but not defined", label);
382 location = input_location;
383 /* FIXME want (LOCATION_FILE (input_location), (line)0) */
384 /* Avoid crashing later. */
385 define_label (location, DECL_NAME (label));
387 else
388 warn_for_unused_label (label);
391 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
394 /* At the end of a function, all labels declared within the function
395 go out of scope. BLOCK is the top-level block for the
396 function. */
398 static int
399 pop_labels_1 (void **slot, void *data)
401 struct named_label_entry *ent = (struct named_label_entry *) *slot;
402 tree block = (tree) data;
404 pop_label (ent->label_decl, NULL_TREE);
406 /* Put the labels into the "variables" of the top-level block,
407 so debugger can see them. */
408 DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
409 BLOCK_VARS (block) = ent->label_decl;
411 htab_clear_slot (named_labels, slot);
413 return 1;
416 static void
417 pop_labels (tree block)
419 if (named_labels)
421 htab_traverse (named_labels, pop_labels_1, block);
422 named_labels = NULL;
426 /* At the end of a block with local labels, restore the outer definition. */
428 static void
429 pop_local_label (tree label, tree old_value)
431 struct named_label_entry dummy;
432 void **slot;
434 pop_label (label, old_value);
436 dummy.label_decl = label;
437 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
438 htab_clear_slot (named_labels, slot);
441 /* The following two routines are used to interface to Objective-C++.
442 The binding level is purposely treated as an opaque type. */
444 void *
445 objc_get_current_scope (void)
447 return current_binding_level;
450 /* The following routine is used by the NeXT-style SJLJ exceptions;
451 variables get marked 'volatile' so as to not be clobbered by
452 _setjmp()/_longjmp() calls. All variables in the current scope,
453 as well as parent scopes up to (but not including) ENCLOSING_BLK
454 shall be thusly marked. */
456 void
457 objc_mark_locals_volatile (void *enclosing_blk)
459 cp_binding_level *scope;
461 for (scope = current_binding_level;
462 scope && scope != enclosing_blk;
463 scope = scope->level_chain)
465 tree decl;
467 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
468 objc_volatilize_decl (decl);
470 /* Do not climb up past the current function. */
471 if (scope->kind == sk_function_parms)
472 break;
476 /* Update data for defined and undefined labels when leaving a scope. */
478 static int
479 poplevel_named_label_1 (void **slot, void *data)
481 struct named_label_entry *ent = (struct named_label_entry *) *slot;
482 cp_binding_level *bl = (cp_binding_level *) data;
483 cp_binding_level *obl = bl->level_chain;
485 if (ent->binding_level == bl)
487 tree decl;
489 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
490 TREE_LISTs representing OVERLOADs, so be careful. */
491 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
492 ? DECL_CHAIN (decl)
493 : TREE_CHAIN (decl)))
494 if (decl_jump_unsafe (decl))
495 vec_safe_push (ent->bad_decls, decl);
497 ent->binding_level = obl;
498 ent->names_in_scope = obl->names;
499 switch (bl->kind)
501 case sk_try:
502 ent->in_try_scope = true;
503 break;
504 case sk_catch:
505 ent->in_catch_scope = true;
506 break;
507 case sk_omp:
508 ent->in_omp_scope = true;
509 break;
510 default:
511 break;
514 else if (ent->uses)
516 struct named_label_use_entry *use;
518 for (use = ent->uses; use ; use = use->next)
519 if (use->binding_level == bl)
521 use->binding_level = obl;
522 use->names_in_scope = obl->names;
523 if (bl->kind == sk_omp)
524 use->in_omp_scope = true;
528 return 1;
531 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
532 when errors were reported, except for -Werror-unused-but-set-*. */
533 static int unused_but_set_errorcount;
535 /* Exit a binding level.
536 Pop the level off, and restore the state of the identifier-decl mappings
537 that were in effect when this level was entered.
539 If KEEP == 1, this level had explicit declarations, so
540 and create a "block" (a BLOCK node) for the level
541 to record its declarations and subblocks for symbol table output.
543 If FUNCTIONBODY is nonzero, this level is the body of a function,
544 so create a block as if KEEP were set and also clear out all
545 label names.
547 If REVERSE is nonzero, reverse the order of decls before putting
548 them into the BLOCK. */
550 tree
551 poplevel (int keep, int reverse, int functionbody)
553 tree link;
554 /* The chain of decls was accumulated in reverse order.
555 Put it into forward order, just for cleanliness. */
556 tree decls;
557 tree subblocks;
558 tree block;
559 tree decl;
560 int leaving_for_scope;
561 scope_kind kind;
562 unsigned ix;
563 cp_label_binding *label_bind;
565 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
566 restart:
568 block = NULL_TREE;
570 gcc_assert (current_binding_level->kind != sk_class);
572 if (current_binding_level->kind == sk_cleanup)
573 functionbody = 0;
574 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
576 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
578 /* We used to use KEEP == 2 to indicate that the new block should go
579 at the beginning of the list of blocks at this binding level,
580 rather than the end. This hack is no longer used. */
581 gcc_assert (keep == 0 || keep == 1);
583 if (current_binding_level->keep)
584 keep = 1;
586 /* Any uses of undefined labels, and any defined labels, now operate
587 under constraints of next binding contour. */
588 if (cfun && !functionbody && named_labels)
589 htab_traverse (named_labels, poplevel_named_label_1,
590 current_binding_level);
592 /* Get the decls in the order they were written.
593 Usually current_binding_level->names is in reverse order.
594 But parameter decls were previously put in forward order. */
596 if (reverse)
597 current_binding_level->names
598 = decls = nreverse (current_binding_level->names);
599 else
600 decls = current_binding_level->names;
602 /* If there were any declarations or structure tags in that level,
603 or if this level is a function body,
604 create a BLOCK to record them for the life of this function. */
605 block = NULL_TREE;
606 if (keep == 1 || functionbody)
607 block = make_node (BLOCK);
608 if (block != NULL_TREE)
610 BLOCK_VARS (block) = decls;
611 BLOCK_SUBBLOCKS (block) = subblocks;
614 /* In each subblock, record that this is its superior. */
615 if (keep >= 0)
616 for (link = subblocks; link; link = BLOCK_CHAIN (link))
617 BLOCK_SUPERCONTEXT (link) = block;
619 /* We still support the old for-scope rules, whereby the variables
620 in a for-init statement were in scope after the for-statement
621 ended. We only use the new rules if flag_new_for_scope is
622 nonzero. */
623 leaving_for_scope
624 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
626 /* Before we remove the declarations first check for unused variables. */
627 if ((warn_unused_variable || warn_unused_but_set_variable)
628 && !processing_template_decl)
629 for (tree d = getdecls (); d; d = TREE_CHAIN (d))
631 /* There are cases where D itself is a TREE_LIST. See in
632 push_local_binding where the list of decls returned by
633 getdecls is built. */
634 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
635 // See through references for improved -Wunused-variable (PR 38958).
636 tree type = non_reference (TREE_TYPE (decl));
637 if (VAR_P (decl)
638 && (! TREE_USED (decl) || !DECL_READ_P (decl))
639 && ! DECL_IN_SYSTEM_HEADER (decl)
640 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
641 && type != error_mark_node
642 && (!CLASS_TYPE_P (type)
643 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
644 || lookup_attribute ("warn_unused",
645 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
647 if (! TREE_USED (decl))
648 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
649 else if (DECL_CONTEXT (decl) == current_function_decl
650 // For -Wunused-but-set-variable leave references alone.
651 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
652 && errorcount == unused_but_set_errorcount)
654 warning (OPT_Wunused_but_set_variable,
655 "variable %q+D set but not used", decl);
656 unused_but_set_errorcount = errorcount;
661 /* Remove declarations for all the DECLs in this level. */
662 for (link = decls; link; link = TREE_CHAIN (link))
664 if (leaving_for_scope && VAR_P (link)
665 /* It's hard to make this ARM compatibility hack play nicely with
666 lambdas, and it really isn't necessary in C++11 mode. */
667 && cxx_dialect < cxx11
668 && DECL_NAME (link))
670 tree name = DECL_NAME (link);
671 cxx_binding *ob;
672 tree ns_binding;
674 ob = outer_binding (name,
675 IDENTIFIER_BINDING (name),
676 /*class_p=*/true);
677 if (!ob)
678 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
679 else
680 ns_binding = NULL_TREE;
682 if (ob && ob->scope == current_binding_level->level_chain)
683 /* We have something like:
685 int i;
686 for (int i; ;);
688 and we are leaving the `for' scope. There's no reason to
689 keep the binding of the inner `i' in this case. */
690 pop_binding (name, link);
691 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
692 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
693 /* Here, we have something like:
695 typedef int I;
697 void f () {
698 for (int I; ;);
701 We must pop the for-scope binding so we know what's a
702 type and what isn't. */
703 pop_binding (name, link);
704 else
706 /* Mark this VAR_DECL as dead so that we can tell we left it
707 there only for backward compatibility. */
708 DECL_DEAD_FOR_LOCAL (link) = 1;
710 /* Keep track of what should have happened when we
711 popped the binding. */
712 if (ob && ob->value)
714 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
715 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
718 /* Add it to the list of dead variables in the next
719 outermost binding to that we can remove these when we
720 leave that binding. */
721 vec_safe_push (
722 current_binding_level->level_chain->dead_vars_from_for,
723 link);
725 /* Although we don't pop the cxx_binding, we do clear
726 its SCOPE since the scope is going away now. */
727 IDENTIFIER_BINDING (name)->scope
728 = current_binding_level->level_chain;
731 else
733 tree name;
735 /* Remove the binding. */
736 decl = link;
738 if (TREE_CODE (decl) == TREE_LIST)
739 decl = TREE_VALUE (decl);
740 name = decl;
742 if (TREE_CODE (name) == OVERLOAD)
743 name = OVL_FUNCTION (name);
745 gcc_assert (DECL_P (name));
746 pop_binding (DECL_NAME (name), decl);
750 /* Remove declarations for any `for' variables from inner scopes
751 that we kept around. */
752 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
753 ix, decl)
754 pop_binding (DECL_NAME (decl), decl);
756 /* Restore the IDENTIFIER_TYPE_VALUEs. */
757 for (link = current_binding_level->type_shadowed;
758 link; link = TREE_CHAIN (link))
759 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
761 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
762 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->shadowed_labels,
763 ix, label_bind)
764 pop_local_label (label_bind->label, label_bind->prev_value);
766 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
767 list if a `using' declaration put them there. The debugging
768 back ends won't understand OVERLOAD, so we remove them here.
769 Because the BLOCK_VARS are (temporarily) shared with
770 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
771 popped all the bindings. */
772 if (block)
774 tree* d;
776 for (d = &BLOCK_VARS (block); *d; )
778 if (TREE_CODE (*d) == TREE_LIST)
779 *d = TREE_CHAIN (*d);
780 else
781 d = &DECL_CHAIN (*d);
785 /* If the level being exited is the top level of a function,
786 check over all the labels. */
787 if (functionbody)
789 /* Since this is the top level block of a function, the vars are
790 the function's parameters. Don't leave them in the BLOCK
791 because they are found in the FUNCTION_DECL instead. */
792 BLOCK_VARS (block) = 0;
793 pop_labels (block);
796 kind = current_binding_level->kind;
797 if (kind == sk_cleanup)
799 tree stmt;
801 /* If this is a temporary binding created for a cleanup, then we'll
802 have pushed a statement list level. Pop that, create a new
803 BIND_EXPR for the block, and insert it into the stream. */
804 stmt = pop_stmt_list (current_binding_level->statement_list);
805 stmt = c_build_bind_expr (input_location, block, stmt);
806 add_stmt (stmt);
809 leave_scope ();
810 if (functionbody)
812 /* The current function is being defined, so its DECL_INITIAL
813 should be error_mark_node. */
814 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
815 DECL_INITIAL (current_function_decl) = block;
817 else if (block)
818 current_binding_level->blocks
819 = block_chainon (current_binding_level->blocks, block);
821 /* If we did not make a block for the level just exited,
822 any blocks made for inner levels
823 (since they cannot be recorded as subblocks in that level)
824 must be carried forward so they will later become subblocks
825 of something else. */
826 else if (subblocks)
827 current_binding_level->blocks
828 = block_chainon (current_binding_level->blocks, subblocks);
830 /* Each and every BLOCK node created here in `poplevel' is important
831 (e.g. for proper debugging information) so if we created one
832 earlier, mark it as "used". */
833 if (block)
834 TREE_USED (block) = 1;
836 /* All temporary bindings created for cleanups are popped silently. */
837 if (kind == sk_cleanup)
838 goto restart;
840 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
841 return block;
844 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
845 itself, calling F for each. The DATA is passed to F as well. */
847 static int
848 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
850 int result = 0;
851 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
853 result |= (*f) (name_space, data);
855 for (; current; current = DECL_CHAIN (current))
856 result |= walk_namespaces_r (current, f, data);
858 return result;
861 /* Walk all the namespaces, calling F for each. The DATA is passed to
862 F as well. */
865 walk_namespaces (walk_namespaces_fn f, void* data)
867 return walk_namespaces_r (global_namespace, f, data);
870 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
871 DATA is non-NULL, this is the last time we will call
872 wrapup_global_declarations for this NAMESPACE. */
875 wrapup_globals_for_namespace (tree name_space, void* data)
877 cp_binding_level *level = NAMESPACE_LEVEL (name_space);
878 vec<tree, va_gc> *statics = level->static_decls;
879 tree *vec = statics->address ();
880 int len = statics->length ();
881 int last_time = (data != 0);
883 if (last_time)
885 check_global_declarations (vec, len);
886 emit_debug_global_declarations (vec, len);
887 return 0;
890 /* Write out any globals that need to be output. */
891 return wrapup_global_declarations (vec, len);
895 /* In C++, you don't have to write `struct S' to refer to `S'; you
896 can just use `S'. We accomplish this by creating a TYPE_DECL as
897 if the user had written `typedef struct S S'. Create and return
898 the TYPE_DECL for TYPE. */
900 tree
901 create_implicit_typedef (tree name, tree type)
903 tree decl;
905 decl = build_decl (input_location, TYPE_DECL, name, type);
906 DECL_ARTIFICIAL (decl) = 1;
907 /* There are other implicit type declarations, like the one *within*
908 a class that allows you to write `S::S'. We must distinguish
909 amongst these. */
910 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
911 TYPE_NAME (type) = decl;
912 TYPE_STUB_DECL (type) = decl;
914 return decl;
917 /* Remember a local name for name-mangling purposes. */
919 static void
920 push_local_name (tree decl)
922 size_t i, nelts;
923 tree t, name;
925 timevar_start (TV_NAME_LOOKUP);
927 name = DECL_NAME (decl);
929 nelts = vec_safe_length (local_names);
930 for (i = 0; i < nelts; i++)
932 t = (*local_names)[i];
933 if (DECL_NAME (t) == name)
935 if (!DECL_LANG_SPECIFIC (decl))
936 retrofit_lang_decl (decl);
937 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
938 if (DECL_DISCRIMINATOR_SET_P (t))
939 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
940 else
941 DECL_DISCRIMINATOR (decl) = 1;
943 (*local_names)[i] = decl;
944 timevar_stop (TV_NAME_LOOKUP);
945 return;
949 vec_safe_push (local_names, decl);
950 timevar_stop (TV_NAME_LOOKUP);
953 /* Subroutine of duplicate_decls: return truthvalue of whether
954 or not types of these decls match.
956 For C++, we must compare the parameter list so that `int' can match
957 `int&' in a parameter position, but `int&' is not confused with
958 `const int&'. */
961 decls_match (tree newdecl, tree olddecl)
963 int types_match;
965 if (newdecl == olddecl)
966 return 1;
968 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
969 /* If the two DECLs are not even the same kind of thing, we're not
970 interested in their types. */
971 return 0;
973 gcc_assert (DECL_P (newdecl));
975 if (TREE_CODE (newdecl) == FUNCTION_DECL)
977 tree f1 = TREE_TYPE (newdecl);
978 tree f2 = TREE_TYPE (olddecl);
979 tree p1 = TYPE_ARG_TYPES (f1);
980 tree p2 = TYPE_ARG_TYPES (f2);
981 tree r2;
983 /* Specializations of different templates are different functions
984 even if they have the same type. */
985 tree t1 = (DECL_USE_TEMPLATE (newdecl)
986 ? DECL_TI_TEMPLATE (newdecl)
987 : NULL_TREE);
988 tree t2 = (DECL_USE_TEMPLATE (olddecl)
989 ? DECL_TI_TEMPLATE (olddecl)
990 : NULL_TREE);
991 if (t1 != t2)
992 return 0;
994 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
995 && ! (DECL_EXTERN_C_P (newdecl)
996 && DECL_EXTERN_C_P (olddecl)))
997 return 0;
999 /* A new declaration doesn't match a built-in one unless it
1000 is also extern "C". */
1001 if (DECL_IS_BUILTIN (olddecl)
1002 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1003 return 0;
1005 if (TREE_CODE (f1) != TREE_CODE (f2))
1006 return 0;
1008 /* A declaration with deduced return type should use its pre-deduction
1009 type for declaration matching. */
1010 r2 = fndecl_declared_return_type (olddecl);
1012 if (same_type_p (TREE_TYPE (f1), r2))
1014 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1015 && (DECL_BUILT_IN (olddecl)
1016 #ifndef NO_IMPLICIT_EXTERN_C
1017 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1018 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1019 #endif
1022 types_match = self_promoting_args_p (p1);
1023 if (p1 == void_list_node)
1024 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1026 #ifndef NO_IMPLICIT_EXTERN_C
1027 else if (!prototype_p (f1)
1028 && (DECL_EXTERN_C_P (olddecl)
1029 && DECL_IN_SYSTEM_HEADER (olddecl)
1030 && !DECL_CLASS_SCOPE_P (olddecl))
1031 && (DECL_EXTERN_C_P (newdecl)
1032 && DECL_IN_SYSTEM_HEADER (newdecl)
1033 && !DECL_CLASS_SCOPE_P (newdecl)))
1035 types_match = self_promoting_args_p (p2);
1036 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1038 #endif
1039 else
1040 types_match =
1041 compparms (p1, p2)
1042 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1043 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1044 || comp_type_attributes (TREE_TYPE (newdecl),
1045 TREE_TYPE (olddecl)) != 0);
1047 else
1048 types_match = 0;
1050 /* The decls dont match if they correspond to two different versions
1051 of the same function. Disallow extern "C" functions to be
1052 versions for now. */
1053 if (types_match
1054 && !DECL_EXTERN_C_P (newdecl)
1055 && !DECL_EXTERN_C_P (olddecl)
1056 && targetm.target_option.function_versions (newdecl, olddecl))
1058 /* Mark functions as versions if necessary. Modify the mangled decl
1059 name if necessary. */
1060 if (DECL_FUNCTION_VERSIONED (newdecl)
1061 && DECL_FUNCTION_VERSIONED (olddecl))
1062 return 0;
1063 if (!DECL_FUNCTION_VERSIONED (newdecl))
1065 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1066 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1067 mangle_decl (newdecl);
1069 if (!DECL_FUNCTION_VERSIONED (olddecl))
1071 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1072 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1073 mangle_decl (olddecl);
1075 cgraph_node::record_function_versions (olddecl, newdecl);
1076 return 0;
1079 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1081 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1082 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1083 return 0;
1085 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1086 DECL_TEMPLATE_PARMS (olddecl)))
1087 return 0;
1089 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1090 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1091 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1092 else
1093 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1094 DECL_TEMPLATE_RESULT (newdecl));
1096 else
1098 /* Need to check scope for variable declaration (VAR_DECL).
1099 For typedef (TYPE_DECL), scope is ignored. */
1100 if (VAR_P (newdecl)
1101 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1102 /* [dcl.link]
1103 Two declarations for an object with C language linkage
1104 with the same name (ignoring the namespace that qualify
1105 it) that appear in different namespace scopes refer to
1106 the same object. */
1107 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1108 return 0;
1110 if (TREE_TYPE (newdecl) == error_mark_node)
1111 types_match = TREE_TYPE (olddecl) == error_mark_node;
1112 else if (TREE_TYPE (olddecl) == NULL_TREE)
1113 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1114 else if (TREE_TYPE (newdecl) == NULL_TREE)
1115 types_match = 0;
1116 else
1117 types_match = comptypes (TREE_TYPE (newdecl),
1118 TREE_TYPE (olddecl),
1119 COMPARE_REDECLARATION);
1122 return types_match;
1125 /* If NEWDECL is `static' and an `extern' was seen previously,
1126 warn about it. OLDDECL is the previous declaration.
1128 Note that this does not apply to the C++ case of declaring
1129 a variable `extern const' and then later `const'.
1131 Don't complain about built-in functions, since they are beyond
1132 the user's control. */
1134 void
1135 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1137 if (TREE_CODE (newdecl) == TYPE_DECL
1138 || TREE_CODE (newdecl) == TEMPLATE_DECL
1139 || TREE_CODE (newdecl) == CONST_DECL
1140 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1141 return;
1143 /* Don't get confused by static member functions; that's a different
1144 use of `static'. */
1145 if (TREE_CODE (newdecl) == FUNCTION_DECL
1146 && DECL_STATIC_FUNCTION_P (newdecl))
1147 return;
1149 /* If the old declaration was `static', or the new one isn't, then
1150 everything is OK. */
1151 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1152 return;
1154 /* It's OK to declare a builtin function as `static'. */
1155 if (TREE_CODE (olddecl) == FUNCTION_DECL
1156 && DECL_ARTIFICIAL (olddecl))
1157 return;
1159 if (permerror (input_location,
1160 "%qD was declared %<extern%> and later %<static%>", newdecl))
1161 inform (input_location, "previous declaration of %q+D", olddecl);
1164 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1165 function templates. If their exception specifications do not
1166 match, issue a diagnostic. */
1168 static void
1169 check_redeclaration_exception_specification (tree new_decl,
1170 tree old_decl)
1172 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1173 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1175 /* Two default specs are equivalent, don't force evaluation. */
1176 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1177 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1178 return;
1180 maybe_instantiate_noexcept (new_decl);
1181 maybe_instantiate_noexcept (old_decl);
1182 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1183 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1185 /* [except.spec]
1187 If any declaration of a function has an exception-specification,
1188 all declarations, including the definition and an explicit
1189 specialization, of that function shall have an
1190 exception-specification with the same set of type-ids. */
1191 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1192 && ! DECL_IS_BUILTIN (old_decl)
1193 && flag_exceptions
1194 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1196 error ("declaration of %qF has a different exception specifier",
1197 new_decl);
1198 error ("from previous declaration %q+F", old_decl);
1202 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1203 Otherwise issue diagnostics. */
1205 static bool
1206 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1208 old_decl = STRIP_TEMPLATE (old_decl);
1209 new_decl = STRIP_TEMPLATE (new_decl);
1210 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1211 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1212 return true;
1213 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1214 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1215 return true;
1216 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1218 if (DECL_BUILT_IN (old_decl))
1220 /* Hide a built-in declaration. */
1221 DECL_DECLARED_CONSTEXPR_P (old_decl)
1222 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1223 return true;
1225 /* 7.1.5 [dcl.constexpr]
1226 Note: An explicit specialization can differ from the template
1227 declaration with respect to the constexpr specifier. */
1228 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1229 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1230 return true;
1232 error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1233 error ("from previous declaration %q+D", old_decl);
1234 return false;
1236 return true;
1239 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1240 && lookup_attribute ("gnu_inline", \
1241 DECL_ATTRIBUTES (fn)))
1243 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1244 If the redeclaration is invalid, a diagnostic is issued, and the
1245 error_mark_node is returned. Otherwise, OLDDECL is returned.
1247 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1248 returned.
1250 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1252 tree
1253 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1255 unsigned olddecl_uid = DECL_UID (olddecl);
1256 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1257 int new_defines_function = 0;
1258 tree new_template_info;
1260 if (newdecl == olddecl)
1261 return olddecl;
1263 types_match = decls_match (newdecl, olddecl);
1265 /* If either the type of the new decl or the type of the old decl is an
1266 error_mark_node, then that implies that we have already issued an
1267 error (earlier) for some bogus type specification, and in that case,
1268 it is rather pointless to harass the user with yet more error message
1269 about the same declaration, so just pretend the types match here. */
1270 if (TREE_TYPE (newdecl) == error_mark_node
1271 || TREE_TYPE (olddecl) == error_mark_node)
1272 return error_mark_node;
1274 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1275 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1277 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1278 && TREE_CODE (olddecl) != TEMPLATE_DECL
1279 && check_raw_literal_operator (olddecl))
1280 error ("literal operator template %q+D conflicts with"
1281 " raw literal operator %qD", newdecl, olddecl);
1282 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1283 && TREE_CODE (olddecl) == TEMPLATE_DECL
1284 && check_raw_literal_operator (newdecl))
1285 error ("raw literal operator %q+D conflicts with"
1286 " literal operator template %qD", newdecl, olddecl);
1289 if (DECL_P (olddecl)
1290 && TREE_CODE (newdecl) == FUNCTION_DECL
1291 && TREE_CODE (olddecl) == FUNCTION_DECL
1292 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1294 if (DECL_DECLARED_INLINE_P (newdecl)
1295 && DECL_UNINLINABLE (newdecl)
1296 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1297 /* Already warned elsewhere. */;
1298 else if (DECL_DECLARED_INLINE_P (olddecl)
1299 && DECL_UNINLINABLE (olddecl)
1300 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1301 /* Already warned. */;
1302 else if (DECL_DECLARED_INLINE_P (newdecl)
1303 && DECL_UNINLINABLE (olddecl)
1304 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1306 if (warning (OPT_Wattributes, "function %q+D redeclared as inline",
1307 newdecl))
1308 inform (DECL_SOURCE_LOCATION (olddecl),
1309 "previous declaration of %qD with attribute noinline",
1310 olddecl);
1312 else if (DECL_DECLARED_INLINE_P (olddecl)
1313 && DECL_UNINLINABLE (newdecl)
1314 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1316 if (warning (OPT_Wattributes, "function %q+D redeclared with "
1317 "attribute noinline", newdecl))
1318 inform (DECL_SOURCE_LOCATION (olddecl),
1319 "previous declaration of %qD was inline",
1320 olddecl);
1324 /* Check for redeclaration and other discrepancies. */
1325 if (TREE_CODE (olddecl) == FUNCTION_DECL
1326 && DECL_ARTIFICIAL (olddecl))
1328 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1329 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1331 /* Avoid warnings redeclaring built-ins which have not been
1332 explicitly declared. */
1333 if (DECL_ANTICIPATED (olddecl))
1334 return NULL_TREE;
1336 /* If you declare a built-in or predefined function name as static,
1337 the old definition is overridden, but optionally warn this was a
1338 bad choice of name. */
1339 if (! TREE_PUBLIC (newdecl))
1341 warning (OPT_Wshadow,
1342 DECL_BUILT_IN (olddecl)
1343 ? G_("shadowing built-in function %q#D")
1344 : G_("shadowing library function %q#D"), olddecl);
1345 /* Discard the old built-in function. */
1346 return NULL_TREE;
1348 /* If the built-in is not ansi, then programs can override
1349 it even globally without an error. */
1350 else if (! DECL_BUILT_IN (olddecl))
1351 warning (0, "library function %q#D redeclared as non-function %q#D",
1352 olddecl, newdecl);
1353 else
1354 error ("declaration of %q#D conflicts with built-in "
1355 "declaration %q#D", newdecl, olddecl);
1356 return NULL_TREE;
1358 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1360 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1361 error_at (DECL_SOURCE_LOCATION (newdecl),
1362 "redeclaration of %<pragma omp declare reduction%>");
1363 inform (DECL_SOURCE_LOCATION (olddecl),
1364 "previous %<pragma omp declare reduction%> declaration");
1365 return error_mark_node;
1367 else if (!types_match)
1369 /* Avoid warnings redeclaring built-ins which have not been
1370 explicitly declared. */
1371 if (DECL_ANTICIPATED (olddecl))
1373 /* Deal with fileptr_type_node. FILE type is not known
1374 at the time we create the builtins. */
1375 tree t1, t2;
1377 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1378 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1379 t1 || t2;
1380 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1381 if (!t1 || !t2)
1382 break;
1383 else if (TREE_VALUE (t2) == fileptr_type_node)
1385 tree t = TREE_VALUE (t1);
1387 if (TYPE_PTR_P (t)
1388 && TYPE_IDENTIFIER (TREE_TYPE (t))
1389 == get_identifier ("FILE")
1390 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1392 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1394 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1395 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1396 types_match = decls_match (newdecl, olddecl);
1397 if (types_match)
1398 return duplicate_decls (newdecl, olddecl,
1399 newdecl_is_friend);
1400 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1403 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1404 break;
1406 else if ((DECL_EXTERN_C_P (newdecl)
1407 && DECL_EXTERN_C_P (olddecl))
1408 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1409 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1411 /* A near match; override the builtin. */
1413 if (TREE_PUBLIC (newdecl))
1414 warning (0, "new declaration %q#D ambiguates built-in "
1415 "declaration %q#D", newdecl, olddecl);
1416 else
1417 warning (OPT_Wshadow,
1418 DECL_BUILT_IN (olddecl)
1419 ? G_("shadowing built-in function %q#D")
1420 : G_("shadowing library function %q#D"), olddecl);
1422 else
1423 /* Discard the old built-in function. */
1424 return NULL_TREE;
1426 /* Replace the old RTL to avoid problems with inlining. */
1427 COPY_DECL_RTL (newdecl, olddecl);
1429 /* Even if the types match, prefer the new declarations type for
1430 built-ins which have not been explicitly declared, for
1431 exception lists, etc... */
1432 else if (DECL_IS_BUILTIN (olddecl))
1434 tree type = TREE_TYPE (newdecl);
1435 tree attribs = (*targetm.merge_type_attributes)
1436 (TREE_TYPE (olddecl), type);
1438 type = cp_build_type_attribute_variant (type, attribs);
1439 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1442 /* If a function is explicitly declared "throw ()", propagate that to
1443 the corresponding builtin. */
1444 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1445 && DECL_ANTICIPATED (olddecl)
1446 && TREE_NOTHROW (newdecl)
1447 && !TREE_NOTHROW (olddecl))
1449 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1450 tree tmpdecl = builtin_decl_explicit (fncode);
1451 if (tmpdecl && tmpdecl != olddecl && types_match)
1452 TREE_NOTHROW (tmpdecl) = 1;
1455 /* Whether or not the builtin can throw exceptions has no
1456 bearing on this declarator. */
1457 TREE_NOTHROW (olddecl) = 0;
1459 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1461 /* If a builtin function is redeclared as `static', merge
1462 the declarations, but make the original one static. */
1463 DECL_THIS_STATIC (olddecl) = 1;
1464 TREE_PUBLIC (olddecl) = 0;
1466 /* Make the old declaration consistent with the new one so
1467 that all remnants of the builtin-ness of this function
1468 will be banished. */
1469 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1470 COPY_DECL_RTL (newdecl, olddecl);
1473 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1475 /* C++ Standard, 3.3, clause 4:
1476 "[Note: a namespace name or a class template name must be unique
1477 in its declarative region (7.3.2, clause 14). ]" */
1478 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1479 && TREE_CODE (newdecl) != NAMESPACE_DECL
1480 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1481 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1482 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1483 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1485 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1486 && TREE_CODE (newdecl) != TYPE_DECL)
1487 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1488 && TREE_CODE (olddecl) != TYPE_DECL))
1490 /* We do nothing special here, because C++ does such nasty
1491 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1492 get shadowed, and know that if we need to find a TYPE_DECL
1493 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1494 slot of the identifier. */
1495 return NULL_TREE;
1498 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1499 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1500 || (TREE_CODE (olddecl) == FUNCTION_DECL
1501 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1502 return NULL_TREE;
1505 error ("%q#D redeclared as different kind of symbol", newdecl);
1506 if (TREE_CODE (olddecl) == TREE_LIST)
1507 olddecl = TREE_VALUE (olddecl);
1508 inform (DECL_SOURCE_LOCATION (olddecl),
1509 "previous declaration %q#D", olddecl);
1511 return error_mark_node;
1513 else if (!types_match)
1515 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1516 /* These are certainly not duplicate declarations; they're
1517 from different scopes. */
1518 return NULL_TREE;
1520 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1522 /* The name of a class template may not be declared to refer to
1523 any other template, class, function, object, namespace, value,
1524 or type in the same scope. */
1525 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1526 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1528 error ("conflicting declaration of template %q#D", newdecl);
1529 inform (DECL_SOURCE_LOCATION (olddecl),
1530 "previous declaration %q#D", olddecl);
1531 return error_mark_node;
1533 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1534 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1535 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1536 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1537 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1538 DECL_TEMPLATE_PARMS (olddecl))
1539 /* Template functions can be disambiguated by
1540 return type. */
1541 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1542 TREE_TYPE (TREE_TYPE (olddecl))))
1544 error ("ambiguating new declaration %q#D", newdecl);
1545 inform (DECL_SOURCE_LOCATION (olddecl),
1546 "old declaration %q#D", olddecl);
1548 return NULL_TREE;
1550 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1552 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1554 error ("conflicting declaration of C function %q#D",
1555 newdecl);
1556 inform (DECL_SOURCE_LOCATION (olddecl),
1557 "previous declaration %q#D", olddecl);
1558 return NULL_TREE;
1560 /* For function versions, params and types match, but they
1561 are not ambiguous. */
1562 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1563 && !DECL_FUNCTION_VERSIONED (olddecl))
1564 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1565 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1567 error ("ambiguating new declaration of %q#D", newdecl);
1568 inform (DECL_SOURCE_LOCATION (olddecl),
1569 "old declaration %q#D", olddecl);
1570 return error_mark_node;
1572 else
1573 return NULL_TREE;
1575 else
1577 error ("conflicting declaration %q#D", newdecl);
1578 inform (DECL_SOURCE_LOCATION (olddecl),
1579 "previous declaration as %q#D", olddecl);
1580 return error_mark_node;
1583 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1584 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1585 && (!DECL_TEMPLATE_INFO (newdecl)
1586 || (DECL_TI_TEMPLATE (newdecl)
1587 != DECL_TI_TEMPLATE (olddecl))))
1588 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1589 && (!DECL_TEMPLATE_INFO (olddecl)
1590 || (DECL_TI_TEMPLATE (olddecl)
1591 != DECL_TI_TEMPLATE (newdecl))))))
1592 /* It's OK to have a template specialization and a non-template
1593 with the same type, or to have specializations of two
1594 different templates with the same type. Note that if one is a
1595 specialization, and the other is an instantiation of the same
1596 template, that we do not exit at this point. That situation
1597 can occur if we instantiate a template class, and then
1598 specialize one of its methods. This situation is valid, but
1599 the declarations must be merged in the usual way. */
1600 return NULL_TREE;
1601 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1602 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1603 && !DECL_USE_TEMPLATE (newdecl))
1604 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1605 && !DECL_USE_TEMPLATE (olddecl))))
1606 /* One of the declarations is a template instantiation, and the
1607 other is not a template at all. That's OK. */
1608 return NULL_TREE;
1609 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1611 /* In [namespace.alias] we have:
1613 In a declarative region, a namespace-alias-definition can be
1614 used to redefine a namespace-alias declared in that declarative
1615 region to refer only to the namespace to which it already
1616 refers.
1618 Therefore, if we encounter a second alias directive for the same
1619 alias, we can just ignore the second directive. */
1620 if (DECL_NAMESPACE_ALIAS (newdecl)
1621 && (DECL_NAMESPACE_ALIAS (newdecl)
1622 == DECL_NAMESPACE_ALIAS (olddecl)))
1623 return olddecl;
1624 /* [namespace.alias]
1626 A namespace-name or namespace-alias shall not be declared as
1627 the name of any other entity in the same declarative region.
1628 A namespace-name defined at global scope shall not be
1629 declared as the name of any other entity in any global scope
1630 of the program. */
1631 error ("conflicting declaration of namespace %qD", newdecl);
1632 inform (DECL_SOURCE_LOCATION (olddecl),
1633 "previous declaration of namespace %qD here", olddecl);
1634 return error_mark_node;
1636 else
1638 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1639 if (errmsg)
1641 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1642 if (DECL_NAME (olddecl) != NULL_TREE)
1643 inform (input_location,
1644 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1645 ? G_("%q+#D previously defined here")
1646 : G_("%q+#D previously declared here"), olddecl);
1647 return error_mark_node;
1649 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1650 && DECL_INITIAL (olddecl) != NULL_TREE
1651 && !prototype_p (TREE_TYPE (olddecl))
1652 && prototype_p (TREE_TYPE (newdecl)))
1654 /* Prototype decl follows defn w/o prototype. */
1655 if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1656 "prototype specified for %q#D", newdecl))
1657 inform (DECL_SOURCE_LOCATION (olddecl),
1658 "previous non-prototype definition here");
1660 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1661 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1663 /* [dcl.link]
1664 If two declarations of the same function or object
1665 specify different linkage-specifications ..., the program
1666 is ill-formed.... Except for functions with C++ linkage,
1667 a function declaration without a linkage specification
1668 shall not precede the first linkage specification for
1669 that function. A function can be declared without a
1670 linkage specification after an explicit linkage
1671 specification has been seen; the linkage explicitly
1672 specified in the earlier declaration is not affected by
1673 such a function declaration.
1675 DR 563 raises the question why the restrictions on
1676 functions should not also apply to objects. Older
1677 versions of G++ silently ignore the linkage-specification
1678 for this example:
1680 namespace N {
1681 extern int i;
1682 extern "C" int i;
1685 which is clearly wrong. Therefore, we now treat objects
1686 like functions. */
1687 if (current_lang_depth () == 0)
1689 /* There is no explicit linkage-specification, so we use
1690 the linkage from the previous declaration. */
1691 if (!DECL_LANG_SPECIFIC (newdecl))
1692 retrofit_lang_decl (newdecl);
1693 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1695 else
1697 error ("conflicting declaration of %q#D with %qL linkage",
1698 newdecl, DECL_LANGUAGE (newdecl));
1699 inform (DECL_SOURCE_LOCATION (olddecl),
1700 "previous declaration with %qL linkage",
1701 DECL_LANGUAGE (olddecl));
1705 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1707 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1709 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1710 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1711 int i = 1;
1713 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1714 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1716 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE
1717 && CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (newdecl)))
1719 /* C++11 8.3.6/6.
1720 Default arguments for a member function of a class template
1721 shall be specified on the initial declaration of the member
1722 function within the class template. */
1723 for (; t2 && t2 != void_list_node; t2 = TREE_CHAIN (t2))
1724 if (TREE_PURPOSE (t2))
1726 permerror (input_location,
1727 "redeclaration of %q#D may not have default "
1728 "arguments", newdecl);
1729 break;
1732 else
1734 for (; t1 && t1 != void_list_node;
1735 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1736 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1738 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1739 TREE_PURPOSE (t2)))
1741 if (permerror (input_location,
1742 "default argument given for parameter "
1743 "%d of %q#D", i, newdecl))
1744 inform (DECL_SOURCE_LOCATION (olddecl),
1745 "previous specification in %q#D here",
1746 olddecl);
1748 else
1750 error ("default argument given for parameter %d "
1751 "of %q#D", i, newdecl);
1752 inform (DECL_SOURCE_LOCATION (olddecl),
1753 "previous specification in %q#D here",
1754 olddecl);
1761 /* Do not merge an implicit typedef with an explicit one. In:
1763 class A;
1765 typedef class A A __attribute__ ((foo));
1767 the attribute should apply only to the typedef. */
1768 if (TREE_CODE (olddecl) == TYPE_DECL
1769 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1770 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1771 return NULL_TREE;
1773 /* If new decl is `static' and an `extern' was seen previously,
1774 warn about it. */
1775 warn_extern_redeclared_static (newdecl, olddecl);
1777 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1778 return error_mark_node;
1780 /* We have committed to returning 1 at this point. */
1781 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1783 /* Now that functions must hold information normally held
1784 by field decls, there is extra work to do so that
1785 declaration information does not get destroyed during
1786 definition. */
1787 if (DECL_VINDEX (olddecl))
1788 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1789 if (DECL_CONTEXT (olddecl))
1790 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1791 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1792 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1793 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1794 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1795 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1796 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1797 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1798 SET_OVERLOADED_OPERATOR_CODE
1799 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1800 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1802 /* Optionally warn about more than one declaration for the same
1803 name, but don't warn about a function declaration followed by a
1804 definition. */
1805 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1806 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1807 /* Don't warn about extern decl followed by definition. */
1808 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1809 /* Don't warn about friends, let add_friend take care of it. */
1810 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1811 /* Don't warn about declaration followed by specialization. */
1812 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1813 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1815 if (warning (OPT_Wredundant_decls,
1816 "redundant redeclaration of %qD in same scope",
1817 newdecl))
1818 inform (DECL_SOURCE_LOCATION (olddecl),
1819 "previous declaration of %qD", olddecl);
1822 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1823 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1825 if (DECL_DELETED_FN (newdecl))
1827 error ("deleted definition of %qD", newdecl);
1828 inform (DECL_SOURCE_LOCATION (olddecl),
1829 "previous declaration of %qD", olddecl);
1831 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1835 /* Deal with C++: must preserve virtual function table size. */
1836 if (TREE_CODE (olddecl) == TYPE_DECL)
1838 tree newtype = TREE_TYPE (newdecl);
1839 tree oldtype = TREE_TYPE (olddecl);
1841 if (newtype != error_mark_node && oldtype != error_mark_node
1842 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1843 CLASSTYPE_FRIEND_CLASSES (newtype)
1844 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1846 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1849 /* Copy all the DECL_... slots specified in the new decl
1850 except for any that we copy here from the old type. */
1851 DECL_ATTRIBUTES (newdecl)
1852 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1854 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1856 tree old_result;
1857 tree new_result;
1858 old_result = DECL_TEMPLATE_RESULT (olddecl);
1859 new_result = DECL_TEMPLATE_RESULT (newdecl);
1860 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1861 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1862 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1863 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1865 DECL_ATTRIBUTES (old_result)
1866 = (*targetm.merge_decl_attributes) (old_result, new_result);
1868 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1870 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1871 && DECL_INITIAL (new_result))
1873 if (DECL_INITIAL (old_result))
1874 DECL_UNINLINABLE (old_result) = 1;
1875 else
1876 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1877 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1878 DECL_NOT_REALLY_EXTERN (old_result)
1879 = DECL_NOT_REALLY_EXTERN (new_result);
1880 DECL_INTERFACE_KNOWN (old_result)
1881 = DECL_INTERFACE_KNOWN (new_result);
1882 DECL_DECLARED_INLINE_P (old_result)
1883 = DECL_DECLARED_INLINE_P (new_result);
1884 DECL_DISREGARD_INLINE_LIMITS (old_result)
1885 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1888 else
1890 DECL_DECLARED_INLINE_P (old_result)
1891 |= DECL_DECLARED_INLINE_P (new_result);
1892 DECL_DISREGARD_INLINE_LIMITS (old_result)
1893 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1894 check_redeclaration_exception_specification (newdecl, olddecl);
1898 /* If the new declaration is a definition, update the file and
1899 line information on the declaration, and also make
1900 the old declaration the same definition. */
1901 if (DECL_INITIAL (new_result) != NULL_TREE)
1903 DECL_SOURCE_LOCATION (olddecl)
1904 = DECL_SOURCE_LOCATION (old_result)
1905 = DECL_SOURCE_LOCATION (newdecl);
1906 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1907 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1909 tree parm;
1910 DECL_ARGUMENTS (old_result)
1911 = DECL_ARGUMENTS (new_result);
1912 for (parm = DECL_ARGUMENTS (old_result); parm;
1913 parm = DECL_CHAIN (parm))
1914 DECL_CONTEXT (parm) = old_result;
1918 return olddecl;
1921 if (types_match)
1923 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1924 check_redeclaration_exception_specification (newdecl, olddecl);
1926 /* Automatically handles default parameters. */
1927 tree oldtype = TREE_TYPE (olddecl);
1928 tree newtype;
1930 /* For typedefs use the old type, as the new type's DECL_NAME points
1931 at newdecl, which will be ggc_freed. */
1932 if (TREE_CODE (newdecl) == TYPE_DECL)
1933 newtype = oldtype;
1934 else
1935 /* Merge the data types specified in the two decls. */
1936 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1938 if (VAR_P (newdecl))
1940 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1941 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1942 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1943 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1944 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1945 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1947 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1948 if (DECL_LANG_SPECIFIC (olddecl)
1949 && CP_DECL_THREADPRIVATE_P (olddecl))
1951 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1952 if (!DECL_LANG_SPECIFIC (newdecl))
1953 retrofit_lang_decl (newdecl);
1955 set_decl_tls_model (newdecl, DECL_TLS_MODEL (olddecl));
1956 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1960 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1962 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1963 check_default_args (newdecl);
1965 /* Lay the type out, unless already done. */
1966 if (! same_type_p (newtype, oldtype)
1967 && TREE_TYPE (newdecl) != error_mark_node
1968 && !(processing_template_decl && uses_template_parms (newdecl)))
1969 layout_type (TREE_TYPE (newdecl));
1971 if ((VAR_P (newdecl)
1972 || TREE_CODE (newdecl) == PARM_DECL
1973 || TREE_CODE (newdecl) == RESULT_DECL
1974 || TREE_CODE (newdecl) == FIELD_DECL
1975 || TREE_CODE (newdecl) == TYPE_DECL)
1976 && !(processing_template_decl && uses_template_parms (newdecl)))
1977 layout_decl (newdecl, 0);
1979 /* Merge the type qualifiers. */
1980 if (TREE_READONLY (newdecl))
1981 TREE_READONLY (olddecl) = 1;
1982 if (TREE_THIS_VOLATILE (newdecl))
1983 TREE_THIS_VOLATILE (olddecl) = 1;
1984 if (TREE_NOTHROW (newdecl))
1985 TREE_NOTHROW (olddecl) = 1;
1987 /* Merge deprecatedness. */
1988 if (TREE_DEPRECATED (newdecl))
1989 TREE_DEPRECATED (olddecl) = 1;
1991 /* Preserve function specific target and optimization options */
1992 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1994 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1995 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1996 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1997 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1999 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2000 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2001 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2002 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2005 /* Merge the initialization information. */
2006 if (DECL_INITIAL (newdecl) == NULL_TREE
2007 && DECL_INITIAL (olddecl) != NULL_TREE)
2009 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2010 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2011 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2013 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2014 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2018 /* Merge the section attribute.
2019 We want to issue an error if the sections conflict but that must be
2020 done later in decl_attributes since we are called before attributes
2021 are assigned. */
2022 if ((DECL_EXTERNAL (olddecl) || TREE_PUBLIC (olddecl) || TREE_STATIC (olddecl))
2023 && DECL_SECTION_NAME (newdecl) == NULL
2024 && DECL_SECTION_NAME (olddecl) != NULL)
2025 set_decl_section_name (newdecl, DECL_SECTION_NAME (olddecl));
2027 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2029 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2030 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2031 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2032 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2033 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2034 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2035 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2036 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2037 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2038 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2039 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2040 /* Keep the old RTL. */
2041 COPY_DECL_RTL (olddecl, newdecl);
2043 else if (VAR_P (newdecl)
2044 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2046 /* Keep the old RTL. We cannot keep the old RTL if the old
2047 declaration was for an incomplete object and the new
2048 declaration is not since many attributes of the RTL will
2049 change. */
2050 COPY_DECL_RTL (olddecl, newdecl);
2053 /* If cannot merge, then use the new type and qualifiers,
2054 and don't preserve the old rtl. */
2055 else
2057 /* Clean out any memory we had of the old declaration. */
2058 tree oldstatic = value_member (olddecl, static_aggregates);
2059 if (oldstatic)
2060 TREE_VALUE (oldstatic) = error_mark_node;
2062 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2063 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2064 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2065 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2068 /* Merge the storage class information. */
2069 merge_weak (newdecl, olddecl);
2071 if ((TREE_CODE (olddecl) == FUNCTION_DECL || TREE_CODE (olddecl) == VAR_DECL)
2072 && (DECL_EXTERNAL (olddecl) || TREE_PUBLIC (olddecl) || TREE_STATIC (olddecl))
2073 && DECL_ONE_ONLY (olddecl))
2075 struct symtab_node *symbol;
2076 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2077 symbol = cgraph_node::get_create (newdecl);
2078 else
2079 symbol = varpool_node::get_create (newdecl);
2080 symbol->set_comdat_group (symtab_node::get
2081 (olddecl)->get_comdat_group ());
2084 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2085 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2086 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2087 if (! DECL_EXTERNAL (olddecl))
2088 DECL_EXTERNAL (newdecl) = 0;
2090 new_template_info = NULL_TREE;
2091 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2093 bool new_redefines_gnu_inline = false;
2095 if (new_defines_function
2096 && ((DECL_INTERFACE_KNOWN (olddecl)
2097 && TREE_CODE (olddecl) == FUNCTION_DECL)
2098 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2099 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2100 == FUNCTION_DECL))))
2102 tree fn = olddecl;
2104 if (TREE_CODE (fn) == TEMPLATE_DECL)
2105 fn = DECL_TEMPLATE_RESULT (olddecl);
2107 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2110 if (!new_redefines_gnu_inline)
2112 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2113 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2114 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2116 DECL_TEMPLATE_INSTANTIATED (newdecl)
2117 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2118 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2120 /* If the OLDDECL is an instantiation and/or specialization,
2121 then the NEWDECL must be too. But, it may not yet be marked
2122 as such if the caller has created NEWDECL, but has not yet
2123 figured out that it is a redeclaration. */
2124 if (!DECL_USE_TEMPLATE (newdecl))
2125 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2127 /* Don't really know how much of the language-specific
2128 values we should copy from old to new. */
2129 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2130 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2131 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2132 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2134 if (LANG_DECL_HAS_MIN (newdecl))
2136 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2137 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2138 if (DECL_TEMPLATE_INFO (newdecl))
2139 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2140 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2142 /* Only functions have these fields. */
2143 if (DECL_DECLARES_FUNCTION_P (newdecl))
2145 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2146 olddecl_friend = DECL_FRIEND_P (olddecl);
2147 hidden_friend = (DECL_ANTICIPATED (olddecl)
2148 && DECL_HIDDEN_FRIEND_P (olddecl)
2149 && newdecl_is_friend);
2150 DECL_BEFRIENDING_CLASSES (newdecl)
2151 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2152 DECL_BEFRIENDING_CLASSES (olddecl));
2153 /* DECL_THUNKS is only valid for virtual functions,
2154 otherwise it is a DECL_FRIEND_CONTEXT. */
2155 if (DECL_VIRTUAL_P (newdecl))
2156 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2158 /* Only variables have this field. */
2159 else if (VAR_P (newdecl)
2160 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2161 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2164 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2166 tree parm;
2168 /* Merge parameter attributes. */
2169 tree oldarg, newarg;
2170 for (oldarg = DECL_ARGUMENTS(olddecl),
2171 newarg = DECL_ARGUMENTS(newdecl);
2172 oldarg && newarg;
2173 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2174 DECL_ATTRIBUTES (newarg)
2175 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2176 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2179 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2180 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2182 /* If newdecl is not a specialization, then it is not a
2183 template-related function at all. And that means that we
2184 should have exited above, returning 0. */
2185 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2187 if (DECL_ODR_USED (olddecl))
2188 /* From [temp.expl.spec]:
2190 If a template, a member template or the member of a class
2191 template is explicitly specialized then that
2192 specialization shall be declared before the first use of
2193 that specialization that would cause an implicit
2194 instantiation to take place, in every translation unit in
2195 which such a use occurs. */
2196 error ("explicit specialization of %qD after first use",
2197 olddecl);
2199 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2201 /* Don't propagate visibility from the template to the
2202 specialization here. We'll do that in determine_visibility if
2203 appropriate. */
2204 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2206 /* [temp.expl.spec/14] We don't inline explicit specialization
2207 just because the primary template says so. */
2209 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2210 the always_inline attribute. */
2211 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2212 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2214 if (DECL_DECLARED_INLINE_P (newdecl))
2215 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2216 else
2217 DECL_ATTRIBUTES (newdecl)
2218 = remove_attribute ("always_inline",
2219 DECL_ATTRIBUTES (newdecl));
2222 else if (new_defines_function && DECL_INITIAL (olddecl))
2224 /* Never inline re-defined extern inline functions.
2225 FIXME: this could be better handled by keeping both
2226 function as separate declarations. */
2227 DECL_UNINLINABLE (newdecl) = 1;
2229 else
2231 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2232 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2234 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2236 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2237 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2239 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2240 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2241 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2242 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2245 /* Preserve abstractness on cloned [cd]tors. */
2246 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2248 /* Update newdecl's parms to point at olddecl. */
2249 for (parm = DECL_ARGUMENTS (newdecl); parm;
2250 parm = DECL_CHAIN (parm))
2251 DECL_CONTEXT (parm) = olddecl;
2253 if (! types_match)
2255 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2256 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2257 COPY_DECL_RTL (newdecl, olddecl);
2259 if (! types_match || new_defines_function)
2261 /* These need to be copied so that the names are available.
2262 Note that if the types do match, we'll preserve inline
2263 info and other bits, but if not, we won't. */
2264 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2265 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2267 /* If redeclaring a builtin function, it stays built in
2268 if newdecl is a gnu_inline definition, or if newdecl is just
2269 a declaration. */
2270 if (DECL_BUILT_IN (olddecl)
2271 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2273 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2274 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2275 /* If we're keeping the built-in definition, keep the rtl,
2276 regardless of declaration matches. */
2277 COPY_DECL_RTL (olddecl, newdecl);
2278 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2280 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2281 switch (fncode)
2283 /* If a compatible prototype of these builtin functions
2284 is seen, assume the runtime implements it with the
2285 expected semantics. */
2286 case BUILT_IN_STPCPY:
2287 if (builtin_decl_explicit_p (fncode))
2288 set_builtin_decl_implicit_p (fncode, true);
2289 break;
2290 default:
2291 break;
2295 if (new_defines_function)
2296 /* If defining a function declared with other language
2297 linkage, use the previously declared language linkage. */
2298 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2299 else if (types_match)
2301 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2302 /* Don't clear out the arguments if we're just redeclaring a
2303 function. */
2304 if (DECL_ARGUMENTS (olddecl))
2305 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2308 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2309 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2311 /* Now preserve various other info from the definition. */
2312 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2313 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2314 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2315 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2317 /* Warn about conflicting visibility specifications. */
2318 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2319 && DECL_VISIBILITY_SPECIFIED (newdecl)
2320 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2322 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2323 "%qD: visibility attribute ignored because it "
2324 "conflicts with previous declaration", newdecl))
2325 inform (DECL_SOURCE_LOCATION (olddecl),
2326 "previous declaration of %qD", olddecl);
2328 /* Choose the declaration which specified visibility. */
2329 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2331 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2332 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2334 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2335 so keep this behavior. */
2336 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2338 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2339 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2341 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2342 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2344 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2345 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2347 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2348 if (TREE_CODE (newdecl) == FIELD_DECL)
2349 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2351 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2352 with that from NEWDECL below. */
2353 if (DECL_LANG_SPECIFIC (olddecl))
2355 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2356 != DECL_LANG_SPECIFIC (newdecl));
2357 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2360 /* Merge the USED information. */
2361 if (TREE_USED (olddecl))
2362 TREE_USED (newdecl) = 1;
2363 else if (TREE_USED (newdecl))
2364 TREE_USED (olddecl) = 1;
2365 if (VAR_P (newdecl))
2367 if (DECL_READ_P (olddecl))
2368 DECL_READ_P (newdecl) = 1;
2369 else if (DECL_READ_P (newdecl))
2370 DECL_READ_P (olddecl) = 1;
2372 if (DECL_PRESERVE_P (olddecl))
2373 DECL_PRESERVE_P (newdecl) = 1;
2374 else if (DECL_PRESERVE_P (newdecl))
2375 DECL_PRESERVE_P (olddecl) = 1;
2377 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2378 to olddecl and deleted. */
2379 if (TREE_CODE (newdecl) == FUNCTION_DECL
2380 && DECL_FUNCTION_VERSIONED (olddecl))
2382 /* Set the flag for newdecl so that it gets copied to olddecl. */
2383 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2384 /* newdecl will be purged after copying to olddecl and is no longer
2385 a version. */
2386 cgraph_node::delete_function_version (newdecl);
2389 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2391 int function_size;
2392 struct symtab_node *snode = symtab_node::get (olddecl);
2394 function_size = sizeof (struct tree_decl_common);
2396 memcpy ((char *) olddecl + sizeof (struct tree_common),
2397 (char *) newdecl + sizeof (struct tree_common),
2398 function_size - sizeof (struct tree_common));
2400 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2401 (char *) newdecl + sizeof (struct tree_decl_common),
2402 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2404 /* Preserve symtab node mapping. */
2405 olddecl->decl_with_vis.symtab_node = snode;
2407 if (new_template_info)
2408 /* If newdecl is a template instantiation, it is possible that
2409 the following sequence of events has occurred:
2411 o A friend function was declared in a class template. The
2412 class template was instantiated.
2414 o The instantiation of the friend declaration was
2415 recorded on the instantiation list, and is newdecl.
2417 o Later, however, instantiate_class_template called pushdecl
2418 on the newdecl to perform name injection. But, pushdecl in
2419 turn called duplicate_decls when it discovered that another
2420 declaration of a global function with the same name already
2421 existed.
2423 o Here, in duplicate_decls, we decided to clobber newdecl.
2425 If we're going to do that, we'd better make sure that
2426 olddecl, and not newdecl, is on the list of
2427 instantiations so that if we try to do the instantiation
2428 again we won't get the clobbered declaration. */
2429 reregister_specialization (newdecl,
2430 new_template_info,
2431 olddecl);
2433 else
2435 size_t size = tree_code_size (TREE_CODE (olddecl));
2437 memcpy ((char *) olddecl + sizeof (struct tree_common),
2438 (char *) newdecl + sizeof (struct tree_common),
2439 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2440 switch (TREE_CODE (olddecl))
2442 case LABEL_DECL:
2443 case VAR_DECL:
2444 case RESULT_DECL:
2445 case PARM_DECL:
2446 case FIELD_DECL:
2447 case TYPE_DECL:
2448 case CONST_DECL:
2450 struct symtab_node *snode = NULL;
2452 if (TREE_CODE (olddecl) == VAR_DECL
2453 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl) || DECL_EXTERNAL (olddecl)))
2454 snode = symtab_node::get (olddecl);
2455 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2456 (char *) newdecl + sizeof (struct tree_decl_common),
2457 size - sizeof (struct tree_decl_common)
2458 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2459 if (TREE_CODE (olddecl) == VAR_DECL)
2460 olddecl->decl_with_vis.symtab_node = snode;
2462 break;
2463 default:
2464 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2465 (char *) newdecl + sizeof (struct tree_decl_common),
2466 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2467 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2468 break;
2471 DECL_UID (olddecl) = olddecl_uid;
2472 if (olddecl_friend)
2473 DECL_FRIEND_P (olddecl) = 1;
2474 if (hidden_friend)
2476 DECL_ANTICIPATED (olddecl) = 1;
2477 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2480 /* NEWDECL contains the merged attribute lists.
2481 Update OLDDECL to be the same. */
2482 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2484 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2485 so that encode_section_info has a chance to look at the new decl
2486 flags and attributes. */
2487 if (DECL_RTL_SET_P (olddecl)
2488 && (TREE_CODE (olddecl) == FUNCTION_DECL
2489 || (VAR_P (olddecl)
2490 && TREE_STATIC (olddecl))))
2491 make_decl_rtl (olddecl);
2493 /* The NEWDECL will no longer be needed. Because every out-of-class
2494 declaration of a member results in a call to duplicate_decls,
2495 freeing these nodes represents in a significant savings.
2497 Before releasing the node, be sore to remove function from symbol
2498 table that might have been inserted there to record comdat group.
2499 Be sure to however do not free DECL_STRUCT_FUNCTION becuase this
2500 structure is shared in between newdecl and oldecl. */
2501 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2502 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2503 if (TREE_CODE (newdecl) == FUNCTION_DECL
2504 || TREE_CODE (newdecl) == VAR_DECL)
2506 struct symtab_node *snode = symtab_node::get (newdecl);
2507 if (snode)
2508 snode->remove ();
2510 ggc_free (newdecl);
2512 return olddecl;
2515 /* Return zero if the declaration NEWDECL is valid
2516 when the declaration OLDDECL (assumed to be for the same name)
2517 has already been seen.
2518 Otherwise return an error message format string with a %s
2519 where the identifier should go. */
2521 static const char *
2522 redeclaration_error_message (tree newdecl, tree olddecl)
2524 if (TREE_CODE (newdecl) == TYPE_DECL)
2526 /* Because C++ can put things into name space for free,
2527 constructs like "typedef struct foo { ... } foo"
2528 would look like an erroneous redeclaration. */
2529 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2530 return NULL;
2531 else
2532 return G_("redefinition of %q#D");
2534 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2536 /* If this is a pure function, its olddecl will actually be
2537 the original initialization to `0' (which we force to call
2538 abort()). Don't complain about redefinition in this case. */
2539 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2540 && DECL_INITIAL (olddecl) == NULL_TREE)
2541 return NULL;
2543 /* If both functions come from different namespaces, this is not
2544 a redeclaration - this is a conflict with a used function. */
2545 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2546 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2547 && ! decls_match (olddecl, newdecl))
2548 return G_("%qD conflicts with used function");
2550 /* We'll complain about linkage mismatches in
2551 warn_extern_redeclared_static. */
2553 /* Defining the same name twice is no good. */
2554 if (DECL_INITIAL (olddecl) != NULL_TREE
2555 && DECL_INITIAL (newdecl) != NULL_TREE)
2557 if (DECL_NAME (olddecl) == NULL_TREE)
2558 return G_("%q#D not declared in class");
2559 else if (!GNU_INLINE_P (olddecl)
2560 || GNU_INLINE_P (newdecl))
2561 return G_("redefinition of %q#D");
2564 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2566 bool olda = GNU_INLINE_P (olddecl);
2567 bool newa = GNU_INLINE_P (newdecl);
2569 if (olda != newa)
2571 if (newa)
2572 return G_("%q+D redeclared inline with "
2573 "%<gnu_inline%> attribute");
2574 else
2575 return G_("%q+D redeclared inline without "
2576 "%<gnu_inline%> attribute");
2580 check_abi_tag_redeclaration
2581 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2582 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2584 return NULL;
2586 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2588 tree nt, ot;
2590 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2592 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2593 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2594 return G_("redefinition of %q#D");
2595 return NULL;
2598 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2599 || (DECL_TEMPLATE_RESULT (newdecl)
2600 == DECL_TEMPLATE_RESULT (olddecl)))
2601 return NULL;
2603 nt = DECL_TEMPLATE_RESULT (newdecl);
2604 if (DECL_TEMPLATE_INFO (nt))
2605 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2606 ot = DECL_TEMPLATE_RESULT (olddecl);
2607 if (DECL_TEMPLATE_INFO (ot))
2608 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2609 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2610 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2611 return G_("redefinition of %q#D");
2613 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2615 bool olda = GNU_INLINE_P (ot);
2616 bool newa = GNU_INLINE_P (nt);
2618 if (olda != newa)
2620 if (newa)
2621 return G_("%q+D redeclared inline with "
2622 "%<gnu_inline%> attribute");
2623 else
2624 return G_("%q+D redeclared inline without "
2625 "%<gnu_inline%> attribute");
2629 /* Core issue #226 (C++0x):
2631 If a friend function template declaration specifies a
2632 default template-argument, that declaration shall be a
2633 definition and shall be the only declaration of the
2634 function template in the translation unit. */
2635 if ((cxx_dialect != cxx98)
2636 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2637 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2638 /*is_primary=*/true,
2639 /*is_partial=*/false,
2640 /*is_friend_decl=*/2))
2641 return G_("redeclaration of friend %q#D "
2642 "may not have default template arguments");
2644 return NULL;
2646 else if (VAR_P (newdecl)
2647 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2648 && (! DECL_LANG_SPECIFIC (olddecl)
2649 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2650 || DECL_THREAD_LOCAL_P (newdecl)))
2652 /* Only variables can be thread-local, and all declarations must
2653 agree on this property. */
2654 if (DECL_THREAD_LOCAL_P (newdecl))
2655 return G_("thread-local declaration of %q#D follows "
2656 "non-thread-local declaration");
2657 else
2658 return G_("non-thread-local declaration of %q#D follows "
2659 "thread-local declaration");
2661 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2663 /* The objects have been declared at namespace scope. If either
2664 is a member of an anonymous union, then this is an invalid
2665 redeclaration. For example:
2667 int i;
2668 union { int i; };
2670 is invalid. */
2671 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2672 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2673 return G_("redeclaration of %q#D");
2674 /* If at least one declaration is a reference, there is no
2675 conflict. For example:
2677 int i = 3;
2678 extern int i;
2680 is valid. */
2681 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2682 return NULL;
2683 /* Reject two definitions. */
2684 return G_("redefinition of %q#D");
2686 else
2688 /* Objects declared with block scope: */
2689 /* Reject two definitions, and reject a definition
2690 together with an external reference. */
2691 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2692 return G_("redeclaration of %q#D");
2693 return NULL;
2697 /* Hash and equality functions for the named_label table. */
2699 static hashval_t
2700 named_label_entry_hash (const void *data)
2702 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2703 return DECL_UID (ent->label_decl);
2706 static int
2707 named_label_entry_eq (const void *a, const void *b)
2709 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2710 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2711 return ent_a->label_decl == ent_b->label_decl;
2714 /* Create a new label, named ID. */
2716 static tree
2717 make_label_decl (tree id, int local_p)
2719 struct named_label_entry *ent;
2720 void **slot;
2721 tree decl;
2723 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2725 DECL_CONTEXT (decl) = current_function_decl;
2726 DECL_MODE (decl) = VOIDmode;
2727 C_DECLARED_LABEL_FLAG (decl) = local_p;
2729 /* Say where one reference is to the label, for the sake of the
2730 error if it is not defined. */
2731 DECL_SOURCE_LOCATION (decl) = input_location;
2733 /* Record the fact that this identifier is bound to this label. */
2734 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2736 /* Create the label htab for the function on demand. */
2737 if (!named_labels)
2738 named_labels = htab_create_ggc (13, named_label_entry_hash,
2739 named_label_entry_eq, NULL);
2741 /* Record this label on the list of labels used in this function.
2742 We do this before calling make_label_decl so that we get the
2743 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2744 ent = ggc_cleared_alloc<named_label_entry> ();
2745 ent->label_decl = decl;
2747 slot = htab_find_slot (named_labels, ent, INSERT);
2748 gcc_assert (*slot == NULL);
2749 *slot = ent;
2751 return decl;
2754 /* Look for a label named ID in the current function. If one cannot
2755 be found, create one. (We keep track of used, but undefined,
2756 labels, and complain about them at the end of a function.) */
2758 static tree
2759 lookup_label_1 (tree id)
2761 tree decl;
2763 /* You can't use labels at global scope. */
2764 if (current_function_decl == NULL_TREE)
2766 error ("label %qE referenced outside of any function", id);
2767 return NULL_TREE;
2770 /* See if we've already got this label. */
2771 decl = IDENTIFIER_LABEL_VALUE (id);
2772 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2773 return decl;
2775 decl = make_label_decl (id, /*local_p=*/0);
2776 return decl;
2779 /* Wrapper for lookup_label_1. */
2781 tree
2782 lookup_label (tree id)
2784 tree ret;
2785 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2786 ret = lookup_label_1 (id);
2787 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2788 return ret;
2791 /* Declare a local label named ID. */
2793 tree
2794 declare_local_label (tree id)
2796 tree decl;
2797 cp_label_binding bind;
2799 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2800 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2801 bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
2803 decl = make_label_decl (id, /*local_p=*/1);
2804 bind.label = decl;
2805 vec_safe_push (current_binding_level->shadowed_labels, bind);
2807 return decl;
2810 /* Returns nonzero if it is ill-formed to jump past the declaration of
2811 DECL. Returns 2 if it's also a real problem. */
2813 static int
2814 decl_jump_unsafe (tree decl)
2816 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2817 with automatic storage duration is not in scope to a point where it is
2818 in scope is ill-formed unless the variable has scalar type, class type
2819 with a trivial default constructor and a trivial destructor, a
2820 cv-qualified version of one of these types, or an array of one of the
2821 preceding types and is declared without an initializer (8.5). */
2822 tree type = TREE_TYPE (decl);
2824 if (!VAR_P (decl) || TREE_STATIC (decl)
2825 || type == error_mark_node)
2826 return 0;
2828 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
2829 || variably_modified_type_p (type, NULL_TREE))
2830 return 2;
2832 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2833 return 1;
2835 return 0;
2838 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2840 static void
2841 identify_goto (tree decl, const location_t *locus)
2843 if (decl)
2844 permerror (input_location, "jump to label %qD", decl);
2845 else
2846 permerror (input_location, "jump to case label");
2847 if (locus)
2848 permerror (*locus, " from here");
2851 /* Check that a single previously seen jump to a newly defined label
2852 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2853 the jump context; NAMES are the names in scope in LEVEL at the jump
2854 context; LOCUS is the source position of the jump or 0. Returns
2855 true if all is well. */
2857 static bool
2858 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2859 bool exited_omp, const location_t *locus)
2861 cp_binding_level *b;
2862 bool identified = false, saw_eh = false, saw_omp = false;
2864 if (exited_omp)
2866 identify_goto (decl, locus);
2867 error (" exits OpenMP structured block");
2868 identified = saw_omp = true;
2871 for (b = current_binding_level; b ; b = b->level_chain)
2873 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2875 for (new_decls = b->names; new_decls != old_decls;
2876 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2877 : TREE_CHAIN (new_decls)))
2879 int problem = decl_jump_unsafe (new_decls);
2880 if (! problem)
2881 continue;
2883 if (!identified)
2885 identify_goto (decl, locus);
2886 identified = true;
2888 if (problem > 1)
2889 error (" crosses initialization of %q+#D", new_decls);
2890 else
2891 permerror (input_location, " enters scope of %q+#D which has "
2892 "non-trivial destructor", new_decls);
2895 if (b == level)
2896 break;
2897 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2899 if (!identified)
2901 identify_goto (decl, locus);
2902 identified = true;
2904 if (b->kind == sk_try)
2905 error (" enters try block");
2906 else
2907 error (" enters catch block");
2908 saw_eh = true;
2910 if (b->kind == sk_omp && !saw_omp)
2912 if (!identified)
2914 identify_goto (decl, locus);
2915 identified = true;
2917 error (" enters OpenMP structured block");
2918 saw_omp = true;
2922 return !identified;
2925 static void
2926 check_previous_goto (tree decl, struct named_label_use_entry *use)
2928 check_previous_goto_1 (decl, use->binding_level,
2929 use->names_in_scope, use->in_omp_scope,
2930 &use->o_goto_locus);
2933 static bool
2934 check_switch_goto (cp_binding_level* level)
2936 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2939 /* Check that a new jump to a label DECL is OK. Called by
2940 finish_goto_stmt. */
2942 void
2943 check_goto (tree decl)
2945 struct named_label_entry *ent, dummy;
2946 bool saw_catch = false, identified = false;
2947 tree bad;
2948 unsigned ix;
2950 /* We can't know where a computed goto is jumping.
2951 So we assume that it's OK. */
2952 if (TREE_CODE (decl) != LABEL_DECL)
2953 return;
2955 /* We didn't record any information about this label when we created it,
2956 and there's not much point since it's trivial to analyze as a return. */
2957 if (decl == cdtor_label)
2958 return;
2960 dummy.label_decl = decl;
2961 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2962 gcc_assert (ent != NULL);
2964 /* If the label hasn't been defined yet, defer checking. */
2965 if (! DECL_INITIAL (decl))
2967 struct named_label_use_entry *new_use;
2969 /* Don't bother creating another use if the last goto had the
2970 same data, and will therefore create the same set of errors. */
2971 if (ent->uses
2972 && ent->uses->names_in_scope == current_binding_level->names)
2973 return;
2975 new_use = ggc_alloc<named_label_use_entry> ();
2976 new_use->binding_level = current_binding_level;
2977 new_use->names_in_scope = current_binding_level->names;
2978 new_use->o_goto_locus = input_location;
2979 new_use->in_omp_scope = false;
2981 new_use->next = ent->uses;
2982 ent->uses = new_use;
2983 return;
2986 if (ent->in_try_scope || ent->in_catch_scope
2987 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
2989 permerror (input_location, "jump to label %q+D", decl);
2990 permerror (input_location, " from here");
2991 identified = true;
2994 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
2996 int u = decl_jump_unsafe (bad);
2998 if (u > 1 && DECL_ARTIFICIAL (bad))
3000 /* Can't skip init of __exception_info. */
3001 error_at (DECL_SOURCE_LOCATION (bad), " enters catch block");
3002 saw_catch = true;
3004 else if (u > 1)
3005 error (" skips initialization of %q+#D", bad);
3006 else
3007 permerror (input_location, " enters scope of %q+#D which has "
3008 "non-trivial destructor", bad);
3011 if (ent->in_try_scope)
3012 error (" enters try block");
3013 else if (ent->in_catch_scope && !saw_catch)
3014 error (" enters catch block");
3016 if (ent->in_omp_scope)
3017 error (" enters OpenMP structured block");
3018 else if (flag_openmp)
3020 cp_binding_level *b;
3021 for (b = current_binding_level; b ; b = b->level_chain)
3023 if (b == ent->binding_level)
3024 break;
3025 if (b->kind == sk_omp)
3027 if (!identified)
3029 permerror (input_location, "jump to label %q+D", decl);
3030 permerror (input_location, " from here");
3031 identified = true;
3033 error (" exits OpenMP structured block");
3034 break;
3040 /* Check that a return is ok wrt OpenMP structured blocks.
3041 Called by finish_return_stmt. Returns true if all is well. */
3043 bool
3044 check_omp_return (void)
3046 cp_binding_level *b;
3047 for (b = current_binding_level; b ; b = b->level_chain)
3048 if (b->kind == sk_omp)
3050 error ("invalid exit from OpenMP structured block");
3051 return false;
3053 else if (b->kind == sk_function_parms)
3054 break;
3055 return true;
3058 /* Define a label, specifying the location in the source file.
3059 Return the LABEL_DECL node for the label. */
3061 static tree
3062 define_label_1 (location_t location, tree name)
3064 struct named_label_entry *ent, dummy;
3065 cp_binding_level *p;
3066 tree decl;
3068 decl = lookup_label (name);
3070 dummy.label_decl = decl;
3071 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
3072 gcc_assert (ent != NULL);
3074 /* After labels, make any new cleanups in the function go into their
3075 own new (temporary) binding contour. */
3076 for (p = current_binding_level;
3077 p->kind != sk_function_parms;
3078 p = p->level_chain)
3079 p->more_cleanups_ok = 0;
3081 if (name == get_identifier ("wchar_t"))
3082 permerror (input_location, "label named wchar_t");
3084 if (DECL_INITIAL (decl) != NULL_TREE)
3086 error ("duplicate label %qD", decl);
3087 return error_mark_node;
3089 else
3091 struct named_label_use_entry *use;
3093 /* Mark label as having been defined. */
3094 DECL_INITIAL (decl) = error_mark_node;
3095 /* Say where in the source. */
3096 DECL_SOURCE_LOCATION (decl) = location;
3098 ent->binding_level = current_binding_level;
3099 ent->names_in_scope = current_binding_level->names;
3101 for (use = ent->uses; use ; use = use->next)
3102 check_previous_goto (decl, use);
3103 ent->uses = NULL;
3106 return decl;
3109 /* Wrapper for define_label_1. */
3111 tree
3112 define_label (location_t location, tree name)
3114 tree ret;
3115 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3116 ret = define_label_1 (location, name);
3117 timevar_cond_stop (TV_NAME_LOOKUP, running);
3118 return ret;
3122 struct cp_switch
3124 cp_binding_level *level;
3125 struct cp_switch *next;
3126 /* The SWITCH_STMT being built. */
3127 tree switch_stmt;
3128 /* A splay-tree mapping the low element of a case range to the high
3129 element, or NULL_TREE if there is no high element. Used to
3130 determine whether or not a new case label duplicates an old case
3131 label. We need a tree, rather than simply a hash table, because
3132 of the GNU case range extension. */
3133 splay_tree cases;
3136 /* A stack of the currently active switch statements. The innermost
3137 switch statement is on the top of the stack. There is no need to
3138 mark the stack for garbage collection because it is only active
3139 during the processing of the body of a function, and we never
3140 collect at that point. */
3142 static struct cp_switch *switch_stack;
3144 /* Called right after a switch-statement condition is parsed.
3145 SWITCH_STMT is the switch statement being parsed. */
3147 void
3148 push_switch (tree switch_stmt)
3150 struct cp_switch *p = XNEW (struct cp_switch);
3151 p->level = current_binding_level;
3152 p->next = switch_stack;
3153 p->switch_stmt = switch_stmt;
3154 p->cases = splay_tree_new (case_compare, NULL, NULL);
3155 switch_stack = p;
3158 void
3159 pop_switch (void)
3161 struct cp_switch *cs = switch_stack;
3162 location_t switch_location;
3164 /* Emit warnings as needed. */
3165 switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3166 if (!processing_template_decl)
3167 c_do_switch_warnings (cs->cases, switch_location,
3168 SWITCH_STMT_TYPE (cs->switch_stmt),
3169 SWITCH_STMT_COND (cs->switch_stmt));
3171 splay_tree_delete (cs->cases);
3172 switch_stack = switch_stack->next;
3173 free (cs);
3176 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3177 condition. Note that if TYPE and VALUE are already integral we don't
3178 really do the conversion because the language-independent
3179 warning/optimization code will work better that way. */
3181 static tree
3182 case_conversion (tree type, tree value)
3184 if (value == NULL_TREE)
3185 return value;
3187 if (cxx_dialect >= cxx11
3188 && (SCOPED_ENUM_P (type)
3189 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3191 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3192 type = type_promotes_to (type);
3193 value = (perform_implicit_conversion_flags
3194 (type, value, tf_warning_or_error,
3195 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3197 return cxx_constant_value (value);
3200 /* Note that we've seen a definition of a case label, and complain if this
3201 is a bad place for one. */
3203 tree
3204 finish_case_label (location_t loc, tree low_value, tree high_value)
3206 tree cond, r;
3207 cp_binding_level *p;
3208 tree type;
3210 if (processing_template_decl)
3212 tree label;
3214 /* For templates, just add the case label; we'll do semantic
3215 analysis at instantiation-time. */
3216 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3217 return add_stmt (build_case_label (low_value, high_value, label));
3220 /* Find the condition on which this switch statement depends. */
3221 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3222 if (cond && TREE_CODE (cond) == TREE_LIST)
3223 cond = TREE_VALUE (cond);
3225 if (!check_switch_goto (switch_stack->level))
3226 return error_mark_node;
3228 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3230 low_value = case_conversion (type, low_value);
3231 high_value = case_conversion (type, high_value);
3233 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3234 low_value, high_value);
3236 /* After labels, make any new cleanups in the function go into their
3237 own new (temporary) binding contour. */
3238 for (p = current_binding_level;
3239 p->kind != sk_function_parms;
3240 p = p->level_chain)
3241 p->more_cleanups_ok = 0;
3243 return r;
3246 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
3248 static hashval_t
3249 typename_hash (const void* k)
3251 hashval_t hash;
3252 const_tree const t = (const_tree) k;
3254 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3255 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3257 return hash;
3260 typedef struct typename_info {
3261 tree scope;
3262 tree name;
3263 tree template_id;
3264 bool enum_p;
3265 bool class_p;
3266 } typename_info;
3268 /* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
3269 really of type `typename_info*' */
3271 static int
3272 typename_compare (const void * k1, const void * k2)
3274 const_tree const t1 = (const_tree) k1;
3275 const typename_info *const t2 = (const typename_info *) k2;
3277 return (TYPE_IDENTIFIER (t1) == t2->name
3278 && TYPE_CONTEXT (t1) == t2->scope
3279 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3280 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3281 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3284 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3285 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3287 Returns the new TYPENAME_TYPE. */
3289 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3291 static tree
3292 build_typename_type (tree context, tree name, tree fullname,
3293 enum tag_types tag_type)
3295 tree t;
3296 tree d;
3297 typename_info ti;
3298 void **e;
3299 hashval_t hash;
3301 if (typename_htab == NULL)
3302 typename_htab = htab_create_ggc (61, &typename_hash,
3303 &typename_compare, NULL);
3305 ti.scope = FROB_CONTEXT (context);
3306 ti.name = name;
3307 ti.template_id = fullname;
3308 ti.enum_p = tag_type == enum_type;
3309 ti.class_p = (tag_type == class_type
3310 || tag_type == record_type
3311 || tag_type == union_type);
3312 hash = (htab_hash_pointer (ti.scope)
3313 ^ htab_hash_pointer (ti.name));
3315 /* See if we already have this type. */
3316 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3317 if (*e)
3318 t = (tree) *e;
3319 else
3321 /* Build the TYPENAME_TYPE. */
3322 t = cxx_make_type (TYPENAME_TYPE);
3323 TYPE_CONTEXT (t) = ti.scope;
3324 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3325 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3326 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3328 /* Build the corresponding TYPE_DECL. */
3329 d = build_decl (input_location, TYPE_DECL, name, t);
3330 TYPE_NAME (TREE_TYPE (d)) = d;
3331 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3332 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3333 DECL_ARTIFICIAL (d) = 1;
3335 /* Store it in the hash table. */
3336 *e = t;
3338 /* TYPENAME_TYPEs must always be compared structurally, because
3339 they may or may not resolve down to another type depending on
3340 the currently open classes. */
3341 SET_TYPE_STRUCTURAL_EQUALITY (t);
3344 return t;
3347 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3348 provided to name the type. Returns an appropriate type, unless an
3349 error occurs, in which case error_mark_node is returned. If we
3350 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3351 return that, rather than the _TYPE it corresponds to, in other
3352 cases we look through the type decl. If TF_ERROR is set, complain
3353 about errors, otherwise be quiet. */
3355 tree
3356 make_typename_type (tree context, tree name, enum tag_types tag_type,
3357 tsubst_flags_t complain)
3359 tree fullname;
3360 tree t;
3361 bool want_template;
3363 if (name == error_mark_node
3364 || context == NULL_TREE
3365 || context == error_mark_node)
3366 return error_mark_node;
3368 if (TYPE_P (name))
3370 if (!(TYPE_LANG_SPECIFIC (name)
3371 && (CLASSTYPE_IS_TEMPLATE (name)
3372 || CLASSTYPE_USE_TEMPLATE (name))))
3373 name = TYPE_IDENTIFIER (name);
3374 else
3375 /* Create a TEMPLATE_ID_EXPR for the type. */
3376 name = build_nt (TEMPLATE_ID_EXPR,
3377 CLASSTYPE_TI_TEMPLATE (name),
3378 CLASSTYPE_TI_ARGS (name));
3380 else if (TREE_CODE (name) == TYPE_DECL)
3381 name = DECL_NAME (name);
3383 fullname = name;
3385 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3387 name = TREE_OPERAND (name, 0);
3388 if (TREE_CODE (name) == TEMPLATE_DECL)
3389 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3390 else if (TREE_CODE (name) == OVERLOAD)
3392 if (complain & tf_error)
3393 error ("%qD is not a type", name);
3394 return error_mark_node;
3397 if (TREE_CODE (name) == TEMPLATE_DECL)
3399 if (complain & tf_error)
3400 error ("%qD used without template parameters", name);
3401 return error_mark_node;
3403 gcc_assert (identifier_p (name));
3404 gcc_assert (TYPE_P (context));
3406 if (!MAYBE_CLASS_TYPE_P (context))
3408 if (complain & tf_error)
3409 error ("%q#T is not a class", context);
3410 return error_mark_node;
3413 /* When the CONTEXT is a dependent type, NAME could refer to a
3414 dependent base class of CONTEXT. But look inside it anyway
3415 if CONTEXT is a currently open scope, in case it refers to a
3416 member of the current instantiation or a non-dependent base;
3417 lookup will stop when we hit a dependent base. */
3418 if (!dependent_scope_p (context))
3419 /* We should only set WANT_TYPE when we're a nested typename type.
3420 Then we can give better diagnostics if we find a non-type. */
3421 t = lookup_field (context, name, 2, /*want_type=*/true);
3422 else
3423 t = NULL_TREE;
3425 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3426 return build_typename_type (context, name, fullname, tag_type);
3428 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3430 if (!t)
3432 if (complain & tf_error)
3433 error (want_template ? G_("no class template named %q#T in %q#T")
3434 : G_("no type named %q#T in %q#T"), name, context);
3435 return error_mark_node;
3438 /* Pull out the template from an injected-class-name (or multiple). */
3439 if (want_template)
3440 t = maybe_get_template_decl_from_type_decl (t);
3442 if (TREE_CODE (t) == TREE_LIST)
3444 if (complain & tf_error)
3446 error ("lookup of %qT in %qT is ambiguous", name, context);
3447 print_candidates (t);
3449 return error_mark_node;
3452 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3454 if (complain & tf_error)
3455 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3456 context, name, t);
3457 return error_mark_node;
3459 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3461 if (complain & tf_error)
3462 error ("%<typename %T::%D%> names %q#T, which is not a type",
3463 context, name, t);
3464 return error_mark_node;
3467 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3468 return error_mark_node;
3470 /* If we are currently parsing a template and if T is a typedef accessed
3471 through CONTEXT then we need to remember and check access of T at
3472 template instantiation time. */
3473 add_typedef_to_current_template_for_access_check (t, context, input_location);
3475 if (want_template)
3476 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3477 NULL_TREE, context,
3478 /*entering_scope=*/0,
3479 tf_warning_or_error | tf_user);
3481 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3482 t = TREE_TYPE (t);
3484 maybe_record_typedef_use (t);
3486 return t;
3489 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3490 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3491 in which case error_mark_node is returned.
3493 If PARM_LIST is non-NULL, also make sure that the template parameter
3494 list of TEMPLATE_DECL matches.
3496 If COMPLAIN zero, don't complain about any errors that occur. */
3498 tree
3499 make_unbound_class_template (tree context, tree name, tree parm_list,
3500 tsubst_flags_t complain)
3502 tree t;
3503 tree d;
3505 if (TYPE_P (name))
3506 name = TYPE_IDENTIFIER (name);
3507 else if (DECL_P (name))
3508 name = DECL_NAME (name);
3509 gcc_assert (identifier_p (name));
3511 if (!dependent_type_p (context)
3512 || currently_open_class (context))
3514 tree tmpl = NULL_TREE;
3516 if (MAYBE_CLASS_TYPE_P (context))
3517 tmpl = lookup_field (context, name, 0, false);
3519 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3520 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3522 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3524 if (complain & tf_error)
3525 error ("no class template named %q#T in %q#T", name, context);
3526 return error_mark_node;
3529 if (parm_list
3530 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3532 if (complain & tf_error)
3534 error ("template parameters do not match template %qD", tmpl);
3535 inform (DECL_SOURCE_LOCATION (tmpl),
3536 "%qD declared here", tmpl);
3538 return error_mark_node;
3541 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3542 complain))
3543 return error_mark_node;
3545 return tmpl;
3548 /* Build the UNBOUND_CLASS_TEMPLATE. */
3549 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3550 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3551 TREE_TYPE (t) = NULL_TREE;
3552 SET_TYPE_STRUCTURAL_EQUALITY (t);
3554 /* Build the corresponding TEMPLATE_DECL. */
3555 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3556 TYPE_NAME (TREE_TYPE (d)) = d;
3557 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3558 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3559 DECL_ARTIFICIAL (d) = 1;
3560 DECL_TEMPLATE_PARMS (d) = parm_list;
3562 return t;
3567 /* Push the declarations of builtin types into the namespace.
3568 RID_INDEX is the index of the builtin type in the array
3569 RID_POINTERS. NAME is the name used when looking up the builtin
3570 type. TYPE is the _TYPE node for the builtin type. */
3572 void
3573 record_builtin_type (enum rid rid_index,
3574 const char* name,
3575 tree type)
3577 tree rname = NULL_TREE, tname = NULL_TREE;
3578 tree tdecl = NULL_TREE;
3580 if ((int) rid_index < (int) RID_MAX)
3581 rname = ridpointers[(int) rid_index];
3582 if (name)
3583 tname = get_identifier (name);
3585 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3586 eliminated. Built-in types should not be looked up name; their
3587 names are keywords that the parser can recognize. However, there
3588 is code in c-common.c that uses identifier_global_value to look
3589 up built-in types by name. */
3590 if (tname)
3592 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3593 DECL_ARTIFICIAL (tdecl) = 1;
3594 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3596 if (rname)
3598 if (!tdecl)
3600 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3601 DECL_ARTIFICIAL (tdecl) = 1;
3603 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3606 if (!TYPE_NAME (type))
3607 TYPE_NAME (type) = tdecl;
3609 if (tdecl)
3610 debug_hooks->type_decl (tdecl, 0);
3613 /* Record one of the standard Java types.
3614 * Declare it as having the given NAME.
3615 * If SIZE > 0, it is the size of one of the integral types;
3616 * otherwise it is the negative of the size of one of the other types. */
3618 static tree
3619 record_builtin_java_type (const char* name, int size)
3621 tree type, decl;
3622 if (size > 0)
3624 type = build_nonstandard_integer_type (size, 0);
3625 type = build_distinct_type_copy (type);
3627 else if (size > -32)
3629 tree stype;
3630 /* "__java_char" or ""__java_boolean". */
3631 type = build_nonstandard_integer_type (-size, 1);
3632 type = build_distinct_type_copy (type);
3633 /* Get the signed type cached and attached to the unsigned type,
3634 so it doesn't get garbage-collected at "random" times,
3635 causing potential codegen differences out of different UIDs
3636 and different alias set numbers. */
3637 stype = build_nonstandard_integer_type (-size, 0);
3638 stype = build_distinct_type_copy (stype);
3639 TREE_CHAIN (type) = stype;
3640 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3642 else
3643 { /* "__java_float" or ""__java_double". */
3644 type = make_node (REAL_TYPE);
3645 TYPE_PRECISION (type) = - size;
3646 layout_type (type);
3648 record_builtin_type (RID_MAX, name, type);
3649 decl = TYPE_NAME (type);
3651 /* Suppress generate debug symbol entries for these types,
3652 since for normal C++ they are just clutter.
3653 However, push_lang_context undoes this if extern "Java" is seen. */
3654 DECL_IGNORED_P (decl) = 1;
3656 TYPE_FOR_JAVA (type) = 1;
3657 return type;
3660 /* Push a type into the namespace so that the back ends ignore it. */
3662 static void
3663 record_unknown_type (tree type, const char* name)
3665 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3666 TYPE_DECL, get_identifier (name), type));
3667 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3668 DECL_IGNORED_P (decl) = 1;
3669 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3670 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3671 TYPE_ALIGN (type) = 1;
3672 TYPE_USER_ALIGN (type) = 0;
3673 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3676 /* A string for which we should create an IDENTIFIER_NODE at
3677 startup. */
3679 typedef struct predefined_identifier
3681 /* The name of the identifier. */
3682 const char *const name;
3683 /* The place where the IDENTIFIER_NODE should be stored. */
3684 tree *const node;
3685 /* Nonzero if this is the name of a constructor or destructor. */
3686 const int ctor_or_dtor_p;
3687 } predefined_identifier;
3689 /* Create all the predefined identifiers. */
3691 static void
3692 initialize_predefined_identifiers (void)
3694 const predefined_identifier *pid;
3696 /* A table of identifiers to create at startup. */
3697 static const predefined_identifier predefined_identifiers[] = {
3698 { "C++", &lang_name_cplusplus, 0 },
3699 { "C", &lang_name_c, 0 },
3700 { "Java", &lang_name_java, 0 },
3701 /* Some of these names have a trailing space so that it is
3702 impossible for them to conflict with names written by users. */
3703 { "__ct ", &ctor_identifier, 1 },
3704 { "__base_ctor ", &base_ctor_identifier, 1 },
3705 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3706 { "__dt ", &dtor_identifier, 1 },
3707 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3708 { "__base_dtor ", &base_dtor_identifier, 1 },
3709 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3710 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3711 { "nelts", &nelts_identifier, 0 },
3712 { THIS_NAME, &this_identifier, 0 },
3713 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3714 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3715 { "_vptr", &vptr_identifier, 0 },
3716 { "__vtt_parm", &vtt_parm_identifier, 0 },
3717 { "::", &global_scope_name, 0 },
3718 { "std", &std_identifier, 0 },
3719 { NULL, NULL, 0 }
3722 for (pid = predefined_identifiers; pid->name; ++pid)
3724 *pid->node = get_identifier (pid->name);
3725 if (pid->ctor_or_dtor_p)
3726 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3730 /* Create the predefined scalar types of C,
3731 and some nodes representing standard constants (0, 1, (void *)0).
3732 Initialize the global binding level.
3733 Make definitions for built-in primitive functions. */
3735 void
3736 cxx_init_decl_processing (void)
3738 tree void_ftype;
3739 tree void_ftype_ptr;
3741 /* Create all the identifiers we need. */
3742 initialize_predefined_identifiers ();
3744 /* Create the global variables. */
3745 push_to_top_level ();
3747 current_function_decl = NULL_TREE;
3748 current_binding_level = NULL;
3749 /* Enter the global namespace. */
3750 gcc_assert (global_namespace == NULL_TREE);
3751 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3752 void_type_node);
3753 DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3754 TREE_PUBLIC (global_namespace) = 1;
3755 begin_scope (sk_namespace, global_namespace);
3757 if (flag_visibility_ms_compat)
3758 default_visibility = VISIBILITY_HIDDEN;
3760 /* Initially, C. */
3761 current_lang_name = lang_name_c;
3763 /* Create the `std' namespace. */
3764 push_namespace (std_identifier);
3765 std_node = current_namespace;
3766 pop_namespace ();
3768 c_common_nodes_and_builtins ();
3770 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3771 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3772 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3773 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3774 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3775 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3776 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3777 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3779 integer_two_node = build_int_cst (NULL_TREE, 2);
3781 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3782 truthvalue_type_node = boolean_type_node;
3783 truthvalue_false_node = boolean_false_node;
3784 truthvalue_true_node = boolean_true_node;
3786 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3787 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3788 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3790 #if 0
3791 record_builtin_type (RID_MAX, NULL, string_type_node);
3792 #endif
3794 delta_type_node = ptrdiff_type_node;
3795 vtable_index_type = ptrdiff_type_node;
3797 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3798 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3799 void_ftype_ptr = build_function_type_list (void_type_node,
3800 ptr_type_node, NULL_TREE);
3801 void_ftype_ptr
3802 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3804 /* C++ extensions */
3806 unknown_type_node = make_node (LANG_TYPE);
3807 record_unknown_type (unknown_type_node, "unknown type");
3809 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3810 TREE_TYPE (unknown_type_node) = unknown_type_node;
3812 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3813 result. */
3814 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3815 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3817 init_list_type_node = make_node (LANG_TYPE);
3818 record_unknown_type (init_list_type_node, "init list");
3821 /* Make sure we get a unique function type, so we can give
3822 its pointer type a name. (This wins for gdb.) */
3823 tree vfunc_type = make_node (FUNCTION_TYPE);
3824 TREE_TYPE (vfunc_type) = integer_type_node;
3825 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3826 layout_type (vfunc_type);
3828 vtable_entry_type = build_pointer_type (vfunc_type);
3830 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3832 vtbl_type_node
3833 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3834 layout_type (vtbl_type_node);
3835 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3836 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3837 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3838 layout_type (vtbl_ptr_type_node);
3839 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3841 push_namespace (get_identifier ("__cxxabiv1"));
3842 abi_node = current_namespace;
3843 pop_namespace ();
3845 global_type_node = make_node (LANG_TYPE);
3846 record_unknown_type (global_type_node, "global type");
3848 /* Now, C++. */
3849 current_lang_name = lang_name_cplusplus;
3852 tree newattrs, extvisattr;
3853 tree newtype, deltype;
3854 tree ptr_ftype_sizetype;
3855 tree new_eh_spec;
3857 ptr_ftype_sizetype
3858 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3859 if (cxx_dialect == cxx98)
3861 tree bad_alloc_id;
3862 tree bad_alloc_type_node;
3863 tree bad_alloc_decl;
3865 push_namespace (std_identifier);
3866 bad_alloc_id = get_identifier ("bad_alloc");
3867 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3868 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3869 bad_alloc_decl
3870 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3871 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3872 pop_namespace ();
3874 new_eh_spec
3875 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3877 else
3878 new_eh_spec = noexcept_false_spec;
3880 /* Ensure attribs.c is initialized. */
3881 init_attributes ();
3882 extvisattr = build_tree_list (get_identifier ("externally_visible"),
3883 NULL_TREE);
3884 newattrs = tree_cons (get_identifier ("alloc_size"),
3885 build_tree_list (NULL_TREE, integer_one_node),
3886 extvisattr);
3887 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3888 newtype = build_exception_variant (newtype, new_eh_spec);
3889 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3890 deltype = build_exception_variant (deltype, empty_except_spec);
3891 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
3892 DECL_IS_MALLOC (opnew) = 1;
3893 DECL_IS_OPERATOR_NEW (opnew) = 1;
3894 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
3895 DECL_IS_MALLOC (opnew) = 1;
3896 DECL_IS_OPERATOR_NEW (opnew) = 1;
3897 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
3898 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
3900 nullptr_type_node = make_node (NULLPTR_TYPE);
3901 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3902 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3903 TYPE_UNSIGNED (nullptr_type_node) = 1;
3904 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3905 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3906 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3907 nullptr_node = build_int_cst (nullptr_type_node, 0);
3910 abort_fndecl
3911 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
3912 ECF_NORETURN | ECF_NOTHROW);
3914 /* Perform other language dependent initializations. */
3915 init_class_processing ();
3916 init_rtti_processing ();
3917 init_template_processing ();
3919 if (flag_exceptions)
3920 init_exception_processing ();
3922 if (! supports_one_only ())
3923 flag_weak = 0;
3925 make_fname_decl = cp_make_fname_decl;
3926 start_fname_decls ();
3928 /* Show we use EH for cleanups. */
3929 if (flag_exceptions)
3930 using_eh_for_cleanups ();
3933 /* Generate an initializer for a function naming variable from
3934 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3935 filled in with the type of the init. */
3937 tree
3938 cp_fname_init (const char* name, tree *type_p)
3940 tree domain = NULL_TREE;
3941 tree type;
3942 tree init = NULL_TREE;
3943 size_t length = 0;
3945 if (name)
3947 length = strlen (name);
3948 domain = build_index_type (size_int (length));
3949 init = build_string (length + 1, name);
3952 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3953 type = build_cplus_array_type (type, domain);
3955 *type_p = type;
3957 if (init)
3958 TREE_TYPE (init) = type;
3959 else
3960 init = error_mark_node;
3962 return init;
3965 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3966 the decl, LOC is the location to give the decl, NAME is the
3967 initialization string and TYPE_DEP indicates whether NAME depended
3968 on the type of the function. We make use of that to detect
3969 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3970 at the point of first use, so we mustn't push the decl now. */
3972 static tree
3973 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3975 const char *const name = (type_dep && processing_template_decl
3976 ? NULL : fname_as_string (type_dep));
3977 tree type;
3978 tree init = cp_fname_init (name, &type);
3979 tree decl = build_decl (loc, VAR_DECL, id, type);
3981 if (name)
3982 free (CONST_CAST (char *, name));
3984 /* As we're using pushdecl_with_scope, we must set the context. */
3985 DECL_CONTEXT (decl) = current_function_decl;
3987 TREE_STATIC (decl) = 1;
3988 TREE_READONLY (decl) = 1;
3989 DECL_ARTIFICIAL (decl) = 1;
3991 TREE_USED (decl) = 1;
3993 if (current_function_decl)
3995 cp_binding_level *b = current_binding_level;
3996 if (b->kind == sk_function_parms)
3997 return error_mark_node;
3998 while (b->level_chain->kind != sk_function_parms)
3999 b = b->level_chain;
4000 pushdecl_with_scope (decl, b, /*is_friend=*/false);
4001 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4002 LOOKUP_ONLYCONVERTING);
4004 else
4006 DECL_THIS_STATIC (decl) = true;
4007 pushdecl_top_level_and_finish (decl, init);
4010 return decl;
4013 static tree
4014 builtin_function_1 (tree decl, tree context, bool is_global)
4016 tree id = DECL_NAME (decl);
4017 const char *name = IDENTIFIER_POINTER (id);
4019 retrofit_lang_decl (decl);
4021 DECL_ARTIFICIAL (decl) = 1;
4022 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
4023 SET_DECL_LANGUAGE (decl, lang_c);
4024 /* Runtime library routines are, by definition, available in an
4025 external shared object. */
4026 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4027 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4029 DECL_CONTEXT (decl) = context;
4031 if (is_global)
4032 pushdecl_top_level (decl);
4033 else
4034 pushdecl (decl);
4036 /* A function in the user's namespace should have an explicit
4037 declaration before it is used. Mark the built-in function as
4038 anticipated but not actually declared. */
4039 if (name[0] != '_' || name[1] != '_')
4040 DECL_ANTICIPATED (decl) = 1;
4041 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4043 size_t len = strlen (name);
4045 /* Treat __*_chk fortification functions as anticipated as well,
4046 unless they are __builtin_*. */
4047 if (len > strlen ("___chk")
4048 && memcmp (name + len - strlen ("_chk"),
4049 "_chk", strlen ("_chk") + 1) == 0)
4050 DECL_ANTICIPATED (decl) = 1;
4053 return decl;
4056 tree
4057 cxx_builtin_function (tree decl)
4059 tree id = DECL_NAME (decl);
4060 const char *name = IDENTIFIER_POINTER (id);
4061 /* All builtins that don't begin with an '_' should additionally
4062 go in the 'std' namespace. */
4063 if (name[0] != '_')
4065 tree decl2 = copy_node(decl);
4066 push_namespace (std_identifier);
4067 builtin_function_1 (decl2, std_node, false);
4068 pop_namespace ();
4071 return builtin_function_1 (decl, NULL_TREE, false);
4074 /* Like cxx_builtin_function, but guarantee the function is added to the global
4075 scope. This is to allow function specific options to add new machine
4076 dependent builtins when the target ISA changes via attribute((target(...)))
4077 which saves space on program startup if the program does not use non-generic
4078 ISAs. */
4080 tree
4081 cxx_builtin_function_ext_scope (tree decl)
4084 tree id = DECL_NAME (decl);
4085 const char *name = IDENTIFIER_POINTER (id);
4086 /* All builtins that don't begin with an '_' should additionally
4087 go in the 'std' namespace. */
4088 if (name[0] != '_')
4090 tree decl2 = copy_node(decl);
4091 push_namespace (std_identifier);
4092 builtin_function_1 (decl2, std_node, true);
4093 pop_namespace ();
4096 return builtin_function_1 (decl, NULL_TREE, true);
4099 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4100 function. Not called directly. */
4102 static tree
4103 build_library_fn (tree name, enum tree_code operator_code, tree type,
4104 int ecf_flags)
4106 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4107 DECL_EXTERNAL (fn) = 1;
4108 TREE_PUBLIC (fn) = 1;
4109 DECL_ARTIFICIAL (fn) = 1;
4110 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4111 SET_DECL_LANGUAGE (fn, lang_c);
4112 /* Runtime library routines are, by definition, available in an
4113 external shared object. */
4114 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4115 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4116 set_call_expr_flags (fn, ecf_flags);
4117 return fn;
4120 /* Returns the _DECL for a library function with C++ linkage. */
4122 static tree
4123 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4124 int ecf_flags)
4126 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4127 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4128 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4129 return fn;
4132 /* Like build_library_fn, but takes a C string instead of an
4133 IDENTIFIER_NODE. */
4135 tree
4136 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4138 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4141 /* Like build_cp_library_fn, but takes a C string instead of an
4142 IDENTIFIER_NODE. */
4144 tree
4145 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4147 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4148 ecf_flags);
4151 /* Like build_library_fn, but also pushes the function so that we will
4152 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
4153 may throw exceptions listed in RAISES. */
4155 tree
4156 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4158 tree fn;
4160 if (raises)
4161 type = build_exception_variant (type, raises);
4163 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4164 pushdecl_top_level (fn);
4165 return fn;
4168 /* Like build_cp_library_fn, but also pushes the function so that it
4169 will be found by normal lookup. */
4171 static tree
4172 push_cp_library_fn (enum tree_code operator_code, tree type,
4173 int ecf_flags)
4175 tree fn = build_cp_library_fn (ansi_opname (operator_code),
4176 operator_code,
4177 type, ecf_flags);
4178 pushdecl (fn);
4179 if (flag_tm)
4180 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4181 return fn;
4184 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4185 a FUNCTION_TYPE. */
4187 tree
4188 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4190 tree type = build_function_type (void_type_node, parmtypes);
4191 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4194 /* Like push_library_fn, but also note that this function throws
4195 and does not return. Used for __throw_foo and the like. */
4197 tree
4198 push_throw_library_fn (tree name, tree type)
4200 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4201 return fn;
4204 /* When we call finish_struct for an anonymous union, we create
4205 default copy constructors and such. But, an anonymous union
4206 shouldn't have such things; this function undoes the damage to the
4207 anonymous union type T.
4209 (The reason that we create the synthesized methods is that we don't
4210 distinguish `union { int i; }' from `typedef union { int i; } U'.
4211 The first is an anonymous union; the second is just an ordinary
4212 union type.) */
4214 void
4215 fixup_anonymous_aggr (tree t)
4217 tree *q;
4219 /* Wipe out memory of synthesized methods. */
4220 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4221 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4222 TYPE_HAS_COPY_CTOR (t) = 0;
4223 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4224 TYPE_HAS_COPY_ASSIGN (t) = 0;
4225 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4227 /* Splice the implicitly generated functions out of the TYPE_METHODS
4228 list. */
4229 q = &TYPE_METHODS (t);
4230 while (*q)
4232 if (DECL_ARTIFICIAL (*q))
4233 *q = TREE_CHAIN (*q);
4234 else
4235 q = &DECL_CHAIN (*q);
4238 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
4239 if (TYPE_METHODS (t))
4241 tree decl = TYPE_MAIN_DECL (t);
4243 if (TREE_CODE (t) != UNION_TYPE)
4244 error_at (DECL_SOURCE_LOCATION (decl),
4245 "an anonymous struct cannot have function members");
4246 else
4247 error_at (DECL_SOURCE_LOCATION (decl),
4248 "an anonymous union cannot have function members");
4251 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4252 assignment operators (because they cannot have these methods themselves).
4253 For anonymous unions this is already checked because they are not allowed
4254 in any union, otherwise we have to check it. */
4255 if (TREE_CODE (t) != UNION_TYPE)
4257 tree field, type;
4259 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4260 if (TREE_CODE (field) == FIELD_DECL)
4262 type = TREE_TYPE (field);
4263 if (CLASS_TYPE_P (type))
4265 if (TYPE_NEEDS_CONSTRUCTING (type))
4266 error ("member %q+#D with constructor not allowed "
4267 "in anonymous aggregate", field);
4268 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4269 error ("member %q+#D with destructor not allowed "
4270 "in anonymous aggregate", field);
4271 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4272 error ("member %q+#D with copy assignment operator "
4273 "not allowed in anonymous aggregate", field);
4279 /* Warn for an attribute located at LOCATION that appertains to the
4280 class type CLASS_TYPE that has not been properly placed after its
4281 class-key, in it class-specifier. */
4283 void
4284 warn_misplaced_attr_for_class_type (source_location location,
4285 tree class_type)
4287 gcc_assert (OVERLOAD_TYPE_P (class_type));
4289 if (warning_at (location, OPT_Wattributes,
4290 "attribute ignored in declaration "
4291 "of %q#T", class_type))
4292 inform (location,
4293 "attribute for %q#T must follow the %qs keyword",
4294 class_type, class_key_or_enum_as_string (class_type));
4297 /* Make sure that a declaration with no declarator is well-formed, i.e.
4298 just declares a tagged type or anonymous union.
4300 Returns the type declared; or NULL_TREE if none. */
4302 tree
4303 check_tag_decl (cp_decl_specifier_seq *declspecs,
4304 bool explicit_type_instantiation_p)
4306 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4307 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4308 /* If a class, struct, or enum type is declared by the DECLSPECS
4309 (i.e, if a class-specifier, enum-specifier, or non-typename
4310 elaborated-type-specifier appears in the DECLSPECS),
4311 DECLARED_TYPE is set to the corresponding type. */
4312 tree declared_type = NULL_TREE;
4313 bool error_p = false;
4315 if (declspecs->multiple_types_p)
4316 error ("multiple types in one declaration");
4317 else if (declspecs->redefined_builtin_type)
4319 if (!in_system_header_at (input_location))
4320 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4321 "redeclaration of C++ built-in type %qT",
4322 declspecs->redefined_builtin_type);
4323 return NULL_TREE;
4326 if (declspecs->type
4327 && TYPE_P (declspecs->type)
4328 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4329 && MAYBE_CLASS_TYPE_P (declspecs->type))
4330 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4331 declared_type = declspecs->type;
4332 else if (declspecs->type == error_mark_node)
4333 error_p = true;
4334 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4335 permerror (input_location, "declaration does not declare anything");
4336 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4338 error ("%<auto%> can only be specified for variables "
4339 "or function declarations");
4340 return error_mark_node;
4342 /* Check for an anonymous union. */
4343 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4344 && TYPE_ANONYMOUS_P (declared_type))
4346 /* 7/3 In a simple-declaration, the optional init-declarator-list
4347 can be omitted only when declaring a class (clause 9) or
4348 enumeration (7.2), that is, when the decl-specifier-seq contains
4349 either a class-specifier, an elaborated-type-specifier with
4350 a class-key (9.1), or an enum-specifier. In these cases and
4351 whenever a class-specifier or enum-specifier is present in the
4352 decl-specifier-seq, the identifiers in these specifiers are among
4353 the names being declared by the declaration (as class-name,
4354 enum-names, or enumerators, depending on the syntax). In such
4355 cases, and except for the declaration of an unnamed bit-field (9.6),
4356 the decl-specifier-seq shall introduce one or more names into the
4357 program, or shall redeclare a name introduced by a previous
4358 declaration. [Example:
4359 enum { }; // ill-formed
4360 typedef class { }; // ill-formed
4361 --end example] */
4362 if (saw_typedef)
4364 error ("missing type-name in typedef-declaration");
4365 return NULL_TREE;
4367 /* Anonymous unions are objects, so they can have specifiers. */;
4368 SET_ANON_AGGR_TYPE_P (declared_type);
4370 if (TREE_CODE (declared_type) != UNION_TYPE
4371 && !in_system_header_at (input_location))
4372 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4375 else
4377 if (decl_spec_seq_has_spec_p (declspecs, ds_inline)
4378 || decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4379 error ("%qs can only be specified for functions",
4380 decl_spec_seq_has_spec_p (declspecs, ds_inline)
4381 ? "inline" : "virtual");
4382 else if (saw_friend
4383 && (!current_class_type
4384 || current_scope () != current_class_type))
4385 error ("%<friend%> can only be specified inside a class");
4386 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4387 error ("%<explicit%> can only be specified for constructors");
4388 else if (declspecs->storage_class)
4389 error ("a storage class can only be specified for objects "
4390 "and functions");
4391 else if (decl_spec_seq_has_spec_p (declspecs, ds_const)
4392 || decl_spec_seq_has_spec_p (declspecs, ds_volatile)
4393 || decl_spec_seq_has_spec_p (declspecs, ds_restrict)
4394 || decl_spec_seq_has_spec_p (declspecs, ds_thread))
4395 error ("qualifiers can only be specified for objects "
4396 "and functions");
4397 else if (saw_typedef)
4398 warning (0, "%<typedef%> was ignored in this declaration");
4399 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4400 error ("%<constexpr%> cannot be used for type declarations");
4403 if (declspecs->attributes && warn_attributes && declared_type)
4405 location_t loc;
4406 if (!CLASS_TYPE_P (declared_type)
4407 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4408 /* For a non-template class, use the name location. */
4409 loc = location_of (declared_type);
4410 else
4411 /* For a template class (an explicit instantiation), use the
4412 current location. */
4413 loc = input_location;
4415 if (explicit_type_instantiation_p)
4416 /* [dcl.attr.grammar]/4:
4418 No attribute-specifier-seq shall appertain to an explicit
4419 instantiation. */
4421 if (warning_at (loc, OPT_Wattributes,
4422 "attribute ignored in explicit instantiation %q#T",
4423 declared_type))
4424 inform (loc,
4425 "no attribute can be applied to "
4426 "an explicit instantiation");
4428 else
4429 warn_misplaced_attr_for_class_type (loc, declared_type);
4432 return declared_type;
4435 /* Called when a declaration is seen that contains no names to declare.
4436 If its type is a reference to a structure, union or enum inherited
4437 from a containing scope, shadow that tag name for the current scope
4438 with a forward reference.
4439 If its type defines a new named structure or union
4440 or defines an enum, it is valid but we need not do anything here.
4441 Otherwise, it is an error.
4443 C++: may have to grok the declspecs to learn about static,
4444 complain for anonymous unions.
4446 Returns the TYPE declared -- or NULL_TREE if none. */
4448 tree
4449 shadow_tag (cp_decl_specifier_seq *declspecs)
4451 tree t = check_tag_decl (declspecs,
4452 /*explicit_type_instantiation_p=*/false);
4454 if (!t)
4455 return NULL_TREE;
4457 if (maybe_process_partial_specialization (t) == error_mark_node)
4458 return NULL_TREE;
4460 /* This is where the variables in an anonymous union are
4461 declared. An anonymous union declaration looks like:
4462 union { ... } ;
4463 because there is no declarator after the union, the parser
4464 sends that declaration here. */
4465 if (ANON_AGGR_TYPE_P (t))
4467 fixup_anonymous_aggr (t);
4469 if (TYPE_FIELDS (t))
4471 tree decl = grokdeclarator (/*declarator=*/NULL,
4472 declspecs, NORMAL, 0, NULL);
4473 finish_anon_union (decl);
4477 return t;
4480 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4482 tree
4483 groktypename (cp_decl_specifier_seq *type_specifiers,
4484 const cp_declarator *declarator,
4485 bool is_template_arg)
4487 tree attrs;
4488 tree type;
4489 enum decl_context context
4490 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4491 attrs = type_specifiers->attributes;
4492 type_specifiers->attributes = NULL_TREE;
4493 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4494 if (attrs && type != error_mark_node)
4496 if (CLASS_TYPE_P (type))
4497 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4498 "outside of definition", type);
4499 else if (MAYBE_CLASS_TYPE_P (type))
4500 /* A template type parameter or other dependent type. */
4501 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4502 "type %qT without an associated declaration", type);
4503 else
4504 cplus_decl_attributes (&type, attrs, 0);
4506 return type;
4509 /* Process a DECLARATOR for a function-scope variable declaration,
4510 namespace-scope variable declaration, or function declaration.
4511 (Function definitions go through start_function; class member
4512 declarations appearing in the body of the class go through
4513 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4514 If an error occurs, the error_mark_node is returned instead.
4516 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4517 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4518 for an explicitly defaulted function, or SD_DELETED for an explicitly
4519 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4520 implicitly initialized via a default constructor. ATTRIBUTES and
4521 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4523 The scope represented by the context of the returned DECL is pushed
4524 (if it is not the global namespace) and is assigned to
4525 *PUSHED_SCOPE_P. The caller is then responsible for calling
4526 pop_scope on *PUSHED_SCOPE_P if it is set. */
4528 tree
4529 start_decl (const cp_declarator *declarator,
4530 cp_decl_specifier_seq *declspecs,
4531 int initialized,
4532 tree attributes,
4533 tree prefix_attributes,
4534 tree *pushed_scope_p)
4536 tree decl;
4537 tree context;
4538 bool was_public;
4539 int flags;
4540 bool alias;
4542 *pushed_scope_p = NULL_TREE;
4544 /* An object declared as __attribute__((deprecated)) suppresses
4545 warnings of uses of other deprecated items. */
4546 if (lookup_attribute ("deprecated", attributes))
4547 deprecated_state = DEPRECATED_SUPPRESS;
4549 attributes = chainon (attributes, prefix_attributes);
4551 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4552 &attributes);
4554 deprecated_state = DEPRECATED_NORMAL;
4556 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4557 || decl == error_mark_node)
4558 return error_mark_node;
4560 context = CP_DECL_CONTEXT (decl);
4561 if (context != global_namespace)
4562 *pushed_scope_p = push_scope (context);
4564 if (initialized)
4565 /* Is it valid for this decl to have an initializer at all?
4566 If not, set INITIALIZED to zero, which will indirectly
4567 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4568 switch (TREE_CODE (decl))
4570 case TYPE_DECL:
4571 error ("typedef %qD is initialized (use decltype instead)", decl);
4572 return error_mark_node;
4574 case FUNCTION_DECL:
4575 if (initialized == SD_DELETED)
4576 /* We'll handle the rest of the semantics later, but we need to
4577 set this now so it's visible to duplicate_decls. */
4578 DECL_DELETED_FN (decl) = 1;
4579 break;
4581 default:
4582 break;
4585 if (initialized)
4587 if (! toplevel_bindings_p ()
4588 && DECL_EXTERNAL (decl))
4589 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4590 decl);
4591 DECL_EXTERNAL (decl) = 0;
4592 if (toplevel_bindings_p ())
4593 TREE_STATIC (decl) = 1;
4595 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4597 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4598 record_key_method_defined (decl);
4600 /* If this is a typedef that names the class for linkage purposes
4601 (7.1.3p8), apply any attributes directly to the type. */
4602 if (TREE_CODE (decl) == TYPE_DECL
4603 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4604 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4605 flags = ATTR_FLAG_TYPE_IN_PLACE;
4606 else
4607 flags = 0;
4609 /* Set attributes here so if duplicate decl, will have proper attributes. */
4610 cplus_decl_attributes (&decl, attributes, flags);
4612 /* Dllimported symbols cannot be defined. Static data members (which
4613 can be initialized in-class and dllimported) go through grokfield,
4614 not here, so we don't need to exclude those decls when checking for
4615 a definition. */
4616 if (initialized && DECL_DLLIMPORT_P (decl))
4618 error ("definition of %q#D is marked %<dllimport%>", decl);
4619 DECL_DLLIMPORT_P (decl) = 0;
4622 /* If #pragma weak was used, mark the decl weak now. */
4623 if (!processing_template_decl)
4624 maybe_apply_pragma_weak (decl);
4626 if (TREE_CODE (decl) == FUNCTION_DECL
4627 && DECL_DECLARED_INLINE_P (decl)
4628 && DECL_UNINLINABLE (decl)
4629 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4630 warning (0, "inline function %q+D given attribute noinline", decl);
4632 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4634 if (VAR_P (decl))
4636 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4637 if (field == NULL_TREE || !VAR_P (field))
4638 error ("%q#D is not a static member of %q#T", decl, context);
4639 else
4641 if (DECL_CONTEXT (field) != context)
4643 if (!same_type_p (DECL_CONTEXT (field), context))
4644 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4645 "to be defined as %<%T::%D%>",
4646 DECL_CONTEXT (field), DECL_NAME (decl),
4647 context, DECL_NAME (decl));
4648 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4650 /* Static data member are tricky; an in-class initialization
4651 still doesn't provide a definition, so the in-class
4652 declaration will have DECL_EXTERNAL set, but will have an
4653 initialization. Thus, duplicate_decls won't warn
4654 about this situation, and so we check here. */
4655 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4656 error ("duplicate initialization of %qD", decl);
4657 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4658 decl = field;
4659 if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4660 && !DECL_DECLARED_CONSTEXPR_P (field))
4661 error ("%qD declared %<constexpr%> outside its class", field);
4664 else
4666 tree field = check_classfn (context, decl,
4667 (processing_template_decl
4668 > template_class_depth (context))
4669 ? current_template_parms
4670 : NULL_TREE);
4671 if (field && field != error_mark_node
4672 && duplicate_decls (decl, field,
4673 /*newdecl_is_friend=*/false))
4674 decl = field;
4677 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4678 DECL_IN_AGGR_P (decl) = 0;
4679 /* Do not mark DECL as an explicit specialization if it was not
4680 already marked as an instantiation; a declaration should
4681 never be marked as a specialization unless we know what
4682 template is being specialized. */
4683 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4685 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4687 /* [temp.expl.spec] An explicit specialization of a static data
4688 member of a template is a definition if the declaration
4689 includes an initializer; otherwise, it is a declaration.
4691 We check for processing_specialization so this only applies
4692 to the new specialization syntax. */
4693 if (!initialized && processing_specialization)
4694 DECL_EXTERNAL (decl) = 1;
4697 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4698 /* Aliases are definitions. */
4699 && !alias)
4700 permerror (input_location, "declaration of %q#D outside of class is not definition",
4701 decl);
4704 was_public = TREE_PUBLIC (decl);
4706 /* Enter this declaration into the symbol table. */
4707 decl = maybe_push_decl (decl);
4709 if (processing_template_decl)
4710 decl = push_template_decl (decl);
4711 if (decl == error_mark_node)
4712 return error_mark_node;
4714 if (VAR_P (decl)
4715 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4716 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4718 /* This is a const variable with implicit 'static'. Set
4719 DECL_THIS_STATIC so we can tell it from variables that are
4720 !TREE_PUBLIC because of the anonymous namespace. */
4721 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4722 DECL_THIS_STATIC (decl) = 1;
4725 if (!processing_template_decl && VAR_P (decl))
4726 start_decl_1 (decl, initialized);
4728 return decl;
4731 /* Process the declaration of a variable DECL. INITIALIZED is true
4732 iff DECL is explicitly initialized. (INITIALIZED is false if the
4733 variable is initialized via an implicitly-called constructor.)
4734 This function must be called for ordinary variables (including, for
4735 example, implicit instantiations of templates), but must not be
4736 called for template declarations. */
4738 void
4739 start_decl_1 (tree decl, bool initialized)
4741 tree type;
4742 bool complete_p;
4743 bool aggregate_definition_p;
4745 gcc_assert (!processing_template_decl);
4747 if (error_operand_p (decl))
4748 return;
4750 gcc_assert (VAR_P (decl));
4752 type = TREE_TYPE (decl);
4753 complete_p = COMPLETE_TYPE_P (type);
4754 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4756 /* If an explicit initializer is present, or if this is a definition
4757 of an aggregate, then we need a complete type at this point.
4758 (Scalars are always complete types, so there is nothing to
4759 check.) This code just sets COMPLETE_P; errors (if necessary)
4760 are issued below. */
4761 if ((initialized || aggregate_definition_p)
4762 && !complete_p
4763 && COMPLETE_TYPE_P (complete_type (type)))
4765 complete_p = true;
4766 /* We will not yet have set TREE_READONLY on DECL if the type
4767 was "const", but incomplete, before this point. But, now, we
4768 have a complete type, so we can try again. */
4769 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4772 if (initialized)
4773 /* Is it valid for this decl to have an initializer at all? */
4775 /* Don't allow initializations for incomplete types except for
4776 arrays which might be completed by the initialization. */
4777 if (complete_p)
4778 ; /* A complete type is ok. */
4779 else if (type_uses_auto (type))
4780 ; /* An auto type is ok. */
4781 else if (TREE_CODE (type) != ARRAY_TYPE)
4783 error ("variable %q#D has initializer but incomplete type", decl);
4784 type = TREE_TYPE (decl) = error_mark_node;
4786 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4788 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4789 error ("elements of array %q#D have incomplete type", decl);
4790 /* else we already gave an error in start_decl. */
4793 else if (aggregate_definition_p && !complete_p)
4795 if (type_uses_auto (type))
4796 error ("declaration of %q#D has no initializer", decl);
4797 else
4798 error ("aggregate %q#D has incomplete type and cannot be defined",
4799 decl);
4800 /* Change the type so that assemble_variable will give
4801 DECL an rtl we can live with: (mem (const_int 0)). */
4802 type = TREE_TYPE (decl) = error_mark_node;
4805 /* Create a new scope to hold this declaration if necessary.
4806 Whether or not a new scope is necessary cannot be determined
4807 until after the type has been completed; if the type is a
4808 specialization of a class template it is not until after
4809 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4810 will be set correctly. */
4811 maybe_push_cleanup_level (type);
4814 /* Handle initialization of references. DECL, TYPE, and INIT have the
4815 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4816 but will be set to a new CLEANUP_STMT if a temporary is created
4817 that must be destroyed subsequently.
4819 Returns an initializer expression to use to initialize DECL, or
4820 NULL if the initialization can be performed statically.
4822 Quotes on semantics can be found in ARM 8.4.3. */
4824 static tree
4825 grok_reference_init (tree decl, tree type, tree init, int flags)
4827 if (init == NULL_TREE)
4829 if ((DECL_LANG_SPECIFIC (decl) == 0
4830 || DECL_IN_AGGR_P (decl) == 0)
4831 && ! DECL_THIS_EXTERN (decl))
4832 error ("%qD declared as reference but not initialized", decl);
4833 return NULL_TREE;
4836 if (TREE_CODE (init) == TREE_LIST)
4837 init = build_x_compound_expr_from_list (init, ELK_INIT,
4838 tf_warning_or_error);
4840 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4841 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4842 /* Note: default conversion is only called in very special cases. */
4843 init = decay_conversion (init, tf_warning_or_error);
4845 /* Convert INIT to the reference type TYPE. This may involve the
4846 creation of a temporary, whose lifetime must be the same as that
4847 of the reference. If so, a DECL_EXPR for the temporary will be
4848 added just after the DECL_EXPR for DECL. That's why we don't set
4849 DECL_INITIAL for local references (instead assigning to them
4850 explicitly); we need to allow the temporary to be initialized
4851 first. */
4852 return initialize_reference (type, init, flags,
4853 tf_warning_or_error);
4856 /* Designated initializers in arrays are not supported in GNU C++.
4857 The parser cannot detect this error since it does not know whether
4858 a given brace-enclosed initializer is for a class type or for an
4859 array. This function checks that CE does not use a designated
4860 initializer. If it does, an error is issued. Returns true if CE
4861 is valid, i.e., does not have a designated initializer. */
4863 static bool
4864 check_array_designated_initializer (constructor_elt *ce,
4865 unsigned HOST_WIDE_INT index)
4867 /* Designated initializers for array elements are not supported. */
4868 if (ce->index)
4870 /* The parser only allows identifiers as designated
4871 initializers. */
4872 if (ce->index == error_mark_node)
4874 error ("name used in a GNU-style designated "
4875 "initializer for an array");
4876 return false;
4878 else if (identifier_p (ce->index))
4880 error ("name %qD used in a GNU-style designated "
4881 "initializer for an array", ce->index);
4882 return false;
4885 ce->index = cxx_constant_value (ce->index);
4887 if (TREE_CODE (ce->index) == INTEGER_CST)
4889 /* A C99 designator is OK if it matches the current index. */
4890 if (wi::eq_p (ce->index, index))
4891 return true;
4892 else
4893 sorry ("non-trivial designated initializers not supported");
4895 else
4896 gcc_unreachable ();
4898 return false;
4901 return true;
4904 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4905 array until we finish parsing the initializer. If that's the
4906 situation we're in, update DECL accordingly. */
4908 static void
4909 maybe_deduce_size_from_array_init (tree decl, tree init)
4911 tree type = TREE_TYPE (decl);
4913 if (TREE_CODE (type) == ARRAY_TYPE
4914 && TYPE_DOMAIN (type) == NULL_TREE
4915 && TREE_CODE (decl) != TYPE_DECL)
4917 /* do_default is really a C-ism to deal with tentative definitions.
4918 But let's leave it here to ease the eventual merge. */
4919 int do_default = !DECL_EXTERNAL (decl);
4920 tree initializer = init ? init : DECL_INITIAL (decl);
4921 int failure = 0;
4923 /* Check that there are no designated initializers in INIT, as
4924 those are not supported in GNU C++, and as the middle-end
4925 will crash if presented with a non-numeric designated
4926 initializer. */
4927 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
4929 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
4930 constructor_elt *ce;
4931 HOST_WIDE_INT i;
4932 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
4933 if (!check_array_designated_initializer (ce, i))
4934 failure = 1;
4937 if (!failure)
4939 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4940 do_default);
4941 if (failure == 1)
4943 error ("initializer fails to determine size of %qD", decl);
4945 else if (failure == 2)
4947 if (do_default)
4949 error ("array size missing in %qD", decl);
4951 /* If a `static' var's size isn't known, make it extern as
4952 well as static, so it does not get allocated. If it's not
4953 `static', then don't mark it extern; finish_incomplete_decl
4954 will give it a default size and it will get allocated. */
4955 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4956 DECL_EXTERNAL (decl) = 1;
4958 else if (failure == 3)
4960 error ("zero-size array %qD", decl);
4964 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4966 relayout_decl (decl);
4970 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4971 any appropriate error messages regarding the layout. */
4973 static void
4974 layout_var_decl (tree decl)
4976 tree type;
4978 type = TREE_TYPE (decl);
4979 if (type == error_mark_node)
4980 return;
4982 /* If we haven't already laid out this declaration, do so now.
4983 Note that we must not call complete type for an external object
4984 because it's type might involve templates that we are not
4985 supposed to instantiate yet. (And it's perfectly valid to say
4986 `extern X x' for some incomplete type `X'.) */
4987 if (!DECL_EXTERNAL (decl))
4988 complete_type (type);
4989 if (!DECL_SIZE (decl)
4990 && TREE_TYPE (decl) != error_mark_node
4991 && (COMPLETE_TYPE_P (type)
4992 || (TREE_CODE (type) == ARRAY_TYPE
4993 && !TYPE_DOMAIN (type)
4994 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4995 layout_decl (decl, 0);
4997 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4999 /* An automatic variable with an incomplete type: that is an error.
5000 Don't talk about array types here, since we took care of that
5001 message in grokdeclarator. */
5002 error ("storage size of %qD isn%'t known", decl);
5003 TREE_TYPE (decl) = error_mark_node;
5005 #if 0
5006 /* Keep this code around in case we later want to control debug info
5007 based on whether a type is "used". (jason 1999-11-11) */
5009 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5010 /* Let debugger know it should output info for this type. */
5011 note_debug_info_needed (ttype);
5013 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5014 note_debug_info_needed (DECL_CONTEXT (decl));
5015 #endif
5017 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5018 && DECL_SIZE (decl) != NULL_TREE
5019 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5021 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5022 constant_expression_warning (DECL_SIZE (decl));
5023 else
5025 error ("storage size of %qD isn%'t constant", decl);
5026 TREE_TYPE (decl) = error_mark_node;
5031 /* If a local static variable is declared in an inline function, or if
5032 we have a weak definition, we must endeavor to create only one
5033 instance of the variable at link-time. */
5035 void
5036 maybe_commonize_var (tree decl)
5038 /* Static data in a function with comdat linkage also has comdat
5039 linkage. */
5040 if (TREE_STATIC (decl)
5041 /* Don't mess with __FUNCTION__. */
5042 && ! DECL_ARTIFICIAL (decl)
5043 && DECL_FUNCTION_SCOPE_P (decl)
5044 && vague_linkage_p (DECL_CONTEXT (decl)))
5046 if (flag_weak)
5048 /* With weak symbols, we simply make the variable COMDAT;
5049 that will cause copies in multiple translations units to
5050 be merged. */
5051 comdat_linkage (decl);
5053 else
5055 if (DECL_INITIAL (decl) == NULL_TREE
5056 || DECL_INITIAL (decl) == error_mark_node)
5058 /* Without weak symbols, we can use COMMON to merge
5059 uninitialized variables. */
5060 TREE_PUBLIC (decl) = 1;
5061 DECL_COMMON (decl) = 1;
5063 else
5065 /* While for initialized variables, we must use internal
5066 linkage -- which means that multiple copies will not
5067 be merged. */
5068 TREE_PUBLIC (decl) = 0;
5069 DECL_COMMON (decl) = 0;
5070 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5071 "sorry: semantics of inline function static "
5072 "data %q#D are wrong (you%'ll wind up "
5073 "with multiple copies)", decl))
5074 inform (DECL_SOURCE_LOCATION (decl),
5075 "you can work around this by removing the initializer");
5079 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
5080 /* Set it up again; we might have set DECL_INITIAL since the last
5081 time. */
5082 comdat_linkage (decl);
5085 /* Issue an error message if DECL is an uninitialized const variable. */
5087 static void
5088 check_for_uninitialized_const_var (tree decl)
5090 tree type = strip_array_types (TREE_TYPE (decl));
5092 /* ``Unless explicitly declared extern, a const object does not have
5093 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5094 7.1.6 */
5095 if (VAR_P (decl)
5096 && TREE_CODE (type) != REFERENCE_TYPE
5097 && CP_TYPE_CONST_P (type)
5098 && !DECL_INITIAL (decl))
5100 tree field = default_init_uninitialized_part (type);
5101 if (!field)
5102 return;
5104 permerror (DECL_SOURCE_LOCATION (decl),
5105 "uninitialized const %qD", decl);
5107 if (CLASS_TYPE_P (type))
5109 tree defaulted_ctor;
5111 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5112 "%q#T has no user-provided default constructor", type);
5113 defaulted_ctor = in_class_defaulted_default_constructor (type);
5114 if (defaulted_ctor)
5115 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5116 "constructor is not user-provided because it is "
5117 "explicitly defaulted in the class body");
5118 inform (0, "and the implicitly-defined constructor does not "
5119 "initialize %q+#D", field);
5124 /* Structure holding the current initializer being processed by reshape_init.
5125 CUR is a pointer to the current element being processed, END is a pointer
5126 after the last element present in the initializer. */
5127 typedef struct reshape_iterator_t
5129 constructor_elt *cur;
5130 constructor_elt *end;
5131 } reshape_iter;
5133 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5135 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5136 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5137 initialized. If there are no more such fields, the return value
5138 will be NULL. */
5140 tree
5141 next_initializable_field (tree field)
5143 while (field
5144 && (TREE_CODE (field) != FIELD_DECL
5145 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5146 || DECL_ARTIFICIAL (field)))
5147 field = DECL_CHAIN (field);
5149 return field;
5152 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5153 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5154 INTEGER_CST representing the size of the array minus one (the maximum index),
5155 or NULL_TREE if the array was declared without specifying the size. D is
5156 the iterator within the constructor. */
5158 static tree
5159 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5160 tsubst_flags_t complain)
5162 tree new_init;
5163 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5164 unsigned HOST_WIDE_INT max_index_cst = 0;
5165 unsigned HOST_WIDE_INT index;
5167 /* The initializer for an array is always a CONSTRUCTOR. */
5168 new_init = build_constructor (init_list_type_node, NULL);
5170 if (sized_array_p)
5172 /* Minus 1 is used for zero sized arrays. */
5173 if (integer_all_onesp (max_index))
5174 return new_init;
5176 if (tree_fits_uhwi_p (max_index))
5177 max_index_cst = tree_to_uhwi (max_index);
5178 /* sizetype is sign extended, not zero extended. */
5179 else
5180 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5183 /* Loop until there are no more initializers. */
5184 for (index = 0;
5185 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5186 ++index)
5188 tree elt_init;
5189 constructor_elt *old_cur = d->cur;
5191 check_array_designated_initializer (d->cur, index);
5192 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5193 complain);
5194 if (elt_init == error_mark_node)
5195 return error_mark_node;
5196 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5197 size_int (index), elt_init);
5198 if (!TREE_CONSTANT (elt_init))
5199 TREE_CONSTANT (new_init) = false;
5201 /* This can happen with an invalid initializer (c++/54501). */
5202 if (d->cur == old_cur && !sized_array_p)
5203 break;
5206 return new_init;
5209 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5210 Parameters are the same of reshape_init_r. */
5212 static tree
5213 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5215 tree max_index = NULL_TREE;
5217 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5219 if (TYPE_DOMAIN (type))
5220 max_index = array_type_nelts (type);
5222 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5225 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5226 Parameters are the same of reshape_init_r. */
5228 static tree
5229 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5231 tree max_index = NULL_TREE;
5233 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5235 if (COMPOUND_LITERAL_P (d->cur->value))
5237 tree value = d->cur->value;
5238 if (!same_type_p (TREE_TYPE (value), type))
5240 if (complain & tf_error)
5241 error ("invalid type %qT as initializer for a vector of type %qT",
5242 TREE_TYPE (d->cur->value), type);
5243 value = error_mark_node;
5245 ++d->cur;
5246 return value;
5249 /* For a vector, we initialize it as an array of the appropriate size. */
5250 if (TREE_CODE (type) == VECTOR_TYPE)
5251 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5253 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5256 /* Subroutine of reshape_init_r, processes the initializers for classes
5257 or union. Parameters are the same of reshape_init_r. */
5259 static tree
5260 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5261 tsubst_flags_t complain)
5263 tree field;
5264 tree new_init;
5266 gcc_assert (CLASS_TYPE_P (type));
5268 /* The initializer for a class is always a CONSTRUCTOR. */
5269 new_init = build_constructor (init_list_type_node, NULL);
5270 field = next_initializable_field (TYPE_FIELDS (type));
5272 if (!field)
5274 /* [dcl.init.aggr]
5276 An initializer for an aggregate member that is an
5277 empty class shall have the form of an empty
5278 initializer-list {}. */
5279 if (!first_initializer_p)
5281 if (complain & tf_error)
5282 error ("initializer for %qT must be brace-enclosed", type);
5283 return error_mark_node;
5285 return new_init;
5288 /* Loop through the initializable fields, gathering initializers. */
5289 while (d->cur != d->end)
5291 tree field_init;
5292 constructor_elt *old_cur = d->cur;
5294 /* Handle designated initializers, as an extension. */
5295 if (d->cur->index)
5297 if (d->cur->index == error_mark_node)
5298 return error_mark_node;
5300 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5301 /* We already reshaped this. */
5302 gcc_assert (d->cur->index == field);
5303 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5304 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5305 else
5307 if (complain & tf_error)
5308 error ("%<[%E] =%> used in a GNU-style designated initializer"
5309 " for class %qT", d->cur->index, type);
5310 return error_mark_node;
5313 if (!field || TREE_CODE (field) != FIELD_DECL)
5315 if (complain & tf_error)
5316 error ("%qT has no non-static data member named %qD", type,
5317 d->cur->index);
5318 return error_mark_node;
5322 /* If we processed all the member of the class, we are done. */
5323 if (!field)
5324 break;
5326 field_init = reshape_init_r (TREE_TYPE (field), d,
5327 /*first_initializer_p=*/false, complain);
5328 if (field_init == error_mark_node)
5329 return error_mark_node;
5331 if (d->cur == old_cur && d->cur->index)
5333 /* This can happen with an invalid initializer for a flexible
5334 array member (c++/54441). */
5335 if (complain & tf_error)
5336 error ("invalid initializer for %q#D", field);
5337 return error_mark_node;
5340 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5342 /* [dcl.init.aggr]
5344 When a union is initialized with a brace-enclosed
5345 initializer, the braces shall only contain an
5346 initializer for the first member of the union. */
5347 if (TREE_CODE (type) == UNION_TYPE)
5348 break;
5350 field = next_initializable_field (DECL_CHAIN (field));
5353 return new_init;
5356 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5357 designators are not valid; either complain or return true to indicate
5358 that reshape_init_r should return error_mark_node. */
5360 static bool
5361 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5363 if (d->cur->index)
5365 if (complain & tf_error)
5366 error ("C99 designator %qE outside aggregate initializer",
5367 d->cur->index);
5368 else
5369 return true;
5371 return false;
5374 /* Subroutine of reshape_init, which processes a single initializer (part of
5375 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5376 iterator within the CONSTRUCTOR which points to the initializer to process.
5377 FIRST_INITIALIZER_P is true if this is the first initializer of the
5378 outermost CONSTRUCTOR node. */
5380 static tree
5381 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5382 tsubst_flags_t complain)
5384 tree init = d->cur->value;
5386 if (error_operand_p (init))
5387 return error_mark_node;
5389 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5390 && has_designator_problem (d, complain))
5391 return error_mark_node;
5393 if (TREE_CODE (type) == COMPLEX_TYPE)
5395 /* A complex type can be initialized from one or two initializers,
5396 but braces are not elided. */
5397 d->cur++;
5398 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5400 if (CONSTRUCTOR_NELTS (init) > 2)
5402 if (complain & tf_error)
5403 error ("too many initializers for %qT", type);
5404 else
5405 return error_mark_node;
5408 else if (first_initializer_p && d->cur != d->end)
5410 vec<constructor_elt, va_gc> *v = 0;
5411 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5412 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5413 if (has_designator_problem (d, complain))
5414 return error_mark_node;
5415 d->cur++;
5416 init = build_constructor (init_list_type_node, v);
5418 return init;
5421 /* A non-aggregate type is always initialized with a single
5422 initializer. */
5423 if (!CP_AGGREGATE_TYPE_P (type))
5425 /* It is invalid to initialize a non-aggregate type with a
5426 brace-enclosed initializer before C++0x.
5427 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5428 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5429 a CONSTRUCTOR (with a record type). */
5430 if (TREE_CODE (init) == CONSTRUCTOR
5431 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5433 if (SCALAR_TYPE_P (type))
5435 if (complain & tf_error)
5436 error ("braces around scalar initializer for type %qT", type);
5437 init = error_mark_node;
5439 else
5440 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5443 d->cur++;
5444 return init;
5447 /* "If T is a class type and the initializer list has a single element of
5448 type cv U, where U is T or a class derived from T, the object is
5449 initialized from that element." Even if T is an aggregate. */
5450 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5451 && first_initializer_p
5452 && d->end - d->cur == 1
5453 && reference_related_p (type, TREE_TYPE (init)))
5455 d->cur++;
5456 return init;
5459 /* [dcl.init.aggr]
5461 All implicit type conversions (clause _conv_) are considered when
5462 initializing the aggregate member with an initializer from an
5463 initializer-list. If the initializer can initialize a member,
5464 the member is initialized. Otherwise, if the member is itself a
5465 non-empty subaggregate, brace elision is assumed and the
5466 initializer is considered for the initialization of the first
5467 member of the subaggregate. */
5468 if (TREE_CODE (init) != CONSTRUCTOR
5469 /* But don't try this for the first initializer, since that would be
5470 looking through the outermost braces; A a2 = { a1 }; is not a
5471 valid aggregate initialization. */
5472 && !first_initializer_p
5473 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5474 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5475 complain)))
5477 d->cur++;
5478 return init;
5481 /* [dcl.init.string]
5483 A char array (whether plain char, signed char, or unsigned char)
5484 can be initialized by a string-literal (optionally enclosed in
5485 braces); a wchar_t array can be initialized by a wide
5486 string-literal (optionally enclosed in braces). */
5487 if (TREE_CODE (type) == ARRAY_TYPE
5488 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5490 tree str_init = init;
5492 /* Strip one level of braces if and only if they enclose a single
5493 element (as allowed by [dcl.init.string]). */
5494 if (!first_initializer_p
5495 && TREE_CODE (str_init) == CONSTRUCTOR
5496 && vec_safe_length (CONSTRUCTOR_ELTS (str_init)) == 1)
5498 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5501 /* If it's a string literal, then it's the initializer for the array
5502 as a whole. Otherwise, continue with normal initialization for
5503 array types (one value per array element). */
5504 if (TREE_CODE (str_init) == STRING_CST)
5506 if (has_designator_problem (d, complain))
5507 return error_mark_node;
5508 d->cur++;
5509 return str_init;
5513 /* The following cases are about aggregates. If we are not within a full
5514 initializer already, and there is not a CONSTRUCTOR, it means that there
5515 is a missing set of braces (that is, we are processing the case for
5516 which reshape_init exists). */
5517 if (!first_initializer_p)
5519 if (TREE_CODE (init) == CONSTRUCTOR)
5521 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5522 /* There is no need to reshape pointer-to-member function
5523 initializers, as they are always constructed correctly
5524 by the front end. */
5526 else if (COMPOUND_LITERAL_P (init))
5527 /* For a nested compound literal, there is no need to reshape since
5528 brace elision is not allowed. Even if we decided to allow it,
5529 we should add a call to reshape_init in finish_compound_literal,
5530 before calling digest_init, so changing this code would still
5531 not be necessary. */
5532 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5533 else
5535 ++d->cur;
5536 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5537 return reshape_init (type, init, complain);
5541 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5542 type);
5545 /* Dispatch to specialized routines. */
5546 if (CLASS_TYPE_P (type))
5547 return reshape_init_class (type, d, first_initializer_p, complain);
5548 else if (TREE_CODE (type) == ARRAY_TYPE)
5549 return reshape_init_array (type, d, complain);
5550 else if (TREE_CODE (type) == VECTOR_TYPE)
5551 return reshape_init_vector (type, d, complain);
5552 else
5553 gcc_unreachable();
5556 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5557 brace-enclosed aggregate initializer.
5559 INIT is the CONSTRUCTOR containing the list of initializers describing
5560 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5561 It may not presently match the shape of the TYPE; for example:
5563 struct S { int a; int b; };
5564 struct S a[] = { 1, 2, 3, 4 };
5566 Here INIT will hold a vector of four elements, rather than a
5567 vector of two elements, each itself a vector of two elements. This
5568 routine transforms INIT from the former form into the latter. The
5569 revised CONSTRUCTOR node is returned. */
5571 tree
5572 reshape_init (tree type, tree init, tsubst_flags_t complain)
5574 vec<constructor_elt, va_gc> *v;
5575 reshape_iter d;
5576 tree new_init;
5578 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5580 v = CONSTRUCTOR_ELTS (init);
5582 /* An empty constructor does not need reshaping, and it is always a valid
5583 initializer. */
5584 if (vec_safe_is_empty (v))
5585 return init;
5587 /* Recurse on this CONSTRUCTOR. */
5588 d.cur = &(*v)[0];
5589 d.end = d.cur + v->length ();
5591 new_init = reshape_init_r (type, &d, true, complain);
5592 if (new_init == error_mark_node)
5593 return error_mark_node;
5595 /* Make sure all the element of the constructor were used. Otherwise,
5596 issue an error about exceeding initializers. */
5597 if (d.cur != d.end)
5599 if (complain & tf_error)
5600 error ("too many initializers for %qT", type);
5601 else
5602 return error_mark_node;
5605 return new_init;
5608 /* Verify array initializer. Returns true if errors have been reported. */
5610 bool
5611 check_array_initializer (tree decl, tree type, tree init)
5613 tree element_type = TREE_TYPE (type);
5615 /* The array type itself need not be complete, because the
5616 initializer may tell us how many elements are in the array.
5617 But, the elements of the array must be complete. */
5618 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5620 if (decl)
5621 error ("elements of array %q#D have incomplete type", decl);
5622 else
5623 error ("elements of array %q#T have incomplete type", type);
5624 return true;
5626 /* A compound literal can't have variable size. */
5627 if (init && !decl
5628 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5629 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5631 error ("variable-sized compound literal");
5632 return true;
5634 return false;
5637 /* Subroutine of check_initializer; args are passed down from that function.
5638 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5640 static tree
5641 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5644 gcc_assert (stmts_are_full_exprs_p ());
5645 return build_aggr_init (decl, init, flags, tf_warning_or_error);
5648 /* Verify INIT (the initializer for DECL), and record the
5649 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5650 grok_reference_init.
5652 If the return value is non-NULL, it is an expression that must be
5653 evaluated dynamically to initialize DECL. */
5655 static tree
5656 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
5658 tree type = TREE_TYPE (decl);
5659 tree init_code = NULL;
5660 tree core_type;
5662 /* Things that are going to be initialized need to have complete
5663 type. */
5664 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5666 if (DECL_HAS_VALUE_EXPR_P (decl))
5668 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5669 it doesn't have storage to be initialized. */
5670 gcc_assert (init == NULL_TREE);
5671 return NULL_TREE;
5674 if (type == error_mark_node)
5675 /* We will have already complained. */
5676 return NULL_TREE;
5678 if (TREE_CODE (type) == ARRAY_TYPE)
5680 if (check_array_initializer (decl, type, init))
5681 return NULL_TREE;
5683 else if (!COMPLETE_TYPE_P (type))
5685 error ("%q#D has incomplete type", decl);
5686 TREE_TYPE (decl) = error_mark_node;
5687 return NULL_TREE;
5689 else
5690 /* There is no way to make a variable-sized class type in GNU C++. */
5691 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5693 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5695 int init_len = vec_safe_length (CONSTRUCTOR_ELTS (init));
5696 if (SCALAR_TYPE_P (type))
5698 if (init_len == 0)
5700 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5701 init = build_zero_init (type, NULL_TREE, false);
5703 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5705 error ("scalar object %qD requires one element in initializer",
5706 decl);
5707 TREE_TYPE (decl) = error_mark_node;
5708 return NULL_TREE;
5713 if (TREE_CODE (decl) == CONST_DECL)
5715 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5717 DECL_INITIAL (decl) = init;
5719 gcc_assert (init != NULL_TREE);
5720 init = NULL_TREE;
5722 else if (!init && DECL_REALLY_EXTERN (decl))
5724 else if (init || type_build_ctor_call (type)
5725 || TREE_CODE (type) == REFERENCE_TYPE)
5727 if (TREE_CODE (type) == REFERENCE_TYPE)
5729 init = grok_reference_init (decl, type, init, flags);
5730 flags |= LOOKUP_ALREADY_DIGESTED;
5732 else if (!init)
5733 check_for_uninitialized_const_var (decl);
5734 /* Do not reshape constructors of vectors (they don't need to be
5735 reshaped. */
5736 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5738 if (is_std_init_list (type))
5740 init = perform_implicit_conversion (type, init,
5741 tf_warning_or_error);
5742 flags |= LOOKUP_ALREADY_DIGESTED;
5744 else if (TYPE_NON_AGGREGATE_CLASS (type))
5746 /* Don't reshape if the class has constructors. */
5747 if (cxx_dialect == cxx98)
5748 error ("in C++98 %qD must be initialized by constructor, "
5749 "not by %<{...}%>",
5750 decl);
5752 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5754 error ("opaque vector types cannot be initialized");
5755 init = error_mark_node;
5757 else
5759 init = reshape_init (type, init, tf_warning_or_error);
5760 flags |= LOOKUP_NO_NARROWING;
5763 else if (TREE_CODE (init) == TREE_LIST
5764 && TREE_TYPE (init) != unknown_type_node
5765 && !MAYBE_CLASS_TYPE_P (type))
5767 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5769 /* We get here with code like `int a (2);' */
5770 init = build_x_compound_expr_from_list (init, ELK_INIT,
5771 tf_warning_or_error);
5774 /* If DECL has an array type without a specific bound, deduce the
5775 array size from the initializer. */
5776 maybe_deduce_size_from_array_init (decl, init);
5777 type = TREE_TYPE (decl);
5778 if (type == error_mark_node)
5779 return NULL_TREE;
5781 if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5782 && !(flags & LOOKUP_ALREADY_DIGESTED)
5783 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5784 && CP_AGGREGATE_TYPE_P (type)
5785 && (CLASS_TYPE_P (type)
5786 || !TYPE_NEEDS_CONSTRUCTING (type)
5787 || type_has_extended_temps (type))))
5789 init_code = build_aggr_init_full_exprs (decl, init, flags);
5791 /* A constructor call is a non-trivial initializer even if
5792 it isn't explicitly written. */
5793 if (TREE_SIDE_EFFECTS (init_code))
5794 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
5796 /* If this is a constexpr initializer, expand_default_init will
5797 have returned an INIT_EXPR rather than a CALL_EXPR. In that
5798 case, pull the initializer back out and pass it down into
5799 store_init_value. */
5800 while (TREE_CODE (init_code) == EXPR_STMT
5801 || TREE_CODE (init_code) == CONVERT_EXPR)
5802 init_code = TREE_OPERAND (init_code, 0);
5803 if (TREE_CODE (init_code) == INIT_EXPR)
5805 init = TREE_OPERAND (init_code, 1);
5806 init_code = NULL_TREE;
5807 /* Don't call digest_init; it's unnecessary and will complain
5808 about aggregate initialization of non-aggregate classes. */
5809 flags |= LOOKUP_ALREADY_DIGESTED;
5811 else if (DECL_DECLARED_CONSTEXPR_P (decl))
5813 /* Declared constexpr, but no suitable initializer; massage
5814 init appropriately so we can pass it into store_init_value
5815 for the error. */
5816 if (CLASS_TYPE_P (type)
5817 && (!init || TREE_CODE (init) == TREE_LIST))
5819 init = build_functional_cast (type, init, tf_none);
5820 if (TREE_CODE (init) == TARGET_EXPR)
5821 TARGET_EXPR_DIRECT_INIT_P (init) = true;
5823 init_code = NULL_TREE;
5825 else
5826 init = NULL_TREE;
5829 if (init && TREE_CODE (init) != TREE_VEC)
5831 /* In aggregate initialization of a variable, each element
5832 initialization is a full-expression because there is no
5833 enclosing expression. */
5834 gcc_assert (stmts_are_full_exprs_p ());
5836 init_code = store_init_value (decl, init, cleanups, flags);
5838 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5839 && DECL_INITIAL (decl)
5840 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5841 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5842 warning (0, "array %qD initialized by parenthesized string literal %qE",
5843 decl, DECL_INITIAL (decl));
5844 init = NULL;
5847 else
5849 if (CLASS_TYPE_P (core_type = strip_array_types (type))
5850 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5851 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5852 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5853 /*complain=*/true);
5855 check_for_uninitialized_const_var (decl);
5858 if (init && init != error_mark_node)
5859 init_code = build2 (INIT_EXPR, type, decl, init);
5861 if (init_code)
5863 /* We might have set these in cp_finish_decl. */
5864 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
5865 TREE_CONSTANT (decl) = false;
5868 if (init_code && DECL_IN_AGGR_P (decl))
5870 static int explained = 0;
5872 if (cxx_dialect < cxx11)
5873 error ("initializer invalid for static member with constructor");
5874 else
5875 error ("non-constant in-class initialization invalid for static "
5876 "member %qD", decl);
5877 if (!explained)
5879 inform (input_location,
5880 "(an out of class initialization is required)");
5881 explained = 1;
5883 return NULL_TREE;
5886 return init_code;
5889 /* If DECL is not a local variable, give it RTL. */
5891 static void
5892 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5894 int toplev = toplevel_bindings_p ();
5895 int defer_p;
5896 const char *filename;
5898 /* Set the DECL_ASSEMBLER_NAME for the object. */
5899 if (asmspec)
5901 /* The `register' keyword, when used together with an
5902 asm-specification, indicates that the variable should be
5903 placed in a particular register. */
5904 if (VAR_P (decl) && DECL_REGISTER (decl))
5906 set_user_assembler_name (decl, asmspec);
5907 DECL_HARD_REGISTER (decl) = 1;
5909 else
5911 if (TREE_CODE (decl) == FUNCTION_DECL
5912 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5913 set_builtin_user_assembler_name (decl, asmspec);
5914 set_user_assembler_name (decl, asmspec);
5918 /* Handle non-variables up front. */
5919 if (!VAR_P (decl))
5921 rest_of_decl_compilation (decl, toplev, at_eof);
5922 return;
5925 /* If we see a class member here, it should be a static data
5926 member. */
5927 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5929 gcc_assert (TREE_STATIC (decl));
5930 /* An in-class declaration of a static data member should be
5931 external; it is only a declaration, and not a definition. */
5932 if (init == NULL_TREE)
5933 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5936 /* We don't create any RTL for local variables. */
5937 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5938 return;
5940 /* We defer emission of local statics until the corresponding
5941 DECL_EXPR is expanded. */
5942 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5944 /* We try to defer namespace-scope static constants so that they are
5945 not emitted into the object file unnecessarily. */
5946 filename = LOCATION_FILE (input_location);
5947 if (!DECL_VIRTUAL_P (decl)
5948 && TREE_READONLY (decl)
5949 && DECL_INITIAL (decl) != NULL_TREE
5950 && DECL_INITIAL (decl) != error_mark_node
5951 && filename != NULL
5952 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5953 && toplev
5954 && !TREE_PUBLIC (decl))
5956 /* Fool with the linkage of static consts according to #pragma
5957 interface. */
5958 struct c_fileinfo *finfo = get_fileinfo (filename);
5959 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5961 TREE_PUBLIC (decl) = 1;
5962 DECL_EXTERNAL (decl) = finfo->interface_only;
5965 defer_p = 1;
5967 /* Likewise for template instantiations. */
5968 else if (DECL_LANG_SPECIFIC (decl)
5969 && DECL_IMPLICIT_INSTANTIATION (decl))
5970 defer_p = 1;
5972 /* If we're not deferring, go ahead and assemble the variable. */
5973 if (!defer_p)
5974 rest_of_decl_compilation (decl, toplev, at_eof);
5977 /* walk_tree helper for wrap_temporary_cleanups, below. */
5979 static tree
5980 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5982 /* Stop at types or full-expression boundaries. */
5983 if (TYPE_P (*stmt_p)
5984 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5986 *walk_subtrees = 0;
5987 return NULL_TREE;
5990 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5992 tree guard = (tree)data;
5993 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5995 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5996 /* Tell honor_protect_cleanup_actions to handle this as a separate
5997 cleanup. */
5998 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6000 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6003 return NULL_TREE;
6006 /* We're initializing a local variable which has a cleanup GUARD. If there
6007 are any temporaries used in the initializer INIT of this variable, we
6008 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6009 variable will be cleaned up properly if one of them throws.
6011 Unfortunately, there's no way to express this properly in terms of
6012 nesting, as the regions for the temporaries overlap the region for the
6013 variable itself; if there are two temporaries, the variable needs to be
6014 the first thing destroyed if either of them throws. However, we only
6015 want to run the variable's cleanup if it actually got constructed. So
6016 we need to guard the temporary cleanups with the variable's cleanup if
6017 they are run on the normal path, but not if they are run on the
6018 exceptional path. We implement this by telling
6019 honor_protect_cleanup_actions to strip the variable cleanup from the
6020 exceptional path. */
6022 static void
6023 wrap_temporary_cleanups (tree init, tree guard)
6025 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6028 /* Generate code to initialize DECL (a local variable). */
6030 static void
6031 initialize_local_var (tree decl, tree init)
6033 tree type = TREE_TYPE (decl);
6034 tree cleanup;
6035 int already_used;
6037 gcc_assert (VAR_P (decl)
6038 || TREE_CODE (decl) == RESULT_DECL);
6039 gcc_assert (!TREE_STATIC (decl));
6041 if (DECL_SIZE (decl) == NULL_TREE)
6043 /* If we used it already as memory, it must stay in memory. */
6044 DECL_INITIAL (decl) = NULL_TREE;
6045 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6046 return;
6049 if (type == error_mark_node)
6050 return;
6052 /* Compute and store the initial value. */
6053 already_used = TREE_USED (decl) || TREE_USED (type);
6054 if (TREE_USED (type))
6055 DECL_READ_P (decl) = 1;
6057 /* Generate a cleanup, if necessary. */
6058 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6060 /* Perform the initialization. */
6061 if (init)
6063 if (TREE_CODE (init) == INIT_EXPR
6064 && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
6066 /* Stick simple initializers in DECL_INITIAL so that
6067 -Wno-init-self works (c++/34772). */
6068 gcc_assert (TREE_OPERAND (init, 0) == decl);
6069 DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
6071 else
6073 int saved_stmts_are_full_exprs_p;
6075 /* If we're only initializing a single object, guard the
6076 destructors of any temporaries used in its initializer with
6077 its destructor. This isn't right for arrays because each
6078 element initialization is a full-expression. */
6079 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6080 wrap_temporary_cleanups (init, cleanup);
6082 gcc_assert (building_stmt_list_p ());
6083 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6084 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6085 finish_expr_stmt (init);
6086 current_stmt_tree ()->stmts_are_full_exprs_p =
6087 saved_stmts_are_full_exprs_p;
6091 /* Set this to 0 so we can tell whether an aggregate which was
6092 initialized was ever used. Don't do this if it has a
6093 destructor, so we don't complain about the 'resource
6094 allocation is initialization' idiom. Now set
6095 attribute((unused)) on types so decls of that type will be
6096 marked used. (see TREE_USED, above.) */
6097 if (TYPE_NEEDS_CONSTRUCTING (type)
6098 && ! already_used
6099 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6100 && DECL_NAME (decl))
6101 TREE_USED (decl) = 0;
6102 else if (already_used)
6103 TREE_USED (decl) = 1;
6105 if (cleanup)
6106 finish_decl_cleanup (decl, cleanup);
6109 /* DECL is a VAR_DECL for a compiler-generated variable with static
6110 storage duration (like a virtual table) whose initializer is a
6111 compile-time constant. Initialize the variable and provide it to the
6112 back end. */
6114 void
6115 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6117 tree init;
6118 gcc_assert (DECL_ARTIFICIAL (decl));
6119 init = build_constructor (TREE_TYPE (decl), v);
6120 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6121 DECL_INITIAL (decl) = init;
6122 DECL_INITIALIZED_P (decl) = 1;
6123 determine_visibility (decl);
6124 layout_var_decl (decl);
6125 maybe_commonize_var (decl);
6126 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6129 /* INIT is the initializer for a variable, as represented by the
6130 parser. Returns true iff INIT is type-dependent. */
6132 static bool
6133 type_dependent_init_p (tree init)
6135 if (TREE_CODE (init) == TREE_LIST)
6136 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6137 return any_type_dependent_elements_p (init);
6138 else if (TREE_CODE (init) == CONSTRUCTOR)
6139 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6141 vec<constructor_elt, va_gc> *elts;
6142 size_t nelts;
6143 size_t i;
6145 elts = CONSTRUCTOR_ELTS (init);
6146 nelts = vec_safe_length (elts);
6147 for (i = 0; i < nelts; ++i)
6148 if (type_dependent_init_p ((*elts)[i].value))
6149 return true;
6151 else
6152 /* It must be a simple expression, e.g., int i = 3; */
6153 return type_dependent_expression_p (init);
6155 return false;
6158 /* INIT is the initializer for a variable, as represented by the
6159 parser. Returns true iff INIT is value-dependent. */
6161 static bool
6162 value_dependent_init_p (tree init)
6164 if (TREE_CODE (init) == TREE_LIST)
6165 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6166 return any_value_dependent_elements_p (init);
6167 else if (TREE_CODE (init) == CONSTRUCTOR)
6168 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6170 vec<constructor_elt, va_gc> *elts;
6171 size_t nelts;
6172 size_t i;
6174 elts = CONSTRUCTOR_ELTS (init);
6175 nelts = vec_safe_length (elts);
6176 for (i = 0; i < nelts; ++i)
6177 if (value_dependent_init_p ((*elts)[i].value))
6178 return true;
6180 else
6181 /* It must be a simple expression, e.g., int i = 3; */
6182 return value_dependent_expression_p (init);
6184 return false;
6187 /* Finish processing of a declaration;
6188 install its line number and initial value.
6189 If the length of an array type is not known before,
6190 it must be determined now, from the initial value, or it is an error.
6192 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6193 true, then INIT is an integral constant expression.
6195 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6196 if the (init) syntax was used. */
6198 void
6199 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6200 tree asmspec_tree, int flags)
6202 tree type;
6203 vec<tree, va_gc> *cleanups = NULL;
6204 const char *asmspec = NULL;
6205 int was_readonly = 0;
6206 bool var_definition_p = false;
6207 tree auto_node;
6209 if (decl == error_mark_node)
6210 return;
6211 else if (! decl)
6213 if (init)
6214 error ("assignment (not initialization) in declaration");
6215 return;
6218 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6219 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6220 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6222 type = TREE_TYPE (decl);
6223 if (type == error_mark_node)
6224 return;
6226 /* If a name was specified, get the string. */
6227 if (at_namespace_scope_p ())
6228 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6229 if (asmspec_tree && asmspec_tree != error_mark_node)
6230 asmspec = TREE_STRING_POINTER (asmspec_tree);
6232 if (current_class_type
6233 && CP_DECL_CONTEXT (decl) == current_class_type
6234 && TYPE_BEING_DEFINED (current_class_type)
6235 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6236 && (DECL_INITIAL (decl) || init))
6237 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6239 if (TREE_CODE (decl) != FUNCTION_DECL
6240 && (auto_node = type_uses_auto (type)))
6242 tree d_init;
6243 if (init == NULL_TREE)
6245 if (DECL_LANG_SPECIFIC (decl)
6246 && DECL_TEMPLATE_INSTANTIATION (decl)
6247 && !DECL_TEMPLATE_INSTANTIATED (decl))
6249 /* init is null because we're deferring instantiating the
6250 initializer until we need it. Well, we need it now. */
6251 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6252 return;
6255 error ("declaration of %q#D has no initializer", decl);
6256 TREE_TYPE (decl) = error_mark_node;
6257 return;
6259 d_init = init;
6260 if (TREE_CODE (d_init) == TREE_LIST)
6261 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6262 tf_warning_or_error);
6263 d_init = resolve_nondeduced_context (d_init);
6264 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6265 auto_node);
6266 if (type == error_mark_node)
6267 return;
6268 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6271 if (!ensure_literal_type_for_constexpr_object (decl))
6272 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6274 if (VAR_P (decl)
6275 && DECL_CLASS_SCOPE_P (decl)
6276 && DECL_INITIALIZED_IN_CLASS_P (decl))
6277 check_static_variable_definition (decl, type);
6279 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6281 tree clone;
6282 if (init == ridpointers[(int)RID_DELETE])
6284 /* FIXME check this is 1st decl. */
6285 DECL_DELETED_FN (decl) = 1;
6286 DECL_DECLARED_INLINE_P (decl) = 1;
6287 DECL_INITIAL (decl) = error_mark_node;
6288 FOR_EACH_CLONE (clone, decl)
6290 DECL_DELETED_FN (clone) = 1;
6291 DECL_DECLARED_INLINE_P (clone) = 1;
6292 DECL_INITIAL (clone) = error_mark_node;
6294 init = NULL_TREE;
6296 else if (init == ridpointers[(int)RID_DEFAULT])
6298 if (defaultable_fn_check (decl))
6299 DECL_DEFAULTED_FN (decl) = 1;
6300 else
6301 DECL_INITIAL (decl) = NULL_TREE;
6305 if (init && VAR_P (decl))
6307 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6308 /* If DECL is a reference, then we want to know whether init is a
6309 reference constant; init_const_expr_p as passed tells us whether
6310 it's an rvalue constant. */
6311 if (TREE_CODE (type) == REFERENCE_TYPE)
6312 init_const_expr_p = potential_constant_expression (init);
6313 if (init_const_expr_p)
6315 /* Set these flags now for templates. We'll update the flags in
6316 store_init_value for instantiations. */
6317 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6318 if (decl_maybe_constant_var_p (decl))
6319 TREE_CONSTANT (decl) = 1;
6323 if (processing_template_decl)
6325 bool type_dependent_p;
6327 /* Add this declaration to the statement-tree. */
6328 if (at_function_scope_p ())
6329 add_decl_expr (decl);
6331 type_dependent_p = dependent_type_p (type);
6333 if (check_for_bare_parameter_packs (init))
6335 init = NULL_TREE;
6336 DECL_INITIAL (decl) = NULL_TREE;
6339 /* Generally, initializers in templates are expanded when the
6340 template is instantiated. But, if DECL is a variable constant
6341 then it can be used in future constant expressions, so its value
6342 must be available. */
6344 if (!VAR_P (decl) || dependent_type_p (type))
6345 /* We can't do anything if the decl has dependent type. */;
6346 else if (init
6347 && init_const_expr_p
6348 && !type_dependent_p
6349 && decl_maybe_constant_var_p (decl)
6350 && !type_dependent_init_p (init)
6351 && !value_dependent_init_p (init))
6353 /* This variable seems to be a non-dependent constant, so process
6354 its initializer. If check_initializer returns non-null the
6355 initialization wasn't constant after all. */
6356 tree init_code;
6357 cleanups = make_tree_vector ();
6358 init_code = check_initializer (decl, init, flags, &cleanups);
6359 if (init_code == NULL_TREE)
6360 init = NULL_TREE;
6361 release_tree_vector (cleanups);
6363 else if (!DECL_PRETTY_FUNCTION_P (decl))
6365 /* Deduce array size even if the initializer is dependent. */
6366 maybe_deduce_size_from_array_init (decl, init);
6367 /* And complain about multiple initializers. */
6368 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6369 && !MAYBE_CLASS_TYPE_P (type))
6370 init = build_x_compound_expr_from_list (init, ELK_INIT,
6371 tf_warning_or_error);
6374 if (init)
6375 DECL_INITIAL (decl) = init;
6376 return;
6379 /* Just store non-static data member initializers for later. */
6380 if (init && TREE_CODE (decl) == FIELD_DECL)
6381 DECL_INITIAL (decl) = init;
6383 /* Take care of TYPE_DECLs up front. */
6384 if (TREE_CODE (decl) == TYPE_DECL)
6386 if (type != error_mark_node
6387 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6389 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6390 warning (0, "shadowing previous type declaration of %q#D", decl);
6391 set_identifier_type_value (DECL_NAME (decl), decl);
6394 /* If we have installed this as the canonical typedef for this
6395 type, and that type has not been defined yet, delay emitting
6396 the debug information for it, as we will emit it later. */
6397 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6398 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6399 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6401 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6402 at_eof);
6403 return;
6406 /* A reference will be modified here, as it is initialized. */
6407 if (! DECL_EXTERNAL (decl)
6408 && TREE_READONLY (decl)
6409 && TREE_CODE (type) == REFERENCE_TYPE)
6411 was_readonly = 1;
6412 TREE_READONLY (decl) = 0;
6415 if (VAR_P (decl))
6417 /* If this is a local variable that will need a mangled name,
6418 register it now. We must do this before processing the
6419 initializer for the variable, since the initialization might
6420 require a guard variable, and since the mangled name of the
6421 guard variable will depend on the mangled name of this
6422 variable. */
6423 if (DECL_FUNCTION_SCOPE_P (decl)
6424 && TREE_STATIC (decl)
6425 && !DECL_ARTIFICIAL (decl))
6427 push_local_name (decl);
6428 if (DECL_CONSTRUCTOR_P (current_function_decl)
6429 || DECL_DESTRUCTOR_P (current_function_decl))
6430 /* Normally local_decls is populated during GIMPLE lowering,
6431 but [cd]tors are never actually compiled directly. We need
6432 to put statics on the list so we can deal with the label
6433 address extension. FIXME. */
6434 add_local_decl (cfun, decl);
6437 /* Convert the initializer to the type of DECL, if we have not
6438 already initialized DECL. */
6439 if (!DECL_INITIALIZED_P (decl)
6440 /* If !DECL_EXTERNAL then DECL is being defined. In the
6441 case of a static data member initialized inside the
6442 class-specifier, there can be an initializer even if DECL
6443 is *not* defined. */
6444 && (!DECL_EXTERNAL (decl) || init))
6446 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6448 tree jclass
6449 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6450 /* Allow libjava/prims.cc define primitive classes. */
6451 if (init != NULL_TREE
6452 || jclass == NULL_TREE
6453 || TREE_CODE (jclass) != TYPE_DECL
6454 || !POINTER_TYPE_P (TREE_TYPE (jclass))
6455 || !same_type_ignoring_top_level_qualifiers_p
6456 (type, TREE_TYPE (TREE_TYPE (jclass))))
6457 error ("Java object %qD not allocated with %<new%>", decl);
6458 init = NULL_TREE;
6460 cleanups = make_tree_vector ();
6461 init = check_initializer (decl, init, flags, &cleanups);
6463 /* Handle:
6465 [dcl.init]
6467 The memory occupied by any object of static storage
6468 duration is zero-initialized at program startup before
6469 any other initialization takes place.
6471 We cannot create an appropriate initializer until after
6472 the type of DECL is finalized. If DECL_INITIAL is set,
6473 then the DECL is statically initialized, and any
6474 necessary zero-initialization has already been performed. */
6475 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6476 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6477 /*nelts=*/NULL_TREE,
6478 /*static_storage_p=*/true);
6479 /* Remember that the initialization for this variable has
6480 taken place. */
6481 DECL_INITIALIZED_P (decl) = 1;
6482 /* This declaration is the definition of this variable,
6483 unless we are initializing a static data member within
6484 the class specifier. */
6485 if (!DECL_EXTERNAL (decl))
6486 var_definition_p = true;
6488 /* If the variable has an array type, lay out the type, even if
6489 there is no initializer. It is valid to index through the
6490 array, and we must get TYPE_ALIGN set correctly on the array
6491 type. */
6492 else if (TREE_CODE (type) == ARRAY_TYPE)
6493 layout_type (type);
6495 if (TREE_STATIC (decl)
6496 && !at_function_scope_p ()
6497 && current_function_decl == NULL)
6498 /* So decl is a global variable or a static member of a
6499 non local class. Record the types it uses
6500 so that we can decide later to emit debug info for them. */
6501 record_types_used_by_current_var_decl (decl);
6503 else if (TREE_CODE (decl) == FIELD_DECL
6504 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6505 error ("non-static data member %qD has Java class type", decl);
6507 /* Add this declaration to the statement-tree. This needs to happen
6508 after the call to check_initializer so that the DECL_EXPR for a
6509 reference temp is added before the DECL_EXPR for the reference itself. */
6510 if (DECL_FUNCTION_SCOPE_P (decl))
6512 /* If we're building a variable sized type, and we might be
6513 reachable other than via the top of the current binding
6514 level, then create a new BIND_EXPR so that we deallocate
6515 the object at the right time. */
6516 if (VAR_P (decl)
6517 && DECL_SIZE (decl)
6518 && !TREE_CONSTANT (DECL_SIZE (decl))
6519 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
6521 tree bind;
6522 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
6523 TREE_SIDE_EFFECTS (bind) = 1;
6524 add_stmt (bind);
6525 BIND_EXPR_BODY (bind) = push_stmt_list ();
6527 add_decl_expr (decl);
6530 /* Let the middle end know about variables and functions -- but not
6531 static data members in uninstantiated class templates. */
6532 if (VAR_OR_FUNCTION_DECL_P (decl))
6534 if (VAR_P (decl))
6536 layout_var_decl (decl);
6537 maybe_commonize_var (decl);
6540 /* This needs to happen after the linkage is set. */
6541 determine_visibility (decl);
6543 if (var_definition_p && TREE_STATIC (decl))
6545 /* If a TREE_READONLY variable needs initialization
6546 at runtime, it is no longer readonly and we need to
6547 avoid MEM_READONLY_P being set on RTL created for it. */
6548 if (init)
6550 if (TREE_READONLY (decl))
6551 TREE_READONLY (decl) = 0;
6552 was_readonly = 0;
6554 else if (was_readonly)
6555 TREE_READONLY (decl) = 1;
6557 /* Likewise if it needs destruction. */
6558 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6559 TREE_READONLY (decl) = 0;
6562 make_rtl_for_nonlocal_decl (decl, init, asmspec);
6564 /* Check for abstractness of the type. Notice that there is no
6565 need to strip array types here since the check for those types
6566 is already done within create_array_type_for_decl. */
6567 abstract_virtuals_error (decl, type);
6569 if (TREE_TYPE (decl) == error_mark_node)
6570 /* No initialization required. */
6572 else if (TREE_CODE (decl) == FUNCTION_DECL)
6574 if (init)
6576 if (init == ridpointers[(int)RID_DEFAULT])
6578 /* An out-of-class default definition is defined at
6579 the point where it is explicitly defaulted. */
6580 if (DECL_DELETED_FN (decl))
6581 maybe_explain_implicit_delete (decl);
6582 else if (DECL_INITIAL (decl) == error_mark_node)
6583 synthesize_method (decl);
6585 else
6586 error ("function %q#D is initialized like a variable", decl);
6588 /* else no initialization required. */
6590 else if (DECL_EXTERNAL (decl)
6591 && ! (DECL_LANG_SPECIFIC (decl)
6592 && DECL_NOT_REALLY_EXTERN (decl)))
6594 if (init)
6595 DECL_INITIAL (decl) = init;
6597 /* A variable definition. */
6598 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6599 /* Initialize the local variable. */
6600 initialize_local_var (decl, init);
6602 /* If a variable is defined, and then a subsequent
6603 definition with external linkage is encountered, we will
6604 get here twice for the same variable. We want to avoid
6605 calling expand_static_init more than once. For variables
6606 that are not static data members, we can call
6607 expand_static_init only when we actually process the
6608 initializer. It is not legal to redeclare a static data
6609 member, so this issue does not arise in that case. */
6610 else if (var_definition_p && TREE_STATIC (decl))
6611 expand_static_init (decl, init);
6614 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6615 reference, insert it in the statement-tree now. */
6616 if (cleanups)
6618 unsigned i; tree t;
6619 FOR_EACH_VEC_ELT (*cleanups, i, t)
6620 push_cleanup (decl, t, false);
6621 release_tree_vector (cleanups);
6624 if (was_readonly)
6625 TREE_READONLY (decl) = 1;
6627 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6630 /* Returns a declaration for a VAR_DECL as if:
6632 extern "C" TYPE NAME;
6634 had been seen. Used to create compiler-generated global
6635 variables. */
6637 static tree
6638 declare_global_var (tree name, tree type)
6640 tree decl;
6642 push_to_top_level ();
6643 decl = build_decl (input_location, VAR_DECL, name, type);
6644 TREE_PUBLIC (decl) = 1;
6645 DECL_EXTERNAL (decl) = 1;
6646 DECL_ARTIFICIAL (decl) = 1;
6647 /* If the user has explicitly declared this variable (perhaps
6648 because the code we are compiling is part of a low-level runtime
6649 library), then it is possible that our declaration will be merged
6650 with theirs by pushdecl. */
6651 decl = pushdecl (decl);
6652 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6653 pop_from_top_level ();
6655 return decl;
6658 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6659 if "__cxa_atexit" is not being used) corresponding to the function
6660 to be called when the program exits. */
6662 static tree
6663 get_atexit_fn_ptr_type (void)
6665 tree fn_type;
6667 if (!atexit_fn_ptr_type_node)
6669 tree arg_type;
6670 if (flag_use_cxa_atexit
6671 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6672 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
6673 arg_type = ptr_type_node;
6674 else
6675 /* The parameter to "atexit" is "void (*)(void)". */
6676 arg_type = NULL_TREE;
6678 fn_type = build_function_type_list (void_type_node,
6679 arg_type, NULL_TREE);
6680 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6683 return atexit_fn_ptr_type_node;
6686 /* Returns a pointer to the `atexit' function. Note that if
6687 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6688 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6690 static tree
6691 get_atexit_node (void)
6693 tree atexit_fndecl;
6694 tree fn_type;
6695 tree fn_ptr_type;
6696 const char *name;
6697 bool use_aeabi_atexit;
6699 if (atexit_node)
6700 return atexit_node;
6702 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6704 /* The declaration for `__cxa_atexit' is:
6706 int __cxa_atexit (void (*)(void *), void *, void *)
6708 We build up the argument types and then the function type
6709 itself. */
6710 tree argtype0, argtype1, argtype2;
6712 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6713 /* First, build the pointer-to-function type for the first
6714 argument. */
6715 fn_ptr_type = get_atexit_fn_ptr_type ();
6716 /* Then, build the rest of the argument types. */
6717 argtype2 = ptr_type_node;
6718 if (use_aeabi_atexit)
6720 argtype1 = fn_ptr_type;
6721 argtype0 = ptr_type_node;
6723 else
6725 argtype1 = ptr_type_node;
6726 argtype0 = fn_ptr_type;
6728 /* And the final __cxa_atexit type. */
6729 fn_type = build_function_type_list (integer_type_node,
6730 argtype0, argtype1, argtype2,
6731 NULL_TREE);
6732 if (use_aeabi_atexit)
6733 name = "__aeabi_atexit";
6734 else
6735 name = "__cxa_atexit";
6737 else
6739 /* The declaration for `atexit' is:
6741 int atexit (void (*)());
6743 We build up the argument types and then the function type
6744 itself. */
6745 fn_ptr_type = get_atexit_fn_ptr_type ();
6746 /* Build the final atexit type. */
6747 fn_type = build_function_type_list (integer_type_node,
6748 fn_ptr_type, NULL_TREE);
6749 name = "atexit";
6752 /* Now, build the function declaration. */
6753 push_lang_context (lang_name_c);
6754 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
6755 mark_used (atexit_fndecl);
6756 pop_lang_context ();
6757 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
6759 return atexit_node;
6762 /* Like get_atexit_node, but for thread-local cleanups. */
6764 static tree
6765 get_thread_atexit_node (void)
6767 /* The declaration for `__cxa_thread_atexit' is:
6769 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
6770 tree fn_type = build_function_type_list (integer_type_node,
6771 get_atexit_fn_ptr_type (),
6772 ptr_type_node, ptr_type_node,
6773 NULL_TREE);
6775 /* Now, build the function declaration. */
6776 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
6777 ECF_LEAF | ECF_NOTHROW);
6778 return decay_conversion (atexit_fndecl, tf_warning_or_error);
6781 /* Returns the __dso_handle VAR_DECL. */
6783 static tree
6784 get_dso_handle_node (void)
6786 if (dso_handle_node)
6787 return dso_handle_node;
6789 /* Declare the variable. */
6790 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6791 ptr_type_node);
6793 #ifdef HAVE_GAS_HIDDEN
6794 if (dso_handle_node != error_mark_node)
6796 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6797 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6799 #endif
6801 return dso_handle_node;
6804 /* Begin a new function with internal linkage whose job will be simply
6805 to destroy some particular variable. */
6807 static GTY(()) int start_cleanup_cnt;
6809 static tree
6810 start_cleanup_fn (void)
6812 char name[32];
6813 tree fntype;
6814 tree fndecl;
6815 bool use_cxa_atexit = flag_use_cxa_atexit
6816 && !targetm.cxx.use_atexit_for_cxa_atexit ();
6818 push_to_top_level ();
6820 /* No need to mangle this. */
6821 push_lang_context (lang_name_c);
6823 /* Build the name of the function. */
6824 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6825 /* Build the function declaration. */
6826 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6827 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6828 /* It's a function with internal linkage, generated by the
6829 compiler. */
6830 TREE_PUBLIC (fndecl) = 0;
6831 DECL_ARTIFICIAL (fndecl) = 1;
6832 /* Make the function `inline' so that it is only emitted if it is
6833 actually needed. It is unlikely that it will be inlined, since
6834 it is only called via a function pointer, but we avoid unnecessary
6835 emissions this way. */
6836 DECL_DECLARED_INLINE_P (fndecl) = 1;
6837 DECL_INTERFACE_KNOWN (fndecl) = 1;
6838 /* Build the parameter. */
6839 if (use_cxa_atexit)
6841 tree parmdecl;
6843 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6844 DECL_CONTEXT (parmdecl) = fndecl;
6845 TREE_USED (parmdecl) = 1;
6846 DECL_READ_P (parmdecl) = 1;
6847 DECL_ARGUMENTS (fndecl) = parmdecl;
6850 pushdecl (fndecl);
6851 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6853 pop_lang_context ();
6855 return current_function_decl;
6858 /* Finish the cleanup function begun by start_cleanup_fn. */
6860 static void
6861 end_cleanup_fn (void)
6863 expand_or_defer_fn (finish_function (0));
6865 pop_from_top_level ();
6868 /* Generate code to handle the destruction of DECL, an object with
6869 static storage duration. */
6871 tree
6872 register_dtor_fn (tree decl)
6874 tree cleanup;
6875 tree addr;
6876 tree compound_stmt;
6877 tree fcall;
6878 tree type;
6879 bool ob_parm, dso_parm, use_dtor;
6880 tree arg0, arg1, arg2;
6881 tree atex_node;
6883 type = TREE_TYPE (decl);
6884 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6885 return void_node;
6887 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
6888 "__aeabi_atexit"), and DECL is a class object, we can just pass the
6889 destructor to "__cxa_atexit"; we don't have to build a temporary
6890 function to do the cleanup. */
6891 dso_parm = (flag_use_cxa_atexit
6892 && !targetm.cxx.use_atexit_for_cxa_atexit ());
6893 ob_parm = (DECL_THREAD_LOCAL_P (decl) || dso_parm);
6894 use_dtor = ob_parm && CLASS_TYPE_P (type);
6895 if (use_dtor)
6897 int idx;
6899 /* Find the destructor. */
6900 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6901 gcc_assert (idx >= 0);
6902 cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
6903 /* Make sure it is accessible. */
6904 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
6905 tf_warning_or_error);
6907 else
6909 /* Call build_cleanup before we enter the anonymous function so
6910 that any access checks will be done relative to the current
6911 scope, rather than the scope of the anonymous function. */
6912 build_cleanup (decl);
6914 /* Now start the function. */
6915 cleanup = start_cleanup_fn ();
6917 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6918 to the original function, rather than the anonymous one. That
6919 will make the back end think that nested functions are in use,
6920 which causes confusion. */
6921 push_deferring_access_checks (dk_no_check);
6922 fcall = build_cleanup (decl);
6923 pop_deferring_access_checks ();
6925 /* Create the body of the anonymous function. */
6926 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6927 finish_expr_stmt (fcall);
6928 finish_compound_stmt (compound_stmt);
6929 end_cleanup_fn ();
6932 /* Call atexit with the cleanup function. */
6933 mark_used (cleanup);
6934 cleanup = build_address (cleanup);
6936 if (DECL_THREAD_LOCAL_P (decl))
6937 atex_node = get_thread_atexit_node ();
6938 else
6939 atex_node = get_atexit_node ();
6941 if (use_dtor)
6943 /* We must convert CLEANUP to the type that "__cxa_atexit"
6944 expects. */
6945 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6946 /* "__cxa_atexit" will pass the address of DECL to the
6947 cleanup function. */
6948 mark_used (decl);
6949 addr = build_address (decl);
6950 /* The declared type of the parameter to "__cxa_atexit" is
6951 "void *". For plain "T*", we could just let the
6952 machinery in cp_build_function_call convert it -- but if the
6953 type is "cv-qualified T *", then we need to convert it
6954 before passing it in, to avoid spurious errors. */
6955 addr = build_nop (ptr_type_node, addr);
6957 else
6958 /* Since the cleanup functions we build ignore the address
6959 they're given, there's no reason to pass the actual address
6960 in, and, in general, it's cheaper to pass NULL than any
6961 other value. */
6962 addr = null_pointer_node;
6964 if (dso_parm)
6965 arg2 = cp_build_addr_expr (get_dso_handle_node (),
6966 tf_warning_or_error);
6967 else if (ob_parm)
6968 /* Just pass NULL to the dso handle parm if we don't actually
6969 have a DSO handle on this target. */
6970 arg2 = null_pointer_node;
6971 else
6972 arg2 = NULL_TREE;
6974 if (ob_parm)
6976 if (!DECL_THREAD_LOCAL_P (decl)
6977 && targetm.cxx.use_aeabi_atexit ())
6979 arg1 = cleanup;
6980 arg0 = addr;
6982 else
6984 arg1 = addr;
6985 arg0 = cleanup;
6988 else
6990 arg0 = cleanup;
6991 arg1 = NULL_TREE;
6993 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
6994 arg0, arg1, arg2, NULL_TREE);
6997 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
6998 is its initializer. Generate code to handle the construction
6999 and destruction of DECL. */
7001 static void
7002 expand_static_init (tree decl, tree init)
7004 gcc_assert (VAR_P (decl));
7005 gcc_assert (TREE_STATIC (decl));
7007 /* Some variables require no dynamic initialization. */
7008 if (!init
7009 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
7011 /* Make sure the destructor is callable. */
7012 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7013 return;
7016 if (DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
7017 && !DECL_FUNCTION_SCOPE_P (decl))
7019 if (init)
7020 error ("non-local variable %qD declared %<__thread%> "
7021 "needs dynamic initialization", decl);
7022 else
7023 error ("non-local variable %qD declared %<__thread%> "
7024 "has a non-trivial destructor", decl);
7025 static bool informed;
7026 if (!informed)
7028 inform (DECL_SOURCE_LOCATION (decl),
7029 "C++11 %<thread_local%> allows dynamic initialization "
7030 "and destruction");
7031 informed = true;
7033 return;
7036 if (DECL_FUNCTION_SCOPE_P (decl))
7038 /* Emit code to perform this initialization but once. */
7039 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
7040 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
7041 tree guard, guard_addr;
7042 tree flag, begin;
7043 /* We don't need thread-safety code for thread-local vars. */
7044 bool thread_guard = (flag_threadsafe_statics
7045 && !DECL_THREAD_LOCAL_P (decl));
7047 /* Emit code to perform this initialization but once. This code
7048 looks like:
7050 static <type> guard;
7051 if (!guard.first_byte) {
7052 if (__cxa_guard_acquire (&guard)) {
7053 bool flag = false;
7054 try {
7055 // Do initialization.
7056 flag = true; __cxa_guard_release (&guard);
7057 // Register variable for destruction at end of program.
7058 } catch {
7059 if (!flag) __cxa_guard_abort (&guard);
7063 Note that the `flag' variable is only set to 1 *after* the
7064 initialization is complete. This ensures that an exception,
7065 thrown during the construction, will cause the variable to
7066 reinitialized when we pass through this code again, as per:
7068 [stmt.dcl]
7070 If the initialization exits by throwing an exception, the
7071 initialization is not complete, so it will be tried again
7072 the next time control enters the declaration.
7074 This process should be thread-safe, too; multiple threads
7075 should not be able to initialize the variable more than
7076 once. */
7078 /* Create the guard variable. */
7079 guard = get_guard (decl);
7081 /* This optimization isn't safe on targets with relaxed memory
7082 consistency. On such targets we force synchronization in
7083 __cxa_guard_acquire. */
7084 if (!targetm.relaxed_ordering || !thread_guard)
7086 /* Begin the conditional initialization. */
7087 if_stmt = begin_if_stmt ();
7088 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
7089 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7092 if (thread_guard)
7094 tree vfntype = NULL_TREE;
7095 tree acquire_name, release_name, abort_name;
7096 tree acquire_fn, release_fn, abort_fn;
7097 guard_addr = build_address (guard);
7099 acquire_name = get_identifier ("__cxa_guard_acquire");
7100 release_name = get_identifier ("__cxa_guard_release");
7101 abort_name = get_identifier ("__cxa_guard_abort");
7102 acquire_fn = identifier_global_value (acquire_name);
7103 release_fn = identifier_global_value (release_name);
7104 abort_fn = identifier_global_value (abort_name);
7105 if (!acquire_fn)
7106 acquire_fn = push_library_fn
7107 (acquire_name, build_function_type_list (integer_type_node,
7108 TREE_TYPE (guard_addr),
7109 NULL_TREE),
7110 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
7111 if (!release_fn || !abort_fn)
7112 vfntype = build_function_type_list (void_type_node,
7113 TREE_TYPE (guard_addr),
7114 NULL_TREE);
7115 if (!release_fn)
7116 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
7117 ECF_NOTHROW | ECF_LEAF);
7118 if (!abort_fn)
7119 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
7120 ECF_NOTHROW | ECF_LEAF);
7122 inner_if_stmt = begin_if_stmt ();
7123 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
7124 inner_if_stmt);
7126 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7127 begin = get_target_expr (boolean_false_node);
7128 flag = TARGET_EXPR_SLOT (begin);
7130 TARGET_EXPR_CLEANUP (begin)
7131 = build3 (COND_EXPR, void_type_node, flag,
7132 void_node,
7133 build_call_n (abort_fn, 1, guard_addr));
7134 CLEANUP_EH_ONLY (begin) = 1;
7136 /* Do the initialization itself. */
7137 init = add_stmt_to_compound (begin, init);
7138 init = add_stmt_to_compound
7139 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7140 init = add_stmt_to_compound
7141 (init, build_call_n (release_fn, 1, guard_addr));
7143 else
7144 init = add_stmt_to_compound (init, set_guard (guard));
7146 /* Use atexit to register a function for destroying this static
7147 variable. */
7148 init = add_stmt_to_compound (init, register_dtor_fn (decl));
7150 finish_expr_stmt (init);
7152 if (thread_guard)
7154 finish_compound_stmt (inner_then_clause);
7155 finish_then_clause (inner_if_stmt);
7156 finish_if_stmt (inner_if_stmt);
7159 if (!targetm.relaxed_ordering || !thread_guard)
7161 finish_compound_stmt (then_clause);
7162 finish_then_clause (if_stmt);
7163 finish_if_stmt (if_stmt);
7166 else if (DECL_THREAD_LOCAL_P (decl))
7167 tls_aggregates = tree_cons (init, decl, tls_aggregates);
7168 else
7169 static_aggregates = tree_cons (init, decl, static_aggregates);
7173 /* Make TYPE a complete type based on INITIAL_VALUE.
7174 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7175 2 if there was no information (in which case assume 0 if DO_DEFAULT),
7176 3 if the initializer list is empty (in pedantic mode). */
7179 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7181 int failure;
7182 tree type, elt_type;
7184 /* Don't get confused by a CONSTRUCTOR for some other type. */
7185 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
7186 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value))
7187 return 1;
7189 if (initial_value)
7191 unsigned HOST_WIDE_INT i;
7192 tree value;
7194 /* An array of character type can be initialized from a
7195 brace-enclosed string constant.
7197 FIXME: this code is duplicated from reshape_init. Probably
7198 we should just call reshape_init here? */
7199 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7200 && TREE_CODE (initial_value) == CONSTRUCTOR
7201 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
7203 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
7204 tree value = (*v)[0].value;
7206 if (TREE_CODE (value) == STRING_CST
7207 && v->length () == 1)
7208 initial_value = value;
7211 /* If any of the elements are parameter packs, we can't actually
7212 complete this type now because the array size is dependent. */
7213 if (TREE_CODE (initial_value) == CONSTRUCTOR)
7215 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
7216 i, value)
7218 if (PACK_EXPANSION_P (value))
7219 return 0;
7224 failure = complete_array_type (ptype, initial_value, do_default);
7226 /* We can create the array before the element type is complete, which
7227 means that we didn't have these two bits set in the original type
7228 either. In completing the type, we are expected to propagate these
7229 bits. See also complete_type which does the same thing for arrays
7230 of fixed size. */
7231 type = *ptype;
7232 if (TYPE_DOMAIN (type))
7234 elt_type = TREE_TYPE (type);
7235 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7236 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7237 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7240 return failure;
7243 /* As above, but either give an error or reject zero-size arrays, depending
7244 on COMPLAIN. */
7247 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7248 bool do_default, tsubst_flags_t complain)
7250 int failure;
7251 bool sfinae = !(complain & tf_error);
7252 /* In SFINAE context we can't be lenient about zero-size arrays. */
7253 if (sfinae)
7254 ++pedantic;
7255 failure = cp_complete_array_type (ptype, initial_value, do_default);
7256 if (sfinae)
7257 --pedantic;
7258 if (failure)
7260 if (sfinae)
7261 /* Not an error. */;
7262 else if (failure == 1)
7263 error ("initializer fails to determine size of %qT", *ptype);
7264 else if (failure == 2)
7266 if (do_default)
7267 error ("array size missing in %qT", *ptype);
7269 else if (failure == 3)
7270 error ("zero-size array %qT", *ptype);
7271 *ptype = error_mark_node;
7273 return failure;
7276 /* Return zero if something is declared to be a member of type
7277 CTYPE when in the context of CUR_TYPE. STRING is the error
7278 message to print in that case. Otherwise, quietly return 1. */
7280 static int
7281 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7283 if (ctype && ctype != cur_type)
7285 if (flags == DTOR_FLAG)
7286 error ("destructor for alien class %qT cannot be a member", ctype);
7287 else
7288 error ("constructor for alien class %qT cannot be a member", ctype);
7289 return 0;
7291 return 1;
7294 /* Subroutine of `grokdeclarator'. */
7296 /* Generate errors possibly applicable for a given set of specifiers.
7297 This is for ARM $7.1.2. */
7299 static void
7300 bad_specifiers (tree object,
7301 enum bad_spec_place type,
7302 int virtualp,
7303 int quals,
7304 int inlinep,
7305 int friendp,
7306 int raises)
7308 switch (type)
7310 case BSP_VAR:
7311 if (virtualp)
7312 error ("%qD declared as a %<virtual%> variable", object);
7313 if (inlinep)
7314 error ("%qD declared as an %<inline%> variable", object);
7315 if (quals)
7316 error ("%<const%> and %<volatile%> function specifiers on "
7317 "%qD invalid in variable declaration", object);
7318 break;
7319 case BSP_PARM:
7320 if (virtualp)
7321 error ("%qD declared as a %<virtual%> parameter", object);
7322 if (inlinep)
7323 error ("%qD declared as an %<inline%> parameter", object);
7324 if (quals)
7325 error ("%<const%> and %<volatile%> function specifiers on "
7326 "%qD invalid in parameter declaration", object);
7327 break;
7328 case BSP_TYPE:
7329 if (virtualp)
7330 error ("%qD declared as a %<virtual%> type", object);
7331 if (inlinep)
7332 error ("%qD declared as an %<inline%> type", object);
7333 if (quals)
7334 error ("%<const%> and %<volatile%> function specifiers on "
7335 "%qD invalid in type declaration", object);
7336 break;
7337 case BSP_FIELD:
7338 if (virtualp)
7339 error ("%qD declared as a %<virtual%> field", object);
7340 if (inlinep)
7341 error ("%qD declared as an %<inline%> field", object);
7342 if (quals)
7343 error ("%<const%> and %<volatile%> function specifiers on "
7344 "%qD invalid in field declaration", object);
7345 break;
7346 default:
7347 gcc_unreachable();
7349 if (friendp)
7350 error ("%q+D declared as a friend", object);
7351 if (raises
7352 && (TREE_CODE (object) == TYPE_DECL
7353 || (!TYPE_PTRFN_P (TREE_TYPE (object))
7354 && !TYPE_REFFN_P (TREE_TYPE (object))
7355 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7356 error ("%q+D declared with an exception specification", object);
7359 /* DECL is a member function or static data member and is presently
7360 being defined. Check that the definition is taking place in a
7361 valid namespace. */
7363 static void
7364 check_class_member_definition_namespace (tree decl)
7366 /* These checks only apply to member functions and static data
7367 members. */
7368 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
7369 /* We check for problems with specializations in pt.c in
7370 check_specialization_namespace, where we can issue better
7371 diagnostics. */
7372 if (processing_specialization)
7373 return;
7374 /* There are no restrictions on the placement of
7375 explicit instantiations. */
7376 if (processing_explicit_instantiation)
7377 return;
7378 /* [class.mfct]
7380 A member function definition that appears outside of the
7381 class definition shall appear in a namespace scope enclosing
7382 the class definition.
7384 [class.static.data]
7386 The definition for a static data member shall appear in a
7387 namespace scope enclosing the member's class definition. */
7388 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7389 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7390 decl, DECL_CONTEXT (decl));
7393 /* Build a PARM_DECL for the "this" parameter. TYPE is the
7394 METHOD_TYPE for a non-static member function; QUALS are the
7395 cv-qualifiers that apply to the function. */
7397 tree
7398 build_this_parm (tree type, cp_cv_quals quals)
7400 tree this_type;
7401 tree qual_type;
7402 tree parm;
7403 cp_cv_quals this_quals;
7405 if (CLASS_TYPE_P (type))
7407 this_type
7408 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7409 this_type = build_pointer_type (this_type);
7411 else
7412 this_type = type_of_this_parm (type);
7413 /* The `this' parameter is implicitly `const'; it cannot be
7414 assigned to. */
7415 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7416 qual_type = cp_build_qualified_type (this_type, this_quals);
7417 parm = build_artificial_parm (this_identifier, qual_type);
7418 cp_apply_type_quals_to_decl (this_quals, parm);
7419 return parm;
7422 /* DECL is a static member function. Complain if it was declared
7423 with function-cv-quals. */
7425 static void
7426 check_static_quals (tree decl, cp_cv_quals quals)
7428 if (quals != TYPE_UNQUALIFIED)
7429 error ("static member function %q#D declared with type qualifiers",
7430 decl);
7433 /* Helper function. Replace the temporary this parameter injected
7434 during cp_finish_omp_declare_simd with the real this parameter. */
7436 static tree
7437 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
7439 tree this_parm = (tree) data;
7440 if (TREE_CODE (*tp) == PARM_DECL
7441 && DECL_NAME (*tp) == this_identifier
7442 && *tp != this_parm)
7443 *tp = this_parm;
7444 else if (TYPE_P (*tp))
7445 *walk_subtrees = 0;
7446 return NULL_TREE;
7449 /* CTYPE is class type, or null if non-class.
7450 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7451 or METHOD_TYPE.
7452 DECLARATOR is the function's name.
7453 PARMS is a chain of PARM_DECLs for the function.
7454 VIRTUALP is truthvalue of whether the function is virtual or not.
7455 FLAGS are to be passed through to `grokclassfn'.
7456 QUALS are qualifiers indicating whether the function is `const'
7457 or `volatile'.
7458 RAISES is a list of exceptions that this function can raise.
7459 CHECK is 1 if we must find this method in CTYPE, 0 if we should
7460 not look, and -1 if we should not call `grokclassfn' at all.
7462 SFK is the kind of special function (if any) for the new function.
7464 Returns `NULL_TREE' if something goes wrong, after issuing
7465 applicable error messages. */
7467 static tree
7468 grokfndecl (tree ctype,
7469 tree type,
7470 tree declarator,
7471 tree parms,
7472 tree orig_declarator,
7473 int virtualp,
7474 enum overload_flags flags,
7475 cp_cv_quals quals,
7476 cp_ref_qualifier rqual,
7477 tree raises,
7478 int check,
7479 int friendp,
7480 int publicp,
7481 int inlinep,
7482 special_function_kind sfk,
7483 bool funcdef_flag,
7484 int template_count,
7485 tree in_namespace,
7486 tree* attrlist,
7487 location_t location)
7489 tree decl;
7490 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7491 tree t;
7493 if (rqual)
7494 type = build_ref_qualified_type (type, rqual);
7495 if (raises)
7496 type = build_exception_variant (type, raises);
7498 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7500 /* If we have an explicit location, use it, otherwise use whatever
7501 build_lang_decl used (probably input_location). */
7502 if (location != UNKNOWN_LOCATION)
7503 DECL_SOURCE_LOCATION (decl) = location;
7505 if (TREE_CODE (type) == METHOD_TYPE)
7507 tree parm;
7508 parm = build_this_parm (type, quals);
7509 DECL_CHAIN (parm) = parms;
7510 parms = parm;
7512 DECL_ARGUMENTS (decl) = parms;
7513 for (t = parms; t; t = DECL_CHAIN (t))
7514 DECL_CONTEXT (t) = decl;
7515 /* Propagate volatile out from type to decl. */
7516 if (TYPE_VOLATILE (type))
7517 TREE_THIS_VOLATILE (decl) = 1;
7519 /* Setup decl according to sfk. */
7520 switch (sfk)
7522 case sfk_constructor:
7523 case sfk_copy_constructor:
7524 case sfk_move_constructor:
7525 DECL_CONSTRUCTOR_P (decl) = 1;
7526 break;
7527 case sfk_destructor:
7528 DECL_DESTRUCTOR_P (decl) = 1;
7529 break;
7530 default:
7531 break;
7534 /* If pointers to member functions use the least significant bit to
7535 indicate whether a function is virtual, ensure a pointer
7536 to this function will have that bit clear. */
7537 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7538 && TREE_CODE (type) == METHOD_TYPE
7539 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7540 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7542 if (friendp
7543 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7545 if (funcdef_flag)
7546 error
7547 ("defining explicit specialization %qD in friend declaration",
7548 orig_declarator);
7549 else
7551 tree fns = TREE_OPERAND (orig_declarator, 0);
7552 tree args = TREE_OPERAND (orig_declarator, 1);
7554 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7556 /* Something like `template <class T> friend void f<T>()'. */
7557 error ("invalid use of template-id %qD in declaration "
7558 "of primary template",
7559 orig_declarator);
7560 return NULL_TREE;
7564 /* A friend declaration of the form friend void f<>(). Record
7565 the information in the TEMPLATE_ID_EXPR. */
7566 SET_DECL_IMPLICIT_INSTANTIATION (decl);
7568 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
7569 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7571 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7572 if (TREE_PURPOSE (t)
7573 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7575 error ("default arguments are not allowed in declaration "
7576 "of friend template specialization %qD",
7577 decl);
7578 return NULL_TREE;
7581 if (inlinep & 1)
7582 error ("%<inline%> is not allowed in declaration of friend "
7583 "template specialization %qD",
7584 decl);
7585 if (inlinep & 2)
7586 error ("%<constexpr%> is not allowed in declaration of friend "
7587 "template specialization %qD",
7588 decl);
7589 if (inlinep)
7590 return NULL_TREE;
7594 /* If this decl has namespace scope, set that up. */
7595 if (in_namespace)
7596 set_decl_namespace (decl, in_namespace, friendp);
7597 else if (!ctype)
7598 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7600 /* `main' and builtins have implicit 'C' linkage. */
7601 if ((MAIN_NAME_P (declarator)
7602 || (IDENTIFIER_LENGTH (declarator) > 10
7603 && IDENTIFIER_POINTER (declarator)[0] == '_'
7604 && IDENTIFIER_POINTER (declarator)[1] == '_'
7605 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
7606 || (targetcm.cxx_implicit_extern_c
7607 && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
7608 && current_lang_name == lang_name_cplusplus
7609 && ctype == NULL_TREE
7610 && DECL_FILE_SCOPE_P (decl))
7611 SET_DECL_LANGUAGE (decl, lang_c);
7613 /* Should probably propagate const out from type to decl I bet (mrs). */
7614 if (staticp)
7616 DECL_STATIC_FUNCTION_P (decl) = 1;
7617 DECL_CONTEXT (decl) = ctype;
7620 if (ctype)
7622 DECL_CONTEXT (decl) = ctype;
7623 if (funcdef_flag)
7624 check_class_member_definition_namespace (decl);
7627 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7629 if (PROCESSING_REAL_TEMPLATE_DECL_P())
7630 error ("cannot declare %<::main%> to be a template");
7631 if (inlinep & 1)
7632 error ("cannot declare %<::main%> to be inline");
7633 if (inlinep & 2)
7634 error ("cannot declare %<::main%> to be constexpr");
7635 if (!publicp)
7636 error ("cannot declare %<::main%> to be static");
7637 inlinep = 0;
7638 publicp = 1;
7641 /* Members of anonymous types and local classes have no linkage; make
7642 them internal. If a typedef is made later, this will be changed. */
7643 if (ctype && (TYPE_ANONYMOUS_P (ctype)
7644 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7645 publicp = 0;
7647 if (publicp && cxx_dialect == cxx98)
7649 /* [basic.link]: A name with no linkage (notably, the name of a class
7650 or enumeration declared in a local scope) shall not be used to
7651 declare an entity with linkage.
7653 DR 757 relaxes this restriction for C++0x. */
7654 no_linkage_error (decl);
7657 TREE_PUBLIC (decl) = publicp;
7658 if (! publicp)
7660 DECL_INTERFACE_KNOWN (decl) = 1;
7661 DECL_NOT_REALLY_EXTERN (decl) = 1;
7664 /* If the declaration was declared inline, mark it as such. */
7665 if (inlinep)
7666 DECL_DECLARED_INLINE_P (decl) = 1;
7667 if (inlinep & 2)
7668 DECL_DECLARED_CONSTEXPR_P (decl) = true;
7670 DECL_EXTERNAL (decl) = 1;
7671 if (TREE_CODE (type) == FUNCTION_TYPE)
7673 if (quals)
7675 error (ctype
7676 ? G_("static member function %qD cannot have cv-qualifier")
7677 : G_("non-member function %qD cannot have cv-qualifier"),
7678 decl);
7679 quals = TYPE_UNQUALIFIED;
7682 if (rqual)
7684 error (ctype
7685 ? G_("static member function %qD cannot have ref-qualifier")
7686 : G_("non-member function %qD cannot have ref-qualifier"),
7687 decl);
7688 rqual = REF_QUAL_NONE;
7692 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7693 && !grok_op_properties (decl, /*complain=*/true))
7694 return NULL_TREE;
7695 else if (UDLIT_OPER_P (DECL_NAME (decl)))
7697 bool long_long_unsigned_p;
7698 bool long_double_p;
7699 const char *suffix = NULL;
7700 /* [over.literal]/6: Literal operators shall not have C linkage. */
7701 if (DECL_LANGUAGE (decl) == lang_c)
7703 error ("literal operator with C linkage");
7704 return NULL_TREE;
7707 if (DECL_NAMESPACE_SCOPE_P (decl))
7709 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7710 &long_double_p))
7712 error ("%qD has invalid argument list", decl);
7713 return NULL_TREE;
7716 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7717 if (long_long_unsigned_p)
7719 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
7720 warning (0, "integer suffix %<%s%>"
7721 " shadowed by implementation", suffix);
7723 else if (long_double_p)
7725 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
7726 warning (0, "floating point suffix %<%s%>"
7727 " shadowed by implementation", suffix);
7730 else
7732 error ("%qD must be a non-member function", decl);
7733 return NULL_TREE;
7737 if (funcdef_flag)
7738 /* Make the init_value nonzero so pushdecl knows this is not
7739 tentative. error_mark_node is replaced later with the BLOCK. */
7740 DECL_INITIAL (decl) = error_mark_node;
7742 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7743 TREE_NOTHROW (decl) = 1;
7745 if (flag_openmp || flag_cilkplus)
7747 /* Adjust "omp declare simd" attributes. */
7748 tree ods = lookup_attribute ("omp declare simd", *attrlist);
7749 if (ods)
7751 tree attr;
7752 for (attr = ods; attr;
7753 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
7755 if (TREE_CODE (type) == METHOD_TYPE)
7756 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
7757 DECL_ARGUMENTS (decl), NULL);
7758 if (TREE_VALUE (attr) != NULL_TREE)
7760 tree cl = TREE_VALUE (TREE_VALUE (attr));
7761 cl = c_omp_declare_simd_clauses_to_numbers
7762 (DECL_ARGUMENTS (decl), cl);
7763 if (cl)
7764 TREE_VALUE (TREE_VALUE (attr)) = cl;
7765 else
7766 TREE_VALUE (attr) = NULL_TREE;
7772 /* Caller will do the rest of this. */
7773 if (check < 0)
7774 return decl;
7776 if (ctype != NULL_TREE)
7777 grokclassfn (ctype, decl, flags);
7779 /* 12.4/3 */
7780 if (cxx_dialect >= cxx11
7781 && DECL_DESTRUCTOR_P (decl)
7782 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
7783 && !processing_template_decl)
7784 deduce_noexcept_on_destructor (decl);
7786 decl = check_explicit_specialization (orig_declarator, decl,
7787 template_count,
7788 2 * funcdef_flag +
7789 4 * (friendp != 0));
7790 if (decl == error_mark_node)
7791 return NULL_TREE;
7793 if (DECL_STATIC_FUNCTION_P (decl))
7794 check_static_quals (decl, quals);
7796 if (attrlist)
7798 cplus_decl_attributes (&decl, *attrlist, 0);
7799 *attrlist = NULL_TREE;
7802 /* Check main's type after attributes have been applied. */
7803 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7805 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7806 integer_type_node))
7808 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7809 tree newtype;
7810 error ("%<::main%> must return %<int%>");
7811 newtype = build_function_type (integer_type_node, oldtypeargs);
7812 TREE_TYPE (decl) = newtype;
7814 if (warn_main)
7815 check_main_parameter_types (decl);
7818 if (ctype != NULL_TREE
7819 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7820 && check)
7822 tree old_decl = check_classfn (ctype, decl,
7823 (processing_template_decl
7824 > template_class_depth (ctype))
7825 ? current_template_parms
7826 : NULL_TREE);
7828 if (old_decl == error_mark_node)
7829 return NULL_TREE;
7831 if (old_decl)
7833 tree ok;
7834 tree pushed_scope;
7836 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7837 /* Because grokfndecl is always supposed to return a
7838 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7839 here. We depend on our callers to figure out that its
7840 really a template that's being returned. */
7841 old_decl = DECL_TEMPLATE_RESULT (old_decl);
7843 if (DECL_STATIC_FUNCTION_P (old_decl)
7844 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7846 /* Remove the `this' parm added by grokclassfn. */
7847 revert_static_member_fn (decl);
7848 check_static_quals (decl, quals);
7850 if (DECL_ARTIFICIAL (old_decl))
7852 error ("definition of implicitly-declared %qD", old_decl);
7853 return NULL_TREE;
7855 else if (DECL_DEFAULTED_FN (old_decl))
7857 error ("definition of explicitly-defaulted %q+D", decl);
7858 error ("%q+#D explicitly defaulted here", old_decl);
7859 return NULL_TREE;
7862 /* Since we've smashed OLD_DECL to its
7863 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
7864 if (TREE_CODE (decl) == TEMPLATE_DECL)
7865 decl = DECL_TEMPLATE_RESULT (decl);
7867 /* Attempt to merge the declarations. This can fail, in
7868 the case of some invalid specialization declarations. */
7869 pushed_scope = push_scope (ctype);
7870 ok = duplicate_decls (decl, old_decl, friendp);
7871 if (pushed_scope)
7872 pop_scope (pushed_scope);
7873 if (!ok)
7875 error ("no %q#D member function declared in class %qT",
7876 decl, ctype);
7877 return NULL_TREE;
7879 if (ok == error_mark_node)
7880 return NULL_TREE;
7881 return old_decl;
7885 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7886 return NULL_TREE;
7888 if (ctype == NULL_TREE || check)
7889 return decl;
7891 if (virtualp)
7892 DECL_VIRTUAL_P (decl) = 1;
7894 return decl;
7897 /* decl is a FUNCTION_DECL.
7898 specifiers are the parsed virt-specifiers.
7900 Set flags to reflect the virt-specifiers.
7902 Returns decl. */
7904 static tree
7905 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7907 if (decl == NULL_TREE)
7908 return decl;
7909 if (specifiers & VIRT_SPEC_OVERRIDE)
7910 DECL_OVERRIDE_P (decl) = 1;
7911 if (specifiers & VIRT_SPEC_FINAL)
7912 DECL_FINAL_P (decl) = 1;
7913 return decl;
7916 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
7917 the linkage that DECL will receive in the object file. */
7919 static void
7920 set_linkage_for_static_data_member (tree decl)
7922 /* A static data member always has static storage duration and
7923 external linkage. Note that static data members are forbidden in
7924 local classes -- the only situation in which a class has
7925 non-external linkage. */
7926 TREE_PUBLIC (decl) = 1;
7927 TREE_STATIC (decl) = 1;
7928 /* For non-template classes, static data members are always put
7929 out in exactly those files where they are defined, just as
7930 with ordinary namespace-scope variables. */
7931 if (!processing_template_decl)
7932 DECL_INTERFACE_KNOWN (decl) = 1;
7935 /* Create a VAR_DECL named NAME with the indicated TYPE.
7937 If SCOPE is non-NULL, it is the class type or namespace containing
7938 the variable. If SCOPE is NULL, the variable should is created in
7939 the innermost enclosing scope. */
7941 static tree
7942 grokvardecl (tree type,
7943 tree name,
7944 const cp_decl_specifier_seq *declspecs,
7945 int initialized,
7946 int constp,
7947 tree scope)
7949 tree decl;
7950 tree explicit_scope;
7952 gcc_assert (!name || identifier_p (name));
7954 /* Compute the scope in which to place the variable, but remember
7955 whether or not that scope was explicitly specified by the user. */
7956 explicit_scope = scope;
7957 if (!scope)
7959 /* An explicit "extern" specifier indicates a namespace-scope
7960 variable. */
7961 if (declspecs->storage_class == sc_extern)
7962 scope = current_decl_namespace ();
7963 else if (!at_function_scope_p ())
7964 scope = current_scope ();
7967 if (scope
7968 && (/* If the variable is a namespace-scope variable declared in a
7969 template, we need DECL_LANG_SPECIFIC. */
7970 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7971 /* Similarly for namespace-scope variables with language linkage
7972 other than C++. */
7973 || (TREE_CODE (scope) == NAMESPACE_DECL
7974 && current_lang_name != lang_name_cplusplus)
7975 /* Similarly for static data members. */
7976 || TYPE_P (scope)))
7977 decl = build_lang_decl (VAR_DECL, name, type);
7978 else
7979 decl = build_decl (input_location, VAR_DECL, name, type);
7981 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7982 set_decl_namespace (decl, explicit_scope, 0);
7983 else
7984 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7986 if (declspecs->storage_class == sc_extern)
7988 DECL_THIS_EXTERN (decl) = 1;
7989 DECL_EXTERNAL (decl) = !initialized;
7992 if (DECL_CLASS_SCOPE_P (decl))
7994 set_linkage_for_static_data_member (decl);
7995 /* This function is only called with out-of-class definitions. */
7996 DECL_EXTERNAL (decl) = 0;
7997 check_class_member_definition_namespace (decl);
7999 /* At top level, either `static' or no s.c. makes a definition
8000 (perhaps tentative), and absence of `static' makes it public. */
8001 else if (toplevel_bindings_p ())
8003 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
8004 && (DECL_THIS_EXTERN (decl) || ! constp));
8005 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8007 /* Not at top level, only `static' makes a static definition. */
8008 else
8010 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8011 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8014 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
8016 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8017 set_decl_tls_model (decl, decl_default_tls_model (decl));
8018 if (declspecs->gnu_thread_keyword_p)
8019 DECL_GNU_TLS_P (decl) = true;
8022 /* If the type of the decl has no linkage, make sure that we'll
8023 notice that in mark_used. */
8024 if (cxx_dialect > cxx98
8025 && decl_linkage (decl) != lk_none
8026 && DECL_LANG_SPECIFIC (decl) == NULL
8027 && !DECL_EXTERN_C_P (decl)
8028 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
8029 retrofit_lang_decl (decl);
8031 if (TREE_PUBLIC (decl))
8033 /* [basic.link]: A name with no linkage (notably, the name of a class
8034 or enumeration declared in a local scope) shall not be used to
8035 declare an entity with linkage.
8037 DR 757 relaxes this restriction for C++0x. */
8038 if (cxx_dialect < cxx11)
8039 no_linkage_error (decl);
8041 else
8042 DECL_INTERFACE_KNOWN (decl) = 1;
8044 return decl;
8047 /* Create and return a canonical pointer to member function type, for
8048 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8050 tree
8051 build_ptrmemfunc_type (tree type)
8053 tree field, fields;
8054 tree t;
8055 tree unqualified_variant = NULL_TREE;
8057 if (type == error_mark_node)
8058 return type;
8060 /* If a canonical type already exists for this type, use it. We use
8061 this method instead of type_hash_canon, because it only does a
8062 simple equality check on the list of field members. */
8064 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8065 return t;
8067 /* Make sure that we always have the unqualified pointer-to-member
8068 type first. */
8069 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
8070 unqualified_variant
8071 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8073 t = make_node (RECORD_TYPE);
8075 /* Let the front end know this is a pointer to member function. */
8076 TYPE_PTRMEMFUNC_FLAG (t) = 1;
8078 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
8079 fields = field;
8081 field = build_decl (input_location, FIELD_DECL, delta_identifier,
8082 delta_type_node);
8083 DECL_CHAIN (field) = fields;
8084 fields = field;
8086 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8088 /* Zap out the name so that the back end will give us the debugging
8089 information for this anonymous RECORD_TYPE. */
8090 TYPE_NAME (t) = NULL_TREE;
8092 /* If this is not the unqualified form of this pointer-to-member
8093 type, set the TYPE_MAIN_VARIANT for this type to be the
8094 unqualified type. Since they are actually RECORD_TYPEs that are
8095 not variants of each other, we must do this manually.
8096 As we just built a new type there is no need to do yet another copy. */
8097 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
8099 int type_quals = cp_type_quals (type);
8100 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
8101 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
8102 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
8103 TYPE_MAIN_VARIANT (t) = unqualified_variant;
8104 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8105 TYPE_NEXT_VARIANT (unqualified_variant) = t;
8108 /* Cache this pointer-to-member type so that we can find it again
8109 later. */
8110 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8112 if (TYPE_STRUCTURAL_EQUALITY_P (type))
8113 SET_TYPE_STRUCTURAL_EQUALITY (t);
8114 else if (TYPE_CANONICAL (type) != type)
8115 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
8117 return t;
8120 /* Create and return a pointer to data member type. */
8122 tree
8123 build_ptrmem_type (tree class_type, tree member_type)
8125 if (TREE_CODE (member_type) == METHOD_TYPE)
8127 cp_cv_quals quals = type_memfn_quals (member_type);
8128 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
8129 member_type = build_memfn_type (member_type, class_type, quals, rqual);
8130 return build_ptrmemfunc_type (build_pointer_type (member_type));
8132 else
8134 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
8135 return build_offset_type (class_type, member_type);
8139 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8140 Check to see that the definition is valid. Issue appropriate error
8141 messages. Return 1 if the definition is particularly bad, or 0
8142 otherwise. */
8144 static int
8145 check_static_variable_definition (tree decl, tree type)
8147 /* Can't check yet if we don't know the type. */
8148 if (dependent_type_p (type))
8149 return 0;
8150 /* If DECL is declared constexpr, we'll do the appropriate checks
8151 in check_initializer. */
8152 if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8153 return 0;
8154 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8156 if (!COMPLETE_TYPE_P (type))
8157 error ("in-class initialization of static data member %q#D of "
8158 "incomplete type", decl);
8159 else if (literal_type_p (type))
8160 permerror (input_location,
8161 "%<constexpr%> needed for in-class initialization of "
8162 "static data member %q#D of non-integral type", decl);
8163 else
8164 error ("in-class initialization of static data member %q#D of "
8165 "non-literal type", decl);
8166 return 1;
8169 /* Motion 10 at San Diego: If a static const integral data member is
8170 initialized with an integral constant expression, the initializer
8171 may appear either in the declaration (within the class), or in
8172 the definition, but not both. If it appears in the class, the
8173 member is a member constant. The file-scope definition is always
8174 required. */
8175 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8177 error ("invalid in-class initialization of static data member "
8178 "of non-integral type %qT",
8179 type);
8180 return 1;
8182 else if (!CP_TYPE_CONST_P (type))
8183 error ("ISO C++ forbids in-class initialization of non-const "
8184 "static member %qD",
8185 decl);
8186 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8187 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8188 "%qD of non-integral type %qT", decl, type);
8190 return 0;
8193 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
8194 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8195 expressions out into temporary variables so that walk_tree doesn't
8196 step into them (c++/15764). */
8198 static tree
8199 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8201 struct pointer_set_t *pset = (struct pointer_set_t *)data;
8202 tree expr = *expr_p;
8203 if (TREE_CODE (expr) == SAVE_EXPR)
8205 tree op = TREE_OPERAND (expr, 0);
8206 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8207 if (TREE_SIDE_EFFECTS (op))
8208 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8209 *walk_subtrees = 0;
8211 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8212 *walk_subtrees = 0;
8213 return NULL;
8216 /* Entry point for the above. */
8218 static void
8219 stabilize_vla_size (tree size)
8221 struct pointer_set_t *pset = pointer_set_create ();
8222 /* Break out any function calls into temporary variables. */
8223 cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
8224 pointer_set_destroy (pset);
8227 /* Helper function for compute_array_index_type. Look for SIZEOF_EXPR
8228 not inside of SAVE_EXPR and fold them. */
8230 static tree
8231 fold_sizeof_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8233 tree expr = *expr_p;
8234 if (TREE_CODE (expr) == SAVE_EXPR || TYPE_P (expr))
8235 *walk_subtrees = 0;
8236 else if (TREE_CODE (expr) == SIZEOF_EXPR)
8238 *(bool *)data = true;
8239 if (SIZEOF_EXPR_TYPE_P (expr))
8240 expr = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (expr, 0)),
8241 SIZEOF_EXPR, false);
8242 else if (TYPE_P (TREE_OPERAND (expr, 0)))
8243 expr = cxx_sizeof_or_alignof_type (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8244 false);
8245 else
8246 expr = cxx_sizeof_or_alignof_expr (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8247 false);
8248 if (expr == error_mark_node)
8249 expr = size_one_node;
8250 *expr_p = expr;
8251 *walk_subtrees = 0;
8253 return NULL;
8256 /* Given the SIZE (i.e., number of elements) in an array, compute an
8257 appropriate index type for the array. If non-NULL, NAME is the
8258 name of the thing being declared. */
8260 tree
8261 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8263 tree itype;
8264 tree osize = size;
8266 if (error_operand_p (size))
8267 return error_mark_node;
8269 if (!type_dependent_expression_p (size))
8271 tree type = TREE_TYPE (size);
8273 mark_rvalue_use (size);
8275 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
8276 && TREE_SIDE_EFFECTS (size))
8277 /* In C++98, we mark a non-constant array bound with a magic
8278 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
8279 else
8281 size = fold_non_dependent_expr_sfinae (size, complain);
8283 if (CLASS_TYPE_P (type)
8284 && CLASSTYPE_LITERAL_P (type))
8286 size = build_expr_type_conversion (WANT_INT, size, true);
8287 if (!size)
8289 if (!(complain & tf_error))
8290 return error_mark_node;
8291 if (name)
8292 error ("size of array %qD has non-integral type %qT",
8293 name, type);
8294 else
8295 error ("size of array has non-integral type %qT", type);
8296 size = integer_one_node;
8298 if (size == error_mark_node)
8299 return error_mark_node;
8300 type = TREE_TYPE (size);
8303 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8304 size = maybe_constant_value (size);
8306 if (!TREE_CONSTANT (size))
8307 size = osize;
8310 if (error_operand_p (size))
8311 return error_mark_node;
8313 /* The array bound must be an integer type. */
8314 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8316 if (!(complain & tf_error))
8317 return error_mark_node;
8318 if (name)
8319 error ("size of array %qD has non-integral type %qT", name, type);
8320 else
8321 error ("size of array has non-integral type %qT", type);
8322 size = integer_one_node;
8323 type = TREE_TYPE (size);
8327 /* A type is dependent if it is...an array type constructed from any
8328 dependent type or whose size is specified by a constant expression
8329 that is value-dependent. */
8330 /* We can only call value_dependent_expression_p on integral constant
8331 expressions; treat non-constant expressions as dependent, too. */
8332 if (processing_template_decl
8333 && (type_dependent_expression_p (size)
8334 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8336 /* We cannot do any checking for a SIZE that isn't known to be
8337 constant. Just build the index type and mark that it requires
8338 structural equality checks. */
8339 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8340 size, size_one_node));
8341 TYPE_DEPENDENT_P (itype) = 1;
8342 TYPE_DEPENDENT_P_VALID (itype) = 1;
8343 SET_TYPE_STRUCTURAL_EQUALITY (itype);
8344 return itype;
8347 /* Normally, the array-bound will be a constant. */
8348 if (TREE_CODE (size) == INTEGER_CST)
8350 /* Check to see if the array bound overflowed. Make that an
8351 error, no matter how generous we're being. */
8352 constant_expression_error (size);
8354 /* An array must have a positive number of elements. */
8355 if (tree_int_cst_lt (size, integer_zero_node))
8357 if (!(complain & tf_error))
8358 return error_mark_node;
8359 if (name)
8360 error ("size of array %qD is negative", name);
8361 else
8362 error ("size of array is negative");
8363 size = integer_one_node;
8365 /* As an extension we allow zero-sized arrays. */
8366 else if (integer_zerop (size))
8368 if (!(complain & tf_error))
8369 /* We must fail if performing argument deduction (as
8370 indicated by the state of complain), so that
8371 another substitution can be found. */
8372 return error_mark_node;
8373 else if (in_system_header_at (input_location))
8374 /* Allow them in system headers because glibc uses them. */;
8375 else if (name)
8376 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8377 else
8378 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8381 else if (TREE_CONSTANT (size)
8382 /* We don't allow VLAs at non-function scopes, or during
8383 tentative template substitution. */
8384 || !at_function_scope_p ()
8385 || (cxx_dialect < cxx1y && !(complain & tf_error)))
8387 if (!(complain & tf_error))
8388 return error_mark_node;
8389 /* `(int) &fn' is not a valid array bound. */
8390 if (name)
8391 error ("size of array %qD is not an integral constant-expression",
8392 name);
8393 else
8394 error ("size of array is not an integral constant-expression");
8395 size = integer_one_node;
8397 else if (cxx_dialect < cxx1y && pedantic && warn_vla != 0)
8399 if (name)
8400 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8401 else
8402 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8404 else if (warn_vla > 0)
8406 if (name)
8407 warning (OPT_Wvla,
8408 "variable length array %qD is used", name);
8409 else
8410 warning (OPT_Wvla,
8411 "variable length array is used");
8414 if (processing_template_decl && !TREE_CONSTANT (size))
8415 /* A variable sized array. */
8416 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8417 else
8419 HOST_WIDE_INT saved_processing_template_decl;
8421 /* Compute the index of the largest element in the array. It is
8422 one less than the number of elements in the array. We save
8423 and restore PROCESSING_TEMPLATE_DECL so that computations in
8424 cp_build_binary_op will be appropriately folded. */
8425 saved_processing_template_decl = processing_template_decl;
8426 processing_template_decl = 0;
8427 itype = cp_build_binary_op (input_location,
8428 MINUS_EXPR,
8429 cp_convert (ssizetype, size, complain),
8430 cp_convert (ssizetype, integer_one_node,
8431 complain),
8432 complain);
8433 itype = fold (itype);
8434 processing_template_decl = saved_processing_template_decl;
8436 if (!TREE_CONSTANT (itype))
8438 /* A variable sized array. */
8439 itype = variable_size (itype);
8441 if (TREE_CODE (itype) != SAVE_EXPR)
8443 /* Look for SIZEOF_EXPRs in itype and fold them, otherwise
8444 they might survive till gimplification. */
8445 tree newitype = itype;
8446 bool found = false;
8447 cp_walk_tree_without_duplicates (&newitype,
8448 fold_sizeof_expr_r, &found);
8449 if (found)
8450 itype = variable_size (fold (newitype));
8453 stabilize_vla_size (itype);
8455 if (cxx_dialect >= cxx1y && flag_exceptions)
8457 /* If the VLA bound is larger than half the address space,
8458 or less than zero, throw std::bad_array_length. */
8459 tree comp = build2 (LT_EXPR, boolean_type_node, itype,
8460 ssize_int (-1));
8461 comp = build3 (COND_EXPR, void_type_node, comp,
8462 throw_bad_array_length (), void_node);
8463 finish_expr_stmt (comp);
8465 else if (flag_sanitize & SANITIZE_VLA
8466 && current_function_decl != NULL_TREE
8467 && !lookup_attribute ("no_sanitize_undefined",
8468 DECL_ATTRIBUTES
8469 (current_function_decl)))
8471 /* From C++1y onwards, we throw an exception on a negative
8472 length size of an array; see above. */
8474 /* We have to add 1 -- in the ubsan routine we generate
8475 LE_EXPR rather than LT_EXPR. */
8476 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
8477 build_one_cst (TREE_TYPE (itype)));
8478 t = ubsan_instrument_vla (input_location, t);
8479 finish_expr_stmt (t);
8482 /* Make sure that there was no overflow when creating to a signed
8483 index type. (For example, on a 32-bit machine, an array with
8484 size 2^32 - 1 is too big.) */
8485 else if (TREE_CODE (itype) == INTEGER_CST
8486 && TREE_OVERFLOW (itype))
8488 if (!(complain & tf_error))
8489 return error_mark_node;
8490 error ("overflow in array dimension");
8491 TREE_OVERFLOW (itype) = 0;
8495 /* Create and return the appropriate index type. */
8496 itype = build_index_type (itype);
8498 /* If the index type were dependent, we would have returned early, so
8499 remember that it isn't. */
8500 TYPE_DEPENDENT_P (itype) = 0;
8501 TYPE_DEPENDENT_P_VALID (itype) = 1;
8502 return itype;
8505 /* Returns the scope (if any) in which the entity declared by
8506 DECLARATOR will be located. If the entity was declared with an
8507 unqualified name, NULL_TREE is returned. */
8509 tree
8510 get_scope_of_declarator (const cp_declarator *declarator)
8512 while (declarator && declarator->kind != cdk_id)
8513 declarator = declarator->declarator;
8515 /* If the declarator-id is a SCOPE_REF, the scope in which the
8516 declaration occurs is the first operand. */
8517 if (declarator
8518 && declarator->u.id.qualifying_scope)
8519 return declarator->u.id.qualifying_scope;
8521 /* Otherwise, the declarator is not a qualified name; the entity will
8522 be declared in the current scope. */
8523 return NULL_TREE;
8526 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8527 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
8528 with this type. */
8530 static tree
8531 create_array_type_for_decl (tree name, tree type, tree size)
8533 tree itype = NULL_TREE;
8535 /* If things have already gone awry, bail now. */
8536 if (type == error_mark_node || size == error_mark_node)
8537 return error_mark_node;
8539 /* 8.3.4/1: If the type of the identifier of D contains the auto
8540 type-specifier, the program is ill-formed. */
8541 if (type_uses_auto (type))
8543 error ("%qD declared as array of %qT", name, type);
8544 return error_mark_node;
8547 /* If there are some types which cannot be array elements,
8548 issue an error-message and return. */
8549 switch (TREE_CODE (type))
8551 case VOID_TYPE:
8552 if (name)
8553 error ("declaration of %qD as array of void", name);
8554 else
8555 error ("creating array of void");
8556 return error_mark_node;
8558 case FUNCTION_TYPE:
8559 if (name)
8560 error ("declaration of %qD as array of functions", name);
8561 else
8562 error ("creating array of functions");
8563 return error_mark_node;
8565 case REFERENCE_TYPE:
8566 if (name)
8567 error ("declaration of %qD as array of references", name);
8568 else
8569 error ("creating array of references");
8570 return error_mark_node;
8572 case METHOD_TYPE:
8573 if (name)
8574 error ("declaration of %qD as array of function members", name);
8575 else
8576 error ("creating array of function members");
8577 return error_mark_node;
8579 default:
8580 break;
8583 /* [dcl.array]
8585 The constant expressions that specify the bounds of the arrays
8586 can be omitted only for the first member of the sequence. */
8587 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8589 if (name)
8590 error ("declaration of %qD as multidimensional array must "
8591 "have bounds for all dimensions except the first",
8592 name);
8593 else
8594 error ("multidimensional array must have bounds for all "
8595 "dimensions except the first");
8597 return error_mark_node;
8600 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type)
8601 && (flag_iso || warn_vla > 0))
8602 pedwarn (input_location, OPT_Wvla, "array of array of runtime bound");
8604 /* Figure out the index type for the array. */
8605 if (size)
8606 itype = compute_array_index_type (name, size, tf_warning_or_error);
8608 /* [dcl.array]
8609 T is called the array element type; this type shall not be [...] an
8610 abstract class type. */
8611 abstract_virtuals_error (name, type);
8613 return build_cplus_array_type (type, itype);
8616 /* Check that it's OK to declare a function with the indicated TYPE.
8617 SFK indicates the kind of special function (if any) that this
8618 function is. OPTYPE is the type given in a conversion operator
8619 declaration, or the class type for a constructor/destructor.
8620 Returns the actual return type of the function; that
8621 may be different than TYPE if an error occurs, or for certain
8622 special functions. */
8624 static tree
8625 check_special_function_return_type (special_function_kind sfk,
8626 tree type,
8627 tree optype)
8629 switch (sfk)
8631 case sfk_constructor:
8632 if (type)
8633 error ("return type specification for constructor invalid");
8635 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8636 type = build_pointer_type (optype);
8637 else
8638 type = void_type_node;
8639 break;
8641 case sfk_destructor:
8642 if (type)
8643 error ("return type specification for destructor invalid");
8644 /* We can't use the proper return type here because we run into
8645 problems with ambiguous bases and covariant returns.
8646 Java classes are left unchanged because (void *) isn't a valid
8647 Java type, and we don't want to change the Java ABI. */
8648 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8649 type = build_pointer_type (void_type_node);
8650 else
8651 type = void_type_node;
8652 break;
8654 case sfk_conversion:
8655 if (type)
8656 error ("return type specified for %<operator %T%>", optype);
8657 type = optype;
8658 break;
8660 default:
8661 gcc_unreachable ();
8664 return type;
8667 /* A variable or data member (whose unqualified name is IDENTIFIER)
8668 has been declared with the indicated TYPE. If the TYPE is not
8669 acceptable, issue an error message and return a type to use for
8670 error-recovery purposes. */
8672 tree
8673 check_var_type (tree identifier, tree type)
8675 if (VOID_TYPE_P (type))
8677 if (!identifier)
8678 error ("unnamed variable or field declared void");
8679 else if (identifier_p (identifier))
8681 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8682 error ("variable or field %qE declared void", identifier);
8684 else
8685 error ("variable or field declared void");
8686 type = error_mark_node;
8689 return type;
8692 /* Given declspecs and a declarator (abstract or otherwise), determine
8693 the name and type of the object declared and construct a DECL node
8694 for it.
8696 DECLSPECS points to the representation of declaration-specifier
8697 sequence that precedes declarator.
8699 DECL_CONTEXT says which syntactic context this declaration is in:
8700 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8701 FUNCDEF for a function definition. Like NORMAL but a few different
8702 error messages in each case. Return value may be zero meaning
8703 this definition is too screwy to try to parse.
8704 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8705 handle member functions (which have FIELD context).
8706 Return value may be zero meaning this definition is too screwy to
8707 try to parse.
8708 PARM for a parameter declaration (either within a function prototype
8709 or before a function body). Make a PARM_DECL, or return void_type_node.
8710 TPARM for a template parameter declaration.
8711 CATCHPARM for a parameter declaration before a catch clause.
8712 TYPENAME if for a typename (in a cast or sizeof).
8713 Don't make a DECL node; just return the ..._TYPE node.
8714 FIELD for a struct or union field; make a FIELD_DECL.
8715 BITFIELD for a field with specified width.
8717 INITIALIZED is as for start_decl.
8719 ATTRLIST is a pointer to the list of attributes, which may be NULL
8720 if there are none; *ATTRLIST may be modified if attributes from inside
8721 the declarator should be applied to the declaration.
8723 When this function is called, scoping variables (such as
8724 CURRENT_CLASS_TYPE) should reflect the scope in which the
8725 declaration occurs, not the scope in which the new declaration will
8726 be placed. For example, on:
8728 void S::f() { ... }
8730 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8731 should not be `S'.
8733 Returns a DECL (if a declarator is present), a TYPE (if there is no
8734 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8735 error occurs. */
8737 tree
8738 grokdeclarator (const cp_declarator *declarator,
8739 cp_decl_specifier_seq *declspecs,
8740 enum decl_context decl_context,
8741 int initialized,
8742 tree* attrlist)
8744 tree type = NULL_TREE;
8745 int longlong = 0;
8746 int explicit_int128 = 0;
8747 int virtualp, explicitp, friendp, inlinep, staticp;
8748 int explicit_int = 0;
8749 int explicit_char = 0;
8750 int defaulted_int = 0;
8752 tree typedef_decl = NULL_TREE;
8753 const char *name = NULL;
8754 tree typedef_type = NULL_TREE;
8755 /* True if this declarator is a function definition. */
8756 bool funcdef_flag = false;
8757 cp_declarator_kind innermost_code = cdk_error;
8758 int bitfield = 0;
8759 #if 0
8760 /* See the code below that used this. */
8761 tree decl_attr = NULL_TREE;
8762 #endif
8764 /* Keep track of what sort of function is being processed
8765 so that we can warn about default return values, or explicit
8766 return values which do not match prescribed defaults. */
8767 special_function_kind sfk = sfk_none;
8769 tree dname = NULL_TREE;
8770 tree ctor_return_type = NULL_TREE;
8771 enum overload_flags flags = NO_SPECIAL;
8772 /* cv-qualifiers that apply to the declarator, for a declaration of
8773 a member function. */
8774 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8775 /* virt-specifiers that apply to the declarator, for a declaration of
8776 a member function. */
8777 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8778 /* ref-qualifier that applies to the declarator, for a declaration of
8779 a member function. */
8780 cp_ref_qualifier rqual = REF_QUAL_NONE;
8781 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
8782 int type_quals;
8783 tree raises = NULL_TREE;
8784 int template_count = 0;
8785 tree returned_attrs = NULL_TREE;
8786 tree parms = NULL_TREE;
8787 const cp_declarator *id_declarator;
8788 /* The unqualified name of the declarator; either an
8789 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
8790 tree unqualified_id;
8791 /* The class type, if any, in which this entity is located,
8792 or NULL_TREE if none. Note that this value may be different from
8793 the current class type; for example if an attempt is made to declare
8794 "A::f" inside "B", this value will be "A". */
8795 tree ctype = current_class_type;
8796 /* The NAMESPACE_DECL for the namespace in which this entity is
8797 located. If an unqualified name is used to declare the entity,
8798 this value will be NULL_TREE, even if the entity is located at
8799 namespace scope. */
8800 tree in_namespace = NULL_TREE;
8801 cp_storage_class storage_class;
8802 bool unsigned_p, signed_p, short_p, long_p, thread_p;
8803 bool type_was_error_mark_node = false;
8804 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8805 bool template_type_arg = false;
8806 bool template_parm_flag = false;
8807 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
8808 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
8809 bool late_return_type_p = false;
8810 bool array_parameter_p = false;
8811 source_location saved_loc = input_location;
8812 const char *errmsg;
8814 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
8815 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
8816 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
8817 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
8818 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
8819 explicit_int128 = declspecs->explicit_int128_p;
8820 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
8822 if (decl_context == FUNCDEF)
8823 funcdef_flag = true, decl_context = NORMAL;
8824 else if (decl_context == MEMFUNCDEF)
8825 funcdef_flag = true, decl_context = FIELD;
8826 else if (decl_context == BITFIELD)
8827 bitfield = 1, decl_context = FIELD;
8828 else if (decl_context == TEMPLATE_TYPE_ARG)
8829 template_type_arg = true, decl_context = TYPENAME;
8830 else if (decl_context == TPARM)
8831 template_parm_flag = true, decl_context = PARM;
8833 if (initialized > 1)
8834 funcdef_flag = true;
8836 /* Look inside a declarator for the name being declared
8837 and get it as a string, for an error message. */
8838 for (id_declarator = declarator;
8839 id_declarator;
8840 id_declarator = id_declarator->declarator)
8842 if (id_declarator->kind != cdk_id)
8843 innermost_code = id_declarator->kind;
8845 switch (id_declarator->kind)
8847 case cdk_function:
8848 if (id_declarator->declarator
8849 && id_declarator->declarator->kind == cdk_id)
8851 sfk = id_declarator->declarator->u.id.sfk;
8852 if (sfk == sfk_destructor)
8853 flags = DTOR_FLAG;
8855 break;
8857 case cdk_id:
8859 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8860 tree decl = id_declarator->u.id.unqualified_name;
8861 if (!decl)
8862 break;
8863 if (qualifying_scope)
8865 if (at_function_scope_p ())
8867 /* [dcl.meaning]
8869 A declarator-id shall not be qualified except
8870 for ...
8872 None of the cases are permitted in block
8873 scope. */
8874 if (qualifying_scope == global_namespace)
8875 error ("invalid use of qualified-name %<::%D%>",
8876 decl);
8877 else if (TYPE_P (qualifying_scope))
8878 error ("invalid use of qualified-name %<%T::%D%>",
8879 qualifying_scope, decl);
8880 else
8881 error ("invalid use of qualified-name %<%D::%D%>",
8882 qualifying_scope, decl);
8883 return error_mark_node;
8885 else if (TYPE_P (qualifying_scope))
8887 ctype = qualifying_scope;
8888 if (!MAYBE_CLASS_TYPE_P (ctype))
8890 error ("%q#T is not a class or a namespace", ctype);
8891 ctype = NULL_TREE;
8893 else if (innermost_code != cdk_function
8894 && current_class_type
8895 && !uniquely_derived_from_p (ctype,
8896 current_class_type))
8898 error ("invalid use of qualified-name %<%T::%D%>",
8899 qualifying_scope, decl);
8900 return error_mark_node;
8903 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8904 in_namespace = qualifying_scope;
8906 switch (TREE_CODE (decl))
8908 case BIT_NOT_EXPR:
8910 tree type;
8912 if (innermost_code != cdk_function)
8914 error ("declaration of %qD as non-function", decl);
8915 return error_mark_node;
8917 else if (!qualifying_scope
8918 && !(current_class_type && at_class_scope_p ()))
8920 error ("declaration of %qD as non-member", decl);
8921 return error_mark_node;
8924 type = TREE_OPERAND (decl, 0);
8925 if (TYPE_P (type))
8926 type = constructor_name (type);
8927 name = identifier_to_locale (IDENTIFIER_POINTER (type));
8928 dname = decl;
8930 break;
8932 case TEMPLATE_ID_EXPR:
8934 tree fns = TREE_OPERAND (decl, 0);
8936 dname = fns;
8937 if (!identifier_p (dname))
8939 gcc_assert (is_overloaded_fn (dname));
8940 dname = DECL_NAME (get_first_fn (dname));
8943 /* Fall through. */
8945 case IDENTIFIER_NODE:
8946 if (identifier_p (decl))
8947 dname = decl;
8949 if (C_IS_RESERVED_WORD (dname))
8951 error ("declarator-id missing; using reserved word %qD",
8952 dname);
8953 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8955 else if (!IDENTIFIER_TYPENAME_P (dname))
8956 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8957 else
8959 gcc_assert (flags == NO_SPECIAL);
8960 flags = TYPENAME_FLAG;
8961 ctor_return_type = TREE_TYPE (dname);
8962 sfk = sfk_conversion;
8963 if (is_typename_at_global_scope (dname))
8964 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8965 else
8966 name = "<invalid operator>";
8968 break;
8970 default:
8971 gcc_unreachable ();
8973 break;
8976 case cdk_array:
8977 case cdk_pointer:
8978 case cdk_reference:
8979 case cdk_ptrmem:
8980 break;
8982 case cdk_error:
8983 return error_mark_node;
8985 default:
8986 gcc_unreachable ();
8988 if (id_declarator->kind == cdk_id)
8989 break;
8992 /* [dcl.fct.edf]
8994 The declarator in a function-definition shall have the form
8995 D1 ( parameter-declaration-clause) ... */
8996 if (funcdef_flag && innermost_code != cdk_function)
8998 error ("function definition does not declare parameters");
8999 return error_mark_node;
9002 if (flags == TYPENAME_FLAG
9003 && innermost_code != cdk_function
9004 && ! (ctype && !declspecs->any_specifiers_p))
9006 error ("declaration of %qD as non-function", dname);
9007 return error_mark_node;
9010 if (dname
9011 && identifier_p (dname)
9012 && UDLIT_OPER_P (dname)
9013 && innermost_code != cdk_function)
9015 error ("declaration of %qD as non-function", dname);
9016 return error_mark_node;
9019 if (dname && IDENTIFIER_OPNAME_P (dname))
9021 if (typedef_p)
9023 error ("declaration of %qD as %<typedef%>", dname);
9024 return error_mark_node;
9026 else if (decl_context == PARM || decl_context == CATCHPARM)
9028 error ("declaration of %qD as parameter", dname);
9029 return error_mark_node;
9033 /* Anything declared one level down from the top level
9034 must be one of the parameters of a function
9035 (because the body is at least two levels down). */
9037 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9038 by not allowing C++ class definitions to specify their parameters
9039 with xdecls (must be spec.d in the parmlist).
9041 Since we now wait to push a class scope until we are sure that
9042 we are in a legitimate method context, we must set oldcname
9043 explicitly (since current_class_name is not yet alive).
9045 We also want to avoid calling this a PARM if it is in a namespace. */
9047 if (decl_context == NORMAL && !toplevel_bindings_p ())
9049 cp_binding_level *b = current_binding_level;
9050 current_binding_level = b->level_chain;
9051 if (current_binding_level != 0 && toplevel_bindings_p ())
9052 decl_context = PARM;
9053 current_binding_level = b;
9056 if (name == NULL)
9057 name = decl_context == PARM ? "parameter" : "type name";
9059 if (constexpr_p && typedef_p)
9061 error ("%<constexpr%> cannot appear in a typedef declaration");
9062 return error_mark_node;
9065 /* If there were multiple types specified in the decl-specifier-seq,
9066 issue an error message. */
9067 if (declspecs->multiple_types_p)
9069 error ("two or more data types in declaration of %qs", name);
9070 return error_mark_node;
9073 if (declspecs->conflicting_specifiers_p)
9075 error ("conflicting specifiers in declaration of %qs", name);
9076 return error_mark_node;
9079 /* Extract the basic type from the decl-specifier-seq. */
9080 type = declspecs->type;
9081 if (type == error_mark_node)
9083 type = NULL_TREE;
9084 type_was_error_mark_node = true;
9086 /* If the entire declaration is itself tagged as deprecated then
9087 suppress reports of deprecated items. */
9088 if (type && TREE_DEPRECATED (type)
9089 && deprecated_state != DEPRECATED_SUPPRESS)
9090 warn_deprecated_use (type, NULL_TREE);
9091 if (type && TREE_CODE (type) == TYPE_DECL)
9093 typedef_decl = type;
9094 type = TREE_TYPE (typedef_decl);
9095 if (TREE_DEPRECATED (type)
9096 && DECL_ARTIFICIAL (typedef_decl)
9097 && deprecated_state != DEPRECATED_SUPPRESS)
9098 warn_deprecated_use (type, NULL_TREE);
9100 /* No type at all: default to `int', and set DEFAULTED_INT
9101 because it was not a user-defined typedef. */
9102 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
9104 /* These imply 'int'. */
9105 type = integer_type_node;
9106 defaulted_int = 1;
9108 /* Gather flags. */
9109 explicit_int = declspecs->explicit_int_p;
9110 explicit_char = declspecs->explicit_char_p;
9112 #if 0
9113 /* See the code below that used this. */
9114 if (typedef_decl)
9115 decl_attr = DECL_ATTRIBUTES (typedef_decl);
9116 #endif
9117 typedef_type = type;
9120 if (sfk != sfk_conversion)
9121 ctor_return_type = ctype;
9123 if (sfk != sfk_none)
9124 type = check_special_function_return_type (sfk, type,
9125 ctor_return_type);
9126 else if (type == NULL_TREE)
9128 int is_main;
9130 explicit_int = -1;
9132 /* We handle `main' specially here, because 'main () { }' is so
9133 common. With no options, it is allowed. With -Wreturn-type,
9134 it is a warning. It is only an error with -pedantic-errors. */
9135 is_main = (funcdef_flag
9136 && dname && identifier_p (dname)
9137 && MAIN_NAME_P (dname)
9138 && ctype == NULL_TREE
9139 && in_namespace == NULL_TREE
9140 && current_namespace == global_namespace);
9142 if (type_was_error_mark_node)
9143 /* We've already issued an error, don't complain more. */;
9144 else if (in_system_header_at (input_location) || flag_ms_extensions)
9145 /* Allow it, sigh. */;
9146 else if (! is_main)
9147 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
9148 else if (pedantic)
9149 pedwarn (input_location, OPT_Wpedantic,
9150 "ISO C++ forbids declaration of %qs with no type", name);
9151 else
9152 warning (OPT_Wreturn_type,
9153 "ISO C++ forbids declaration of %qs with no type", name);
9155 type = integer_type_node;
9158 ctype = NULL_TREE;
9160 if (explicit_int128)
9162 if (int128_integer_type_node == NULL_TREE)
9164 error ("%<__int128%> is not supported by this target");
9165 explicit_int128 = false;
9167 else if (pedantic && ! in_system_header_at (input_location))
9168 pedwarn (input_location, OPT_Wpedantic,
9169 "ISO C++ does not support %<__int128%> for %qs", name);
9172 /* Now process the modifiers that were specified
9173 and check for invalid combinations. */
9175 /* Long double is a special combination. */
9176 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9178 long_p = false;
9179 type = cp_build_qualified_type (long_double_type_node,
9180 cp_type_quals (type));
9183 /* Check all other uses of type modifiers. */
9185 if (unsigned_p || signed_p || long_p || short_p)
9187 int ok = 0;
9189 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9190 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9191 else if (signed_p && unsigned_p)
9192 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9193 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9194 error ("%<long long%> invalid for %qs", name);
9195 else if (long_p && TREE_CODE (type) == REAL_TYPE)
9196 error ("%<long%> invalid for %qs", name);
9197 else if (short_p && TREE_CODE (type) == REAL_TYPE)
9198 error ("%<short%> invalid for %qs", name);
9199 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9200 error ("%<long%> or %<short%> invalid for %qs", name);
9201 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
9202 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9203 else if ((long_p || short_p) && explicit_char)
9204 error ("%<long%> or %<short%> specified with char for %qs", name);
9205 else if (long_p && short_p)
9206 error ("%<long%> and %<short%> specified together for %qs", name);
9207 else if (type == char16_type_node || type == char32_type_node)
9209 if (signed_p || unsigned_p)
9210 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9211 else if (short_p || long_p)
9212 error ("%<short%> or %<long%> invalid for %qs", name);
9214 else
9216 ok = 1;
9217 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
9219 pedwarn (input_location, OPT_Wpedantic,
9220 "long, short, signed or unsigned used invalidly for %qs",
9221 name);
9222 if (flag_pedantic_errors)
9223 ok = 0;
9227 /* Discard the type modifiers if they are invalid. */
9228 if (! ok)
9230 unsigned_p = false;
9231 signed_p = false;
9232 long_p = false;
9233 short_p = false;
9234 longlong = 0;
9238 /* Decide whether an integer type is signed or not.
9239 Optionally treat bitfields as signed by default. */
9240 if (unsigned_p
9241 /* [class.bit]
9243 It is implementation-defined whether a plain (neither
9244 explicitly signed or unsigned) char, short, int, or long
9245 bit-field is signed or unsigned.
9247 Naturally, we extend this to long long as well. Note that
9248 this does not include wchar_t. */
9249 || (bitfield && !flag_signed_bitfields
9250 && !signed_p
9251 /* A typedef for plain `int' without `signed' can be
9252 controlled just like plain `int', but a typedef for
9253 `signed int' cannot be so controlled. */
9254 && !(typedef_decl
9255 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9256 && TREE_CODE (type) == INTEGER_TYPE
9257 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9259 if (explicit_int128)
9260 type = int128_unsigned_type_node;
9261 else if (longlong)
9262 type = long_long_unsigned_type_node;
9263 else if (long_p)
9264 type = long_unsigned_type_node;
9265 else if (short_p)
9266 type = short_unsigned_type_node;
9267 else if (type == char_type_node)
9268 type = unsigned_char_type_node;
9269 else if (typedef_decl)
9270 type = unsigned_type_for (type);
9271 else
9272 type = unsigned_type_node;
9274 else if (signed_p && type == char_type_node)
9275 type = signed_char_type_node;
9276 else if (explicit_int128)
9277 type = int128_integer_type_node;
9278 else if (longlong)
9279 type = long_long_integer_type_node;
9280 else if (long_p)
9281 type = long_integer_type_node;
9282 else if (short_p)
9283 type = short_integer_type_node;
9285 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9287 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9288 error ("complex invalid for %qs", name);
9289 /* If we just have "complex", it is equivalent to
9290 "complex double", but if any modifiers at all are specified it is
9291 the complex form of TYPE. E.g, "complex short" is
9292 "complex short int". */
9293 else if (defaulted_int && ! longlong && ! explicit_int128
9294 && ! (long_p || short_p || signed_p || unsigned_p))
9295 type = complex_double_type_node;
9296 else if (type == integer_type_node)
9297 type = complex_integer_type_node;
9298 else if (type == float_type_node)
9299 type = complex_float_type_node;
9300 else if (type == double_type_node)
9301 type = complex_double_type_node;
9302 else if (type == long_double_type_node)
9303 type = complex_long_double_type_node;
9304 else
9305 type = build_complex_type (type);
9308 type_quals = TYPE_UNQUALIFIED;
9309 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9310 type_quals |= TYPE_QUAL_CONST;
9311 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9312 type_quals |= TYPE_QUAL_VOLATILE;
9313 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9314 type_quals |= TYPE_QUAL_RESTRICT;
9315 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
9316 error ("qualifiers are not allowed on declaration of %<operator %T%>",
9317 ctor_return_type);
9319 /* If we're using the injected-class-name to form a compound type or a
9320 declaration, replace it with the underlying class so we don't get
9321 redundant typedefs in the debug output. But if we are returning the
9322 type unchanged, leave it alone so that it's available to
9323 maybe_get_template_decl_from_type_decl. */
9324 if (CLASS_TYPE_P (type)
9325 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9326 && type == TREE_TYPE (TYPE_NAME (type))
9327 && (declarator || type_quals))
9328 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9330 type_quals |= cp_type_quals (type);
9331 type = cp_build_qualified_type_real
9332 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
9333 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9334 /* We might have ignored or rejected some of the qualifiers. */
9335 type_quals = cp_type_quals (type);
9337 staticp = 0;
9338 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9339 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9340 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9342 storage_class = declspecs->storage_class;
9343 if (storage_class == sc_static)
9344 staticp = 1 + (decl_context == FIELD);
9346 if (virtualp && staticp == 2)
9348 error ("member %qD cannot be declared both virtual and static", dname);
9349 storage_class = sc_none;
9350 staticp = 0;
9352 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9354 /* Issue errors about use of storage classes for parameters. */
9355 if (decl_context == PARM)
9357 if (typedef_p)
9359 error ("typedef declaration invalid in parameter declaration");
9360 return error_mark_node;
9362 else if (template_parm_flag && storage_class != sc_none)
9364 error ("storage class specified for template parameter %qs", name);
9365 return error_mark_node;
9367 else if (storage_class == sc_static
9368 || storage_class == sc_extern
9369 || thread_p)
9370 error ("storage class specifiers invalid in parameter declarations");
9372 /* Function parameters cannot be constexpr. If we saw one, moan
9373 and pretend it wasn't there. */
9374 if (constexpr_p)
9376 error ("a parameter cannot be declared %<constexpr%>");
9377 constexpr_p = 0;
9381 /* Give error if `virtual' is used outside of class declaration. */
9382 if (virtualp
9383 && (current_class_name == NULL_TREE || decl_context != FIELD))
9385 error ("%<virtual%> outside class declaration");
9386 virtualp = 0;
9389 /* Static anonymous unions are dealt with here. */
9390 if (staticp && decl_context == TYPENAME
9391 && declspecs->type
9392 && ANON_AGGR_TYPE_P (declspecs->type))
9393 decl_context = FIELD;
9395 /* Warn about storage classes that are invalid for certain
9396 kinds of declarations (parameters, typenames, etc.). */
9397 if (thread_p
9398 && ((storage_class
9399 && storage_class != sc_extern
9400 && storage_class != sc_static)
9401 || typedef_p))
9403 error ("multiple storage classes in declaration of %qs", name);
9404 thread_p = false;
9406 if (decl_context != NORMAL
9407 && ((storage_class != sc_none
9408 && storage_class != sc_mutable)
9409 || thread_p))
9411 if ((decl_context == PARM || decl_context == CATCHPARM)
9412 && (storage_class == sc_register
9413 || storage_class == sc_auto))
9415 else if (typedef_p)
9417 else if (decl_context == FIELD
9418 /* C++ allows static class elements. */
9419 && storage_class == sc_static)
9420 /* C++ also allows inlines and signed and unsigned elements,
9421 but in those cases we don't come in here. */
9423 else
9425 if (decl_context == FIELD)
9426 error ("storage class specified for %qs", name);
9427 else
9429 if (decl_context == PARM || decl_context == CATCHPARM)
9430 error ("storage class specified for parameter %qs", name);
9431 else
9432 error ("storage class specified for typename");
9434 if (storage_class == sc_register
9435 || storage_class == sc_auto
9436 || storage_class == sc_extern
9437 || thread_p)
9438 storage_class = sc_none;
9441 else if (storage_class == sc_extern && funcdef_flag
9442 && ! toplevel_bindings_p ())
9443 error ("nested function %qs declared %<extern%>", name);
9444 else if (toplevel_bindings_p ())
9446 if (storage_class == sc_auto)
9447 error ("top-level declaration of %qs specifies %<auto%>", name);
9449 else if (thread_p
9450 && storage_class != sc_extern
9451 && storage_class != sc_static)
9453 if (declspecs->gnu_thread_keyword_p)
9454 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9455 "declared %<__thread%>", name);
9457 /* When thread_local is applied to a variable of block scope the
9458 storage-class-specifier static is implied if it does not appear
9459 explicitly. */
9460 storage_class = declspecs->storage_class = sc_static;
9461 staticp = 1;
9464 if (storage_class && friendp)
9466 error ("storage class specifiers invalid in friend function declarations");
9467 storage_class = sc_none;
9468 staticp = 0;
9471 if (!id_declarator)
9472 unqualified_id = NULL_TREE;
9473 else
9475 unqualified_id = id_declarator->u.id.unqualified_name;
9476 switch (TREE_CODE (unqualified_id))
9478 case BIT_NOT_EXPR:
9479 unqualified_id = TREE_OPERAND (unqualified_id, 0);
9480 if (TYPE_P (unqualified_id))
9481 unqualified_id = constructor_name (unqualified_id);
9482 break;
9484 case IDENTIFIER_NODE:
9485 case TEMPLATE_ID_EXPR:
9486 break;
9488 default:
9489 gcc_unreachable ();
9493 if (declspecs->std_attributes)
9495 /* Apply the c++11 attributes to the type preceding them. */
9496 input_location = declspecs->locations[ds_std_attribute];
9497 decl_attributes (&type, declspecs->std_attributes, 0);
9498 input_location = saved_loc;
9501 /* Determine the type of the entity declared by recurring on the
9502 declarator. */
9503 for (; declarator; declarator = declarator->declarator)
9505 const cp_declarator *inner_declarator;
9506 tree attrs;
9508 if (type == error_mark_node)
9509 return error_mark_node;
9511 attrs = declarator->attributes;
9512 if (attrs)
9514 int attr_flags;
9516 attr_flags = 0;
9517 if (declarator == NULL || declarator->kind == cdk_id)
9518 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9519 if (declarator->kind == cdk_function)
9520 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9521 if (declarator->kind == cdk_array)
9522 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9523 returned_attrs = decl_attributes (&type,
9524 chainon (returned_attrs, attrs),
9525 attr_flags);
9528 if (declarator->kind == cdk_id)
9529 break;
9531 inner_declarator = declarator->declarator;
9533 switch (declarator->kind)
9535 case cdk_array:
9536 type = create_array_type_for_decl (dname, type,
9537 declarator->u.array.bounds);
9538 if (declarator->std_attributes)
9539 /* [dcl.array]/1:
9541 The optional attribute-specifier-seq appertains to the
9542 array. */
9543 returned_attrs = chainon (returned_attrs,
9544 declarator->std_attributes);
9545 break;
9547 case cdk_function:
9549 tree arg_types;
9550 int funcdecl_p;
9552 /* Declaring a function type.
9553 Make sure we have a valid type for the function to return. */
9555 if (type_quals != TYPE_UNQUALIFIED)
9557 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9558 warning (OPT_Wignored_qualifiers,
9559 "type qualifiers ignored on function return type");
9560 /* We now know that the TYPE_QUALS don't apply to the
9561 decl, but to its return type. */
9562 type_quals = TYPE_UNQUALIFIED;
9564 errmsg = targetm.invalid_return_type (type);
9565 if (errmsg)
9567 error (errmsg);
9568 type = integer_type_node;
9571 /* Error about some types functions can't return. */
9573 if (TREE_CODE (type) == FUNCTION_TYPE)
9575 error ("%qs declared as function returning a function", name);
9576 return error_mark_node;
9578 if (TREE_CODE (type) == ARRAY_TYPE)
9580 error ("%qs declared as function returning an array", name);
9581 return error_mark_node;
9584 input_location = declspecs->locations[ds_type_spec];
9585 abstract_virtuals_error (ACU_RETURN, type);
9586 input_location = saved_loc;
9588 /* Pick up type qualifiers which should be applied to `this'. */
9589 memfn_quals = declarator->u.function.qualifiers;
9590 /* Pick up virt-specifiers. */
9591 virt_specifiers = declarator->u.function.virt_specifiers;
9592 /* And ref-qualifier, too */
9593 rqual = declarator->u.function.ref_qualifier;
9594 /* Pick up the exception specifications. */
9595 raises = declarator->u.function.exception_specification;
9596 /* If the exception-specification is ill-formed, let's pretend
9597 there wasn't one. */
9598 if (raises == error_mark_node)
9599 raises = NULL_TREE;
9601 /* Say it's a definition only for the CALL_EXPR
9602 closest to the identifier. */
9603 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9605 /* Handle a late-specified return type. */
9606 if (funcdecl_p)
9608 if (type_uses_auto (type))
9610 if (!declarator->u.function.late_return_type)
9612 if (current_class_type
9613 && LAMBDA_TYPE_P (current_class_type))
9614 /* OK for C++11 lambdas. */;
9615 else if (cxx_dialect < cxx1y)
9617 error ("%qs function uses "
9618 "%<auto%> type specifier without trailing "
9619 "return type", name);
9620 inform (input_location, "deduced return type "
9621 "only available with -std=c++1y or "
9622 "-std=gnu++1y");
9624 else if (virtualp)
9626 error ("virtual function cannot "
9627 "have deduced return type");
9628 virtualp = false;
9631 else if (!is_auto (type))
9633 error ("%qs function with trailing return type has"
9634 " %qT as its type rather than plain %<auto%>",
9635 name, type);
9636 return error_mark_node;
9639 else if (declarator->u.function.late_return_type)
9641 if (cxx_dialect < cxx11)
9642 /* Not using maybe_warn_cpp0x because this should
9643 always be an error. */
9644 error ("trailing return type only available with "
9645 "-std=c++11 or -std=gnu++11");
9646 else
9647 error ("%qs function with trailing return type not "
9648 "declared with %<auto%> type specifier", name);
9649 return error_mark_node;
9652 type = splice_late_return_type
9653 (type, declarator->u.function.late_return_type);
9654 if (type == error_mark_node)
9655 return error_mark_node;
9657 if (declarator->u.function.late_return_type)
9658 late_return_type_p = true;
9660 if (ctype == NULL_TREE
9661 && decl_context == FIELD
9662 && funcdecl_p
9663 && friendp == 0)
9664 ctype = current_class_type;
9666 if (ctype && (sfk == sfk_constructor
9667 || sfk == sfk_destructor))
9669 /* We are within a class's scope. If our declarator name
9670 is the same as the class name, and we are defining
9671 a function, then it is a constructor/destructor, and
9672 therefore returns a void type. */
9674 /* ISO C++ 12.4/2. A destructor may not be declared
9675 const or volatile. A destructor may not be static.
9676 A destructor may not be declared with ref-qualifier.
9678 ISO C++ 12.1. A constructor may not be declared
9679 const or volatile. A constructor may not be
9680 virtual. A constructor may not be static.
9681 A constructor may not be declared with ref-qualifier. */
9682 if (staticp == 2)
9683 error ((flags == DTOR_FLAG)
9684 ? G_("destructor cannot be static member function")
9685 : G_("constructor cannot be static member function"));
9686 if (memfn_quals)
9688 error ((flags == DTOR_FLAG)
9689 ? G_("destructors may not be cv-qualified")
9690 : G_("constructors may not be cv-qualified"));
9691 memfn_quals = TYPE_UNQUALIFIED;
9694 if (rqual)
9696 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
9697 error ((flags == DTOR_FLAG)
9698 ? "destructors may not be ref-qualified"
9699 : "constructors may not be ref-qualified");
9700 rqual = REF_QUAL_NONE;
9703 if (decl_context == FIELD
9704 && !member_function_or_else (ctype,
9705 current_class_type,
9706 flags))
9707 return error_mark_node;
9709 if (flags != DTOR_FLAG)
9711 /* It's a constructor. */
9712 if (explicitp == 1)
9713 explicitp = 2;
9714 if (virtualp)
9716 permerror (input_location, "constructors cannot be declared virtual");
9717 virtualp = 0;
9719 if (decl_context == FIELD
9720 && sfk != sfk_constructor)
9721 return error_mark_node;
9723 if (decl_context == FIELD)
9724 staticp = 0;
9726 else if (friendp)
9728 if (initialized)
9729 error ("can%'t initialize friend function %qs", name);
9730 if (virtualp)
9732 /* Cannot be both friend and virtual. */
9733 error ("virtual functions cannot be friends");
9734 friendp = 0;
9736 if (decl_context == NORMAL)
9737 error ("friend declaration not in class definition");
9738 if (current_function_decl && funcdef_flag)
9739 error ("can%'t define friend function %qs in a local "
9740 "class definition",
9741 name);
9743 else if (ctype && sfk == sfk_conversion)
9745 if (explicitp == 1)
9747 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9748 explicitp = 2;
9752 arg_types = grokparms (declarator->u.function.parameters,
9753 &parms);
9755 if (inner_declarator
9756 && inner_declarator->kind == cdk_id
9757 && inner_declarator->u.id.sfk == sfk_destructor
9758 && arg_types != void_list_node)
9760 error ("destructors may not have parameters");
9761 arg_types = void_list_node;
9762 parms = NULL_TREE;
9765 type = build_function_type (type, arg_types);
9766 if (declarator->std_attributes)
9767 /* [dcl.fct]/2:
9769 The optional attribute-specifier-seq appertains to
9770 the function type. */
9771 decl_attributes (&type, declarator->std_attributes,
9774 break;
9776 case cdk_pointer:
9777 case cdk_reference:
9778 case cdk_ptrmem:
9779 /* Filter out pointers-to-references and references-to-references.
9780 We can get these if a TYPE_DECL is used. */
9782 if (TREE_CODE (type) == REFERENCE_TYPE)
9784 if (declarator->kind != cdk_reference)
9786 error ("cannot declare pointer to %q#T", type);
9787 type = TREE_TYPE (type);
9790 /* In C++0x, we allow reference to reference declarations
9791 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9792 and template type arguments [14.3.1/4 temp.arg.type]. The
9793 check for direct reference to reference declarations, which
9794 are still forbidden, occurs below. Reasoning behind the change
9795 can be found in DR106, DR540, and the rvalue reference
9796 proposals. */
9797 else if (cxx_dialect == cxx98)
9799 error ("cannot declare reference to %q#T", type);
9800 type = TREE_TYPE (type);
9803 else if (VOID_TYPE_P (type))
9805 if (declarator->kind == cdk_reference)
9806 error ("cannot declare reference to %q#T", type);
9807 else if (declarator->kind == cdk_ptrmem)
9808 error ("cannot declare pointer to %q#T member", type);
9811 /* We now know that the TYPE_QUALS don't apply to the decl,
9812 but to the target of the pointer. */
9813 type_quals = TYPE_UNQUALIFIED;
9815 /* This code used to handle METHOD_TYPE, but I don't think it's
9816 possible to get it here anymore. */
9817 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9818 if (declarator->kind == cdk_ptrmem
9819 && TREE_CODE (type) == FUNCTION_TYPE)
9821 memfn_quals |= type_memfn_quals (type);
9822 type = build_memfn_type (type,
9823 declarator->u.pointer.class_type,
9824 memfn_quals,
9825 rqual);
9826 if (type == error_mark_node)
9827 return error_mark_node;
9829 rqual = REF_QUAL_NONE;
9830 memfn_quals = TYPE_UNQUALIFIED;
9833 if (TREE_CODE (type) == FUNCTION_TYPE
9834 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
9835 || type_memfn_rqual (type) != REF_QUAL_NONE))
9836 error (declarator->kind == cdk_reference
9837 ? G_("cannot declare reference to qualified function type %qT")
9838 : G_("cannot declare pointer to qualified function type %qT"),
9839 type);
9841 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type)
9842 && (flag_iso || warn_vla > 0))
9843 pedwarn (input_location, OPT_Wvla,
9844 declarator->kind == cdk_reference
9845 ? G_("reference to array of runtime bound")
9846 : G_("pointer to array of runtime bound"));
9848 /* When the pointed-to type involves components of variable size,
9849 care must be taken to ensure that the size evaluation code is
9850 emitted early enough to dominate all the possible later uses
9851 and late enough for the variables on which it depends to have
9852 been assigned.
9854 This is expected to happen automatically when the pointed-to
9855 type has a name/declaration of it's own, but special attention
9856 is required if the type is anonymous.
9858 We handle the NORMAL and FIELD contexts here by inserting a
9859 dummy statement that just evaluates the size at a safe point
9860 and ensures it is not deferred until e.g. within a deeper
9861 conditional context (c++/43555).
9863 We expect nothing to be needed here for PARM or TYPENAME.
9864 Evaluating the size at this point for TYPENAME would
9865 actually be incorrect, as we might be in the middle of an
9866 expression with side effects on the pointed-to type size
9867 "arguments" prior to the pointer declaration point and the
9868 size evaluation could end up prior to the side effects. */
9870 if (!TYPE_NAME (type)
9871 && (decl_context == NORMAL || decl_context == FIELD)
9872 && at_function_scope_p ()
9873 && variably_modified_type_p (type, NULL_TREE))
9874 /* Force evaluation of the SAVE_EXPR. */
9875 finish_expr_stmt (TYPE_SIZE (type));
9877 if (declarator->kind == cdk_reference)
9879 /* In C++0x, the type we are creating a reference to might be
9880 a typedef which is itself a reference type. In that case,
9881 we follow the reference collapsing rules in
9882 [7.1.3/8 dcl.typedef] to create the final reference type:
9884 "If a typedef TD names a type that is a reference to a type
9885 T, an attempt to create the type 'lvalue reference to cv TD'
9886 creates the type 'lvalue reference to T,' while an attempt
9887 to create the type "rvalue reference to cv TD' creates the
9888 type TD."
9890 if (VOID_TYPE_P (type))
9891 /* We already gave an error. */;
9892 else if (TREE_CODE (type) == REFERENCE_TYPE)
9894 if (declarator->u.reference.rvalue_ref)
9895 /* Leave type alone. */;
9896 else
9897 type = cp_build_reference_type (TREE_TYPE (type), false);
9899 else
9900 type = cp_build_reference_type
9901 (type, declarator->u.reference.rvalue_ref);
9903 /* In C++0x, we need this check for direct reference to
9904 reference declarations, which are forbidden by
9905 [8.3.2/5 dcl.ref]. Reference to reference declarations
9906 are only allowed indirectly through typedefs and template
9907 type arguments. Example:
9909 void foo(int & &); // invalid ref-to-ref decl
9911 typedef int & int_ref;
9912 void foo(int_ref &); // valid ref-to-ref decl
9914 if (inner_declarator && inner_declarator->kind == cdk_reference)
9915 error ("cannot declare reference to %q#T, which is not "
9916 "a typedef or a template type argument", type);
9918 else if (TREE_CODE (type) == METHOD_TYPE)
9919 type = build_ptrmemfunc_type (build_pointer_type (type));
9920 else if (declarator->kind == cdk_ptrmem)
9922 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9923 != NAMESPACE_DECL);
9924 if (declarator->u.pointer.class_type == error_mark_node)
9925 /* We will already have complained. */
9926 type = error_mark_node;
9927 else
9928 type = build_ptrmem_type (declarator->u.pointer.class_type,
9929 type);
9931 else
9932 type = build_pointer_type (type);
9934 /* Process a list of type modifier keywords (such as
9935 const or volatile) that were given inside the `*' or `&'. */
9937 if (declarator->u.pointer.qualifiers)
9939 type
9940 = cp_build_qualified_type (type,
9941 declarator->u.pointer.qualifiers);
9942 type_quals = cp_type_quals (type);
9945 /* Apply C++11 attributes to the pointer, and not to the
9946 type pointed to. This is unlike what is done for GNU
9947 attributes above. It is to comply with [dcl.ptr]/1:
9949 [the optional attribute-specifier-seq (7.6.1) appertains
9950 to the pointer and not to the object pointed to]. */
9951 if (declarator->std_attributes)
9952 decl_attributes (&type, declarator->std_attributes,
9955 ctype = NULL_TREE;
9956 break;
9958 case cdk_error:
9959 break;
9961 default:
9962 gcc_unreachable ();
9966 /* A `constexpr' specifier used in an object declaration declares
9967 the object as `const'. */
9968 if (constexpr_p && innermost_code != cdk_function)
9970 if (type_quals & TYPE_QUAL_VOLATILE)
9971 error ("both %<volatile%> and %<constexpr%> cannot be used here");
9972 if (TREE_CODE (type) != REFERENCE_TYPE)
9974 type_quals |= TYPE_QUAL_CONST;
9975 type = cp_build_qualified_type (type, type_quals);
9979 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9980 && TREE_CODE (type) != FUNCTION_TYPE
9981 && TREE_CODE (type) != METHOD_TYPE)
9983 error ("template-id %qD used as a declarator",
9984 unqualified_id);
9985 unqualified_id = dname;
9988 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9989 qualified with a class-name, turn it into a METHOD_TYPE, unless
9990 we know that the function is static. We take advantage of this
9991 opportunity to do other processing that pertains to entities
9992 explicitly declared to be class members. Note that if DECLARATOR
9993 is non-NULL, we know it is a cdk_id declarator; otherwise, we
9994 would not have exited the loop above. */
9995 if (declarator
9996 && declarator->u.id.qualifying_scope
9997 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
9999 ctype = declarator->u.id.qualifying_scope;
10000 ctype = TYPE_MAIN_VARIANT (ctype);
10001 template_count = num_template_headers_for_class (ctype);
10003 if (ctype == current_class_type)
10005 if (friendp)
10007 permerror (input_location, "member functions are implicitly friends of their class");
10008 friendp = 0;
10010 else
10011 permerror (declarator->id_loc,
10012 "extra qualification %<%T::%> on member %qs",
10013 ctype, name);
10015 else if (/* If the qualifying type is already complete, then we
10016 can skip the following checks. */
10017 !COMPLETE_TYPE_P (ctype)
10018 && (/* If the function is being defined, then
10019 qualifying type must certainly be complete. */
10020 funcdef_flag
10021 /* A friend declaration of "T::f" is OK, even if
10022 "T" is a template parameter. But, if this
10023 function is not a friend, the qualifying type
10024 must be a class. */
10025 || (!friendp && !CLASS_TYPE_P (ctype))
10026 /* For a declaration, the type need not be
10027 complete, if either it is dependent (since there
10028 is no meaningful definition of complete in that
10029 case) or the qualifying class is currently being
10030 defined. */
10031 || !(dependent_type_p (ctype)
10032 || currently_open_class (ctype)))
10033 /* Check that the qualifying type is complete. */
10034 && !complete_type_or_else (ctype, NULL_TREE))
10035 return error_mark_node;
10036 else if (TREE_CODE (type) == FUNCTION_TYPE)
10038 if (current_class_type
10039 && (!friendp || funcdef_flag))
10041 error (funcdef_flag
10042 ? G_("cannot define member function %<%T::%s%> "
10043 "within %<%T%>")
10044 : G_("cannot declare member function %<%T::%s%> "
10045 "within %<%T%>"),
10046 ctype, name, current_class_type);
10047 return error_mark_node;
10050 else if (typedef_p && current_class_type)
10052 error ("cannot declare member %<%T::%s%> within %qT",
10053 ctype, name, current_class_type);
10054 return error_mark_node;
10058 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
10059 ctype = current_class_type;
10061 /* Now TYPE has the actual type. */
10063 if (returned_attrs)
10065 if (attrlist)
10066 *attrlist = chainon (returned_attrs, *attrlist);
10067 else
10068 attrlist = &returned_attrs;
10071 if (declarator
10072 && declarator->kind == cdk_id
10073 && declarator->std_attributes)
10074 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
10075 a declarator-id appertains to the entity that is declared. */
10076 *attrlist = chainon (*attrlist, declarator->std_attributes);
10078 /* Handle parameter packs. */
10079 if (parameter_pack_p)
10081 if (decl_context == PARM)
10082 /* Turn the type into a pack expansion.*/
10083 type = make_pack_expansion (type);
10084 else
10085 error ("non-parameter %qs cannot be a parameter pack", name);
10088 /* Did array size calculations overflow or does the array cover more
10089 than half of the address-space? */
10090 if (TREE_CODE (type) == ARRAY_TYPE
10091 && COMPLETE_TYPE_P (type)
10092 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
10093 && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
10095 error ("size of array %qs is too large", name);
10096 /* If we proceed with the array type as it is, we'll eventually
10097 crash in tree_to_[su]hwi(). */
10098 type = error_mark_node;
10101 if ((decl_context == FIELD || decl_context == PARM)
10102 && !processing_template_decl
10103 && variably_modified_type_p (type, NULL_TREE))
10105 if (decl_context == FIELD)
10106 error ("data member may not have variably modified type %qT", type);
10107 else
10108 error ("parameter may not have variably modified type %qT", type);
10109 type = error_mark_node;
10112 if (explicitp == 1 || (explicitp && friendp))
10114 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
10115 in the declaration of a constructor or conversion function within
10116 a class definition. */
10117 if (!current_class_type)
10118 error ("%<explicit%> outside class declaration");
10119 else if (friendp)
10120 error ("%<explicit%> in friend declaration");
10121 else
10122 error ("only declarations of constructors and conversion operators "
10123 "can be %<explicit%>");
10124 explicitp = 0;
10127 if (storage_class == sc_mutable)
10129 if (decl_context != FIELD || friendp)
10131 error ("non-member %qs cannot be declared %<mutable%>", name);
10132 storage_class = sc_none;
10134 else if (decl_context == TYPENAME || typedef_p)
10136 error ("non-object member %qs cannot be declared %<mutable%>", name);
10137 storage_class = sc_none;
10139 else if (TREE_CODE (type) == FUNCTION_TYPE
10140 || TREE_CODE (type) == METHOD_TYPE)
10142 error ("function %qs cannot be declared %<mutable%>", name);
10143 storage_class = sc_none;
10145 else if (staticp)
10147 error ("static %qs cannot be declared %<mutable%>", name);
10148 storage_class = sc_none;
10150 else if (type_quals & TYPE_QUAL_CONST)
10152 error ("const %qs cannot be declared %<mutable%>", name);
10153 storage_class = sc_none;
10155 else if (TREE_CODE (type) == REFERENCE_TYPE)
10157 permerror (input_location, "reference %qs cannot be declared "
10158 "%<mutable%>", name);
10159 storage_class = sc_none;
10163 /* If this is declaring a typedef name, return a TYPE_DECL. */
10164 if (typedef_p && decl_context != TYPENAME)
10166 tree decl;
10168 /* Note that the grammar rejects storage classes
10169 in typenames, fields or parameters. */
10170 if (current_lang_name == lang_name_java)
10171 TYPE_FOR_JAVA (type) = 1;
10173 /* This declaration:
10175 typedef void f(int) const;
10177 declares a function type which is not a member of any
10178 particular class, but which is cv-qualified; for
10179 example "f S::*" declares a pointer to a const-qualified
10180 member function of S. We record the cv-qualification in the
10181 function type. */
10182 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
10184 type = apply_memfn_quals (type, memfn_quals, rqual);
10186 /* We have now dealt with these qualifiers. */
10187 memfn_quals = TYPE_UNQUALIFIED;
10188 rqual = REF_QUAL_NONE;
10191 if (type_uses_auto (type))
10193 error ("typedef declared %<auto%>");
10194 type = error_mark_node;
10197 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type)
10198 && (flag_iso || warn_vla > 0))
10199 pedwarn (input_location, OPT_Wvla,
10200 "typedef naming array of runtime bound");
10202 if (decl_context == FIELD)
10203 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10204 else
10205 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10206 if (id_declarator && declarator->u.id.qualifying_scope) {
10207 error_at (DECL_SOURCE_LOCATION (decl),
10208 "typedef name may not be a nested-name-specifier");
10209 TREE_TYPE (decl) = error_mark_node;
10212 if (decl_context != FIELD)
10214 if (!current_function_decl)
10215 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10216 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10217 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10218 (current_function_decl)))
10219 /* The TYPE_DECL is "abstract" because there will be
10220 clones of this constructor/destructor, and there will
10221 be copies of this TYPE_DECL generated in those
10222 clones. The decloning optimization (for space) may
10223 revert this subsequently if it determines that
10224 the clones should share a common implementation. */
10225 DECL_ABSTRACT (decl) = 1;
10227 else if (current_class_type
10228 && constructor_name_p (unqualified_id, current_class_type))
10229 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10230 "as enclosing class",
10231 unqualified_id);
10233 /* If the user declares "typedef struct {...} foo" then the
10234 struct will have an anonymous name. Fill that name in now.
10235 Nothing can refer to it, so nothing needs know about the name
10236 change. */
10237 if (type != error_mark_node
10238 && unqualified_id
10239 && TYPE_NAME (type)
10240 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10241 && TYPE_ANONYMOUS_P (type)
10242 && declspecs->type_definition_p
10243 && attributes_naming_typedef_ok (*attrlist)
10244 && cp_type_quals (type) == TYPE_UNQUALIFIED)
10246 tree t;
10248 /* Replace the anonymous name with the real name everywhere. */
10249 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10251 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
10252 /* We do not rename the debug info representing the
10253 anonymous tagged type because the standard says in
10254 [dcl.typedef] that the naming applies only for
10255 linkage purposes. */
10256 /*debug_hooks->set_name (t, decl);*/
10257 TYPE_NAME (t) = decl;
10260 if (TYPE_LANG_SPECIFIC (type))
10261 TYPE_WAS_ANONYMOUS (type) = 1;
10263 /* If this is a typedef within a template class, the nested
10264 type is a (non-primary) template. The name for the
10265 template needs updating as well. */
10266 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10267 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10268 = TYPE_IDENTIFIER (type);
10270 /* Adjust linkage now that we aren't anonymous anymore. */
10271 reset_type_linkage (type);
10273 /* FIXME remangle member functions; member functions of a
10274 type with external linkage have external linkage. */
10277 if (signed_p
10278 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10279 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10281 bad_specifiers (decl, BSP_TYPE, virtualp,
10282 memfn_quals != TYPE_UNQUALIFIED,
10283 inlinep, friendp, raises != NULL_TREE);
10285 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10286 /* Acknowledge that this was written:
10287 `using analias = atype;'. */
10288 TYPE_DECL_ALIAS_P (decl) = 1;
10290 return decl;
10293 /* Detect the case of an array type of unspecified size
10294 which came, as such, direct from a typedef name.
10295 We must copy the type, so that the array's domain can be
10296 individually set by the object's initializer. */
10298 if (type && typedef_type
10299 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10300 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10301 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10303 /* Detect where we're using a typedef of function type to declare a
10304 function. PARMS will not be set, so we must create it now. */
10306 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10308 tree decls = NULL_TREE;
10309 tree args;
10311 for (args = TYPE_ARG_TYPES (type);
10312 args && args != void_list_node;
10313 args = TREE_CHAIN (args))
10315 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10317 DECL_CHAIN (decl) = decls;
10318 decls = decl;
10321 parms = nreverse (decls);
10323 if (decl_context != TYPENAME)
10325 /* The qualifiers on the function type become the qualifiers on
10326 the non-static member function. */
10327 memfn_quals |= type_memfn_quals (type);
10328 rqual = type_memfn_rqual (type);
10329 type_quals = TYPE_UNQUALIFIED;
10333 /* If this is a type name (such as, in a cast or sizeof),
10334 compute the type and return it now. */
10336 if (decl_context == TYPENAME)
10338 /* Note that the grammar rejects storage classes
10339 in typenames, fields or parameters. */
10340 if (type_quals != TYPE_UNQUALIFIED)
10341 type_quals = TYPE_UNQUALIFIED;
10343 /* Special case: "friend class foo" looks like a TYPENAME context. */
10344 if (friendp)
10346 if (type_quals != TYPE_UNQUALIFIED)
10348 error ("type qualifiers specified for friend class declaration");
10349 type_quals = TYPE_UNQUALIFIED;
10351 if (inlinep)
10353 error ("%<inline%> specified for friend class declaration");
10354 inlinep = 0;
10357 if (!current_aggr)
10359 /* Don't allow friend declaration without a class-key. */
10360 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10361 permerror (input_location, "template parameters cannot be friends");
10362 else if (TREE_CODE (type) == TYPENAME_TYPE)
10363 permerror (input_location, "friend declaration requires class-key, "
10364 "i.e. %<friend class %T::%D%>",
10365 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10366 else
10367 permerror (input_location, "friend declaration requires class-key, "
10368 "i.e. %<friend %#T%>",
10369 type);
10372 /* Only try to do this stuff if we didn't already give up. */
10373 if (type != integer_type_node)
10375 /* A friendly class? */
10376 if (current_class_type)
10377 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10378 /*complain=*/true);
10379 else
10380 error ("trying to make class %qT a friend of global scope",
10381 type);
10383 type = void_type_node;
10386 else if (memfn_quals || rqual)
10388 if (ctype == NULL_TREE
10389 && TREE_CODE (type) == METHOD_TYPE)
10390 ctype = TYPE_METHOD_BASETYPE (type);
10392 if (ctype)
10393 type = build_memfn_type (type, ctype, memfn_quals, rqual);
10394 /* Core issue #547: need to allow this in template type args.
10395 Allow it in general in C++11 for alias-declarations. */
10396 else if ((template_type_arg || cxx_dialect >= cxx11)
10397 && TREE_CODE (type) == FUNCTION_TYPE)
10398 type = apply_memfn_quals (type, memfn_quals, rqual);
10399 else
10400 error ("invalid qualifiers on non-member function type");
10403 return type;
10405 else if (unqualified_id == NULL_TREE && decl_context != PARM
10406 && decl_context != CATCHPARM
10407 && TREE_CODE (type) != UNION_TYPE
10408 && ! bitfield)
10410 error ("abstract declarator %qT used as declaration", type);
10411 return error_mark_node;
10414 /* Only functions may be declared using an operator-function-id. */
10415 if (unqualified_id
10416 && IDENTIFIER_OPNAME_P (unqualified_id)
10417 && TREE_CODE (type) != FUNCTION_TYPE
10418 && TREE_CODE (type) != METHOD_TYPE)
10420 error ("declaration of %qD as non-function", unqualified_id);
10421 return error_mark_node;
10424 /* We don't check parameter types here because we can emit a better
10425 error message later. */
10426 if (decl_context != PARM)
10428 type = check_var_type (unqualified_id, type);
10429 if (type == error_mark_node)
10430 return error_mark_node;
10433 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10434 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10436 if (decl_context == PARM || decl_context == CATCHPARM)
10438 if (ctype || in_namespace)
10439 error ("cannot use %<::%> in parameter declaration");
10441 if (type_uses_auto (type))
10443 if (cxx_dialect >= cxx1y)
10444 error ("%<auto%> parameter not permitted in this context");
10445 else
10446 error ("parameter declared %<auto%>");
10447 type = error_mark_node;
10450 /* A parameter declared as an array of T is really a pointer to T.
10451 One declared as a function is really a pointer to a function.
10452 One declared as a member is really a pointer to member. */
10454 if (TREE_CODE (type) == ARRAY_TYPE)
10456 /* Transfer const-ness of array into that of type pointed to. */
10457 type = build_pointer_type (TREE_TYPE (type));
10458 type_quals = TYPE_UNQUALIFIED;
10459 array_parameter_p = true;
10461 else if (TREE_CODE (type) == FUNCTION_TYPE)
10462 type = build_pointer_type (type);
10465 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10466 && !NEW_DELETE_OPNAME_P (unqualified_id))
10468 cp_cv_quals real_quals = memfn_quals;
10469 if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
10470 real_quals |= TYPE_QUAL_CONST;
10471 type = build_memfn_type (type, ctype, real_quals, rqual);
10475 tree decl;
10477 if (decl_context == PARM)
10479 decl = cp_build_parm_decl (unqualified_id, type);
10480 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
10482 bad_specifiers (decl, BSP_PARM, virtualp,
10483 memfn_quals != TYPE_UNQUALIFIED,
10484 inlinep, friendp, raises != NULL_TREE);
10486 else if (decl_context == FIELD)
10488 if (!staticp && TREE_CODE (type) != METHOD_TYPE
10489 && type_uses_auto (type))
10491 error ("non-static data member declared %<auto%>");
10492 type = error_mark_node;
10495 /* The C99 flexible array extension. */
10496 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10497 && TYPE_DOMAIN (type) == NULL_TREE)
10499 tree itype = compute_array_index_type (dname, integer_zero_node,
10500 tf_warning_or_error);
10501 type = build_cplus_array_type (TREE_TYPE (type), itype);
10504 if (type == error_mark_node)
10506 /* Happens when declaring arrays of sizes which
10507 are error_mark_node, for example. */
10508 decl = NULL_TREE;
10510 else if (in_namespace && !friendp)
10512 /* Something like struct S { int N::j; }; */
10513 error ("invalid use of %<::%>");
10514 return error_mark_node;
10516 else if (TREE_CODE (type) == FUNCTION_TYPE
10517 || TREE_CODE (type) == METHOD_TYPE)
10519 int publicp = 0;
10520 tree function_context;
10522 if (friendp == 0)
10524 /* This should never happen in pure C++ (the check
10525 could be an assert). It could happen in
10526 Objective-C++ if someone writes invalid code that
10527 uses a function declaration for an instance
10528 variable or property (instance variables and
10529 properties are parsed as FIELD_DECLs, but they are
10530 part of an Objective-C class, not a C++ class).
10531 That code is invalid and is caught by this
10532 check. */
10533 if (!ctype)
10535 error ("declaration of function %qD in invalid context",
10536 unqualified_id);
10537 return error_mark_node;
10540 /* ``A union may [ ... ] not [ have ] virtual functions.''
10541 ARM 9.5 */
10542 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10544 error ("function %qD declared virtual inside a union",
10545 unqualified_id);
10546 return error_mark_node;
10549 if (NEW_DELETE_OPNAME_P (unqualified_id))
10551 if (virtualp)
10553 error ("%qD cannot be declared virtual, since it "
10554 "is always static",
10555 unqualified_id);
10556 virtualp = 0;
10561 /* Check that the name used for a destructor makes sense. */
10562 if (sfk == sfk_destructor)
10564 tree uqname = id_declarator->u.id.unqualified_name;
10566 if (!ctype)
10568 gcc_assert (friendp);
10569 error ("expected qualified name in friend declaration "
10570 "for destructor %qD", uqname);
10571 return error_mark_node;
10574 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10576 error ("declaration of %qD as member of %qT",
10577 uqname, ctype);
10578 return error_mark_node;
10580 if (constexpr_p)
10582 error ("a destructor cannot be %<constexpr%>");
10583 return error_mark_node;
10586 else if (sfk == sfk_constructor && friendp && !ctype)
10588 error ("expected qualified name in friend declaration "
10589 "for constructor %qD",
10590 id_declarator->u.id.unqualified_name);
10591 return error_mark_node;
10594 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10595 function_context = (ctype != NULL_TREE) ?
10596 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10597 publicp = (! friendp || ! staticp)
10598 && function_context == NULL_TREE;
10600 if (late_return_type_p)
10601 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10603 decl = grokfndecl (ctype, type,
10604 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10605 ? unqualified_id : dname,
10606 parms,
10607 unqualified_id,
10608 virtualp, flags, memfn_quals, rqual, raises,
10609 friendp ? -1 : 0, friendp, publicp,
10610 inlinep | (2 * constexpr_p),
10611 sfk,
10612 funcdef_flag, template_count, in_namespace,
10613 attrlist, declarator->id_loc);
10614 decl = set_virt_specifiers (decl, virt_specifiers);
10615 if (decl == NULL_TREE)
10616 return error_mark_node;
10617 #if 0
10618 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10619 /* The decl and setting of decl_attr is also turned off. */
10620 decl = build_decl_attribute_variant (decl, decl_attr);
10621 #endif
10623 /* [class.conv.ctor]
10625 A constructor declared without the function-specifier
10626 explicit that can be called with a single parameter
10627 specifies a conversion from the type of its first
10628 parameter to the type of its class. Such a constructor
10629 is called a converting constructor. */
10630 if (explicitp == 2)
10631 DECL_NONCONVERTING_P (decl) = 1;
10633 else if (!staticp && !dependent_type_p (type)
10634 && !COMPLETE_TYPE_P (complete_type (type))
10635 && (TREE_CODE (type) != ARRAY_TYPE
10636 || !COMPLETE_TYPE_P (TREE_TYPE (type))
10637 || initialized == 0))
10639 if (unqualified_id)
10641 error ("field %qD has incomplete type %qT",
10642 unqualified_id, type);
10643 cxx_incomplete_type_inform (strip_array_types (type));
10645 else
10646 error ("name %qT has incomplete type", type);
10648 type = error_mark_node;
10649 decl = NULL_TREE;
10651 else
10653 if (friendp)
10655 error ("%qE is neither function nor member function; "
10656 "cannot be declared friend", unqualified_id);
10657 friendp = 0;
10659 decl = NULL_TREE;
10662 if (friendp)
10664 /* Friends are treated specially. */
10665 if (ctype == current_class_type)
10666 ; /* We already issued a permerror. */
10667 else if (decl && DECL_NAME (decl))
10669 if (template_class_depth (current_class_type) == 0)
10671 decl = check_explicit_specialization
10672 (unqualified_id, decl, template_count,
10673 2 * funcdef_flag + 4);
10674 if (decl == error_mark_node)
10675 return error_mark_node;
10678 decl = do_friend (ctype, unqualified_id, decl,
10679 *attrlist, flags,
10680 funcdef_flag);
10681 return decl;
10683 else
10684 return error_mark_node;
10687 /* Structure field. It may not be a function, except for C++. */
10689 if (decl == NULL_TREE)
10691 if (staticp)
10693 /* C++ allows static class members. All other work
10694 for this is done by grokfield. */
10695 decl = build_lang_decl_loc (declarator
10696 ? declarator->id_loc
10697 : input_location,
10698 VAR_DECL, unqualified_id, type);
10699 set_linkage_for_static_data_member (decl);
10700 /* Even if there is an in-class initialization, DECL
10701 is considered undefined until an out-of-class
10702 definition is provided. */
10703 DECL_EXTERNAL (decl) = 1;
10705 if (thread_p)
10707 set_decl_tls_model (decl, decl_default_tls_model (decl));
10708 if (declspecs->gnu_thread_keyword_p)
10709 DECL_GNU_TLS_P (decl) = true;
10712 if (constexpr_p && !initialized)
10714 error ("constexpr static data member %qD must have an "
10715 "initializer", decl);
10716 constexpr_p = false;
10719 else
10721 if (constexpr_p)
10723 error ("non-static data member %qE declared %<constexpr%>",
10724 unqualified_id);
10725 constexpr_p = false;
10727 decl = build_decl (input_location,
10728 FIELD_DECL, unqualified_id, type);
10729 DECL_NONADDRESSABLE_P (decl) = bitfield;
10730 if (bitfield && !unqualified_id)
10731 TREE_NO_WARNING (decl) = 1;
10733 if (storage_class == sc_mutable)
10735 DECL_MUTABLE_P (decl) = 1;
10736 storage_class = sc_none;
10739 if (initialized)
10741 /* An attempt is being made to initialize a non-static
10742 member. This is new in C++11. */
10743 maybe_warn_cpp0x (CPP0X_NSDMI);
10745 /* If this has been parsed with static storage class, but
10746 errors forced staticp to be cleared, ensure NSDMI is
10747 not present. */
10748 if (declspecs->storage_class == sc_static)
10749 DECL_INITIAL (decl) = error_mark_node;
10753 bad_specifiers (decl, BSP_FIELD, virtualp,
10754 memfn_quals != TYPE_UNQUALIFIED,
10755 inlinep, friendp, raises != NULL_TREE);
10758 else if (TREE_CODE (type) == FUNCTION_TYPE
10759 || TREE_CODE (type) == METHOD_TYPE)
10761 tree original_name;
10762 int publicp = 0;
10764 if (!unqualified_id)
10765 return error_mark_node;
10767 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10768 original_name = dname;
10769 else
10770 original_name = unqualified_id;
10772 if (storage_class == sc_auto)
10773 error ("storage class %<auto%> invalid for function %qs", name);
10774 else if (storage_class == sc_register)
10775 error ("storage class %<register%> invalid for function %qs", name);
10776 else if (thread_p)
10778 if (declspecs->gnu_thread_keyword_p)
10779 error ("storage class %<__thread%> invalid for function %qs",
10780 name);
10781 else
10782 error ("storage class %<thread_local%> invalid for function %qs",
10783 name);
10786 if (virt_specifiers)
10787 error ("virt-specifiers in %qs not allowed outside a class definition", name);
10788 /* Function declaration not at top level.
10789 Storage classes other than `extern' are not allowed
10790 and `extern' makes no difference. */
10791 if (! toplevel_bindings_p ()
10792 && (storage_class == sc_static
10793 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
10794 && pedantic)
10796 if (storage_class == sc_static)
10797 pedwarn (input_location, OPT_Wpedantic,
10798 "%<static%> specified invalid for function %qs "
10799 "declared out of global scope", name);
10800 else
10801 pedwarn (input_location, OPT_Wpedantic,
10802 "%<inline%> specifier invalid for function %qs "
10803 "declared out of global scope", name);
10806 if (ctype == NULL_TREE)
10808 if (virtualp)
10810 error ("virtual non-class function %qs", name);
10811 virtualp = 0;
10813 else if (sfk == sfk_constructor
10814 || sfk == sfk_destructor)
10816 error (funcdef_flag
10817 ? G_("%qs defined in a non-class scope")
10818 : G_("%qs declared in a non-class scope"), name);
10819 sfk = sfk_none;
10823 /* Record whether the function is public. */
10824 publicp = (ctype != NULL_TREE
10825 || storage_class != sc_static);
10827 if (late_return_type_p)
10828 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10830 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10831 virtualp, flags, memfn_quals, rqual, raises,
10832 1, friendp,
10833 publicp, inlinep | (2 * constexpr_p), sfk,
10834 funcdef_flag,
10835 template_count, in_namespace, attrlist,
10836 declarator->id_loc);
10837 if (decl == NULL_TREE)
10838 return error_mark_node;
10840 if (staticp == 1)
10842 int invalid_static = 0;
10844 /* Don't allow a static member function in a class, and forbid
10845 declaring main to be static. */
10846 if (TREE_CODE (type) == METHOD_TYPE)
10848 permerror (input_location, "cannot declare member function %qD to have "
10849 "static linkage", decl);
10850 invalid_static = 1;
10852 else if (current_function_decl)
10854 /* FIXME need arm citation */
10855 error ("cannot declare static function inside another function");
10856 invalid_static = 1;
10859 if (invalid_static)
10861 staticp = 0;
10862 storage_class = sc_none;
10866 else
10868 /* It's a variable. */
10870 /* An uninitialized decl with `extern' is a reference. */
10871 decl = grokvardecl (type, unqualified_id,
10872 declspecs,
10873 initialized,
10874 (type_quals & TYPE_QUAL_CONST) != 0,
10875 ctype ? ctype : in_namespace);
10876 bad_specifiers (decl, BSP_VAR, virtualp,
10877 memfn_quals != TYPE_UNQUALIFIED,
10878 inlinep, friendp, raises != NULL_TREE);
10880 if (ctype)
10882 DECL_CONTEXT (decl) = ctype;
10883 if (staticp == 1)
10885 permerror (input_location, "%<static%> may not be used when defining "
10886 "(as opposed to declaring) a static data member");
10887 staticp = 0;
10888 storage_class = sc_none;
10890 if (storage_class == sc_register && TREE_STATIC (decl))
10892 error ("static member %qD declared %<register%>", decl);
10893 storage_class = sc_none;
10895 if (storage_class == sc_extern && pedantic)
10897 pedwarn (input_location, OPT_Wpedantic,
10898 "cannot explicitly declare member %q#D to have "
10899 "extern linkage", decl);
10900 storage_class = sc_none;
10903 else if (constexpr_p && DECL_EXTERNAL (decl))
10905 error ("declaration of constexpr variable %qD is not a definition",
10906 decl);
10907 constexpr_p = false;
10911 if (storage_class == sc_extern && initialized && !funcdef_flag)
10913 if (toplevel_bindings_p ())
10915 /* It's common practice (and completely valid) to have a const
10916 be initialized and declared extern. */
10917 if (!(type_quals & TYPE_QUAL_CONST))
10918 warning (0, "%qs initialized and declared %<extern%>", name);
10920 else
10922 error ("%qs has both %<extern%> and initializer", name);
10923 return error_mark_node;
10927 /* Record `register' declaration for warnings on &
10928 and in case doing stupid register allocation. */
10930 if (storage_class == sc_register)
10931 DECL_REGISTER (decl) = 1;
10932 else if (storage_class == sc_extern)
10933 DECL_THIS_EXTERN (decl) = 1;
10934 else if (storage_class == sc_static)
10935 DECL_THIS_STATIC (decl) = 1;
10937 /* Set constexpr flag on vars (functions got it in grokfndecl). */
10938 if (constexpr_p && VAR_P (decl))
10939 DECL_DECLARED_CONSTEXPR_P (decl) = true;
10941 /* Record constancy and volatility on the DECL itself . There's
10942 no need to do this when processing a template; we'll do this
10943 for the instantiated declaration based on the type of DECL. */
10944 if (!processing_template_decl)
10945 cp_apply_type_quals_to_decl (type_quals, decl);
10947 return decl;
10951 /* Subroutine of start_function. Ensure that each of the parameter
10952 types (as listed in PARMS) is complete, as is required for a
10953 function definition. */
10955 static void
10956 require_complete_types_for_parms (tree parms)
10958 for (; parms; parms = DECL_CHAIN (parms))
10960 if (dependent_type_p (TREE_TYPE (parms)))
10961 continue;
10962 if (!VOID_TYPE_P (TREE_TYPE (parms))
10963 && complete_type_or_else (TREE_TYPE (parms), parms))
10965 relayout_decl (parms);
10966 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10968 else
10969 /* grokparms or complete_type_or_else will have already issued
10970 an error. */
10971 TREE_TYPE (parms) = error_mark_node;
10975 /* Returns nonzero if T is a local variable. */
10978 local_variable_p (const_tree t)
10980 if ((VAR_P (t)
10981 /* A VAR_DECL with a context that is a _TYPE is a static data
10982 member. */
10983 && !TYPE_P (CP_DECL_CONTEXT (t))
10984 /* Any other non-local variable must be at namespace scope. */
10985 && !DECL_NAMESPACE_SCOPE_P (t))
10986 || (TREE_CODE (t) == PARM_DECL))
10987 return 1;
10989 return 0;
10992 /* Like local_variable_p, but suitable for use as a tree-walking
10993 function. */
10995 static tree
10996 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10997 void * /*data*/)
10999 if (local_variable_p (*tp)
11000 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
11001 return *tp;
11002 else if (TYPE_P (*tp))
11003 *walk_subtrees = 0;
11005 return NULL_TREE;
11008 /* Check that ARG, which is a default-argument expression for a
11009 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
11010 something goes wrong. DECL may also be a _TYPE node, rather than a
11011 DECL, if there is no DECL available. */
11013 tree
11014 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
11016 tree var;
11017 tree decl_type;
11019 if (TREE_CODE (arg) == DEFAULT_ARG)
11020 /* We get a DEFAULT_ARG when looking at an in-class declaration
11021 with a default argument. Ignore the argument for now; we'll
11022 deal with it after the class is complete. */
11023 return arg;
11025 if (TYPE_P (decl))
11027 decl_type = decl;
11028 decl = NULL_TREE;
11030 else
11031 decl_type = TREE_TYPE (decl);
11033 if (arg == error_mark_node
11034 || decl == error_mark_node
11035 || TREE_TYPE (arg) == error_mark_node
11036 || decl_type == error_mark_node)
11037 /* Something already went wrong. There's no need to check
11038 further. */
11039 return error_mark_node;
11041 /* [dcl.fct.default]
11043 A default argument expression is implicitly converted to the
11044 parameter type. */
11045 ++cp_unevaluated_operand;
11046 perform_implicit_conversion_flags (decl_type, arg, complain,
11047 LOOKUP_IMPLICIT);
11048 --cp_unevaluated_operand;
11050 if (warn_zero_as_null_pointer_constant
11051 && TYPE_PTR_OR_PTRMEM_P (decl_type)
11052 && null_ptr_cst_p (arg)
11053 && (complain & tf_warning)
11054 && maybe_warn_zero_as_null_pointer_constant (arg, input_location))
11055 return nullptr_node;
11057 /* [dcl.fct.default]
11059 Local variables shall not be used in default argument
11060 expressions.
11062 The keyword `this' shall not be used in a default argument of a
11063 member function. */
11064 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
11065 if (var)
11067 if (complain & tf_warning_or_error)
11069 if (DECL_NAME (var) == this_identifier)
11070 permerror (input_location, "default argument %qE uses %qD",
11071 arg, var);
11072 else
11073 error ("default argument %qE uses local variable %qD", arg, var);
11075 return error_mark_node;
11078 /* All is well. */
11079 return arg;
11082 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
11084 static tree
11085 type_is_deprecated (tree type)
11087 enum tree_code code;
11088 if (TREE_DEPRECATED (type))
11089 return type;
11090 if (TYPE_NAME (type)
11091 && TREE_DEPRECATED (TYPE_NAME (type)))
11092 return type;
11094 /* Do warn about using typedefs to a deprecated class. */
11095 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
11096 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
11098 code = TREE_CODE (type);
11100 if (code == POINTER_TYPE || code == REFERENCE_TYPE
11101 || code == OFFSET_TYPE || code == FUNCTION_TYPE
11102 || code == METHOD_TYPE || code == ARRAY_TYPE)
11103 return type_is_deprecated (TREE_TYPE (type));
11105 if (TYPE_PTRMEMFUNC_P (type))
11106 return type_is_deprecated
11107 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
11109 return NULL_TREE;
11112 /* Decode the list of parameter types for a function type.
11113 Given the list of things declared inside the parens,
11114 return a list of types.
11116 If this parameter does not end with an ellipsis, we append
11117 void_list_node.
11119 *PARMS is set to the chain of PARM_DECLs created. */
11121 static tree
11122 grokparms (tree parmlist, tree *parms)
11124 tree result = NULL_TREE;
11125 tree decls = NULL_TREE;
11126 tree parm;
11127 int any_error = 0;
11129 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
11131 tree type = NULL_TREE;
11132 tree init = TREE_PURPOSE (parm);
11133 tree decl = TREE_VALUE (parm);
11134 const char *errmsg;
11136 if (parm == void_list_node)
11137 break;
11139 if (! decl || TREE_TYPE (decl) == error_mark_node)
11140 continue;
11142 type = TREE_TYPE (decl);
11143 if (VOID_TYPE_P (type))
11145 if (same_type_p (type, void_type_node)
11146 && !init
11147 && !DECL_NAME (decl) && !result
11148 && TREE_CHAIN (parm) == void_list_node)
11149 /* DR 577: A parameter list consisting of a single
11150 unnamed parameter of non-dependent type 'void'. */
11151 break;
11152 else if (cv_qualified_p (type))
11153 error_at (DECL_SOURCE_LOCATION (decl),
11154 "invalid use of cv-qualified type %qT in "
11155 "parameter declaration", type);
11156 else
11157 error_at (DECL_SOURCE_LOCATION (decl),
11158 "invalid use of type %<void%> in parameter "
11159 "declaration");
11160 /* It's not a good idea to actually create parameters of
11161 type `void'; other parts of the compiler assume that a
11162 void type terminates the parameter list. */
11163 type = error_mark_node;
11164 TREE_TYPE (decl) = error_mark_node;
11167 if (type != error_mark_node
11168 && TYPE_FOR_JAVA (type)
11169 && MAYBE_CLASS_TYPE_P (type))
11171 error ("parameter %qD has Java class type", decl);
11172 type = error_mark_node;
11173 TREE_TYPE (decl) = error_mark_node;
11174 init = NULL_TREE;
11177 if (type != error_mark_node
11178 && (errmsg = targetm.invalid_parameter_type (type)))
11180 error (errmsg);
11181 type = error_mark_node;
11182 TREE_TYPE (decl) = error_mark_node;
11185 if (type != error_mark_node)
11187 if (deprecated_state != DEPRECATED_SUPPRESS)
11189 tree deptype = type_is_deprecated (type);
11190 if (deptype)
11191 warn_deprecated_use (deptype, NULL_TREE);
11194 /* Top-level qualifiers on the parameters are
11195 ignored for function types. */
11196 type = cp_build_qualified_type (type, 0);
11197 if (TREE_CODE (type) == METHOD_TYPE)
11199 error ("parameter %qD invalidly declared method type", decl);
11200 type = build_pointer_type (type);
11201 TREE_TYPE (decl) = type;
11203 else if (abstract_virtuals_error (decl, type))
11204 any_error = 1; /* Seems like a good idea. */
11205 else if (POINTER_TYPE_P (type))
11207 /* [dcl.fct]/6, parameter types cannot contain pointers
11208 (references) to arrays of unknown bound. */
11209 tree t = TREE_TYPE (type);
11210 int ptr = TYPE_PTR_P (type);
11212 while (1)
11214 if (TYPE_PTR_P (t))
11215 ptr = 1;
11216 else if (TREE_CODE (t) != ARRAY_TYPE)
11217 break;
11218 else if (!TYPE_DOMAIN (t))
11219 break;
11220 t = TREE_TYPE (t);
11222 if (TREE_CODE (t) == ARRAY_TYPE)
11223 error (ptr
11224 ? G_("parameter %qD includes pointer to array of "
11225 "unknown bound %qT")
11226 : G_("parameter %qD includes reference to array of "
11227 "unknown bound %qT"),
11228 decl, t);
11231 if (any_error)
11232 init = NULL_TREE;
11233 else if (init && !processing_template_decl)
11234 init = check_default_argument (decl, init, tf_warning_or_error);
11237 DECL_CHAIN (decl) = decls;
11238 decls = decl;
11239 result = tree_cons (init, type, result);
11241 decls = nreverse (decls);
11242 result = nreverse (result);
11243 if (parm)
11244 result = chainon (result, void_list_node);
11245 *parms = decls;
11247 return result;
11251 /* D is a constructor or overloaded `operator='.
11253 Let T be the class in which D is declared. Then, this function
11254 returns:
11256 -1 if D's is an ill-formed constructor or copy assignment operator
11257 whose first parameter is of type `T'.
11258 0 if D is not a copy constructor or copy assignment
11259 operator.
11260 1 if D is a copy constructor or copy assignment operator whose
11261 first parameter is a reference to non-const qualified T.
11262 2 if D is a copy constructor or copy assignment operator whose
11263 first parameter is a reference to const qualified T.
11265 This function can be used as a predicate. Positive values indicate
11266 a copy constructor and nonzero values indicate a copy assignment
11267 operator. */
11270 copy_fn_p (const_tree d)
11272 tree args;
11273 tree arg_type;
11274 int result = 1;
11276 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11278 if (TREE_CODE (d) == TEMPLATE_DECL
11279 || (DECL_TEMPLATE_INFO (d)
11280 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11281 /* Instantiations of template member functions are never copy
11282 functions. Note that member functions of templated classes are
11283 represented as template functions internally, and we must
11284 accept those as copy functions. */
11285 return 0;
11287 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11288 if (!args)
11289 return 0;
11291 arg_type = TREE_VALUE (args);
11292 if (arg_type == error_mark_node)
11293 return 0;
11295 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11297 /* Pass by value copy assignment operator. */
11298 result = -1;
11300 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11301 && !TYPE_REF_IS_RVALUE (arg_type)
11302 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11304 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11305 result = 2;
11307 else
11308 return 0;
11310 args = TREE_CHAIN (args);
11312 if (args && args != void_list_node && !TREE_PURPOSE (args))
11313 /* There are more non-optional args. */
11314 return 0;
11316 return result;
11319 /* D is a constructor or overloaded `operator='.
11321 Let T be the class in which D is declared. Then, this function
11322 returns true when D is a move constructor or move assignment
11323 operator, false otherwise. */
11325 bool
11326 move_fn_p (const_tree d)
11328 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11330 if (cxx_dialect == cxx98)
11331 /* There are no move constructors if we are in C++98 mode. */
11332 return false;
11334 if (TREE_CODE (d) == TEMPLATE_DECL
11335 || (DECL_TEMPLATE_INFO (d)
11336 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11337 /* Instantiations of template member functions are never move
11338 functions. Note that member functions of templated classes are
11339 represented as template functions internally, and we must
11340 accept those as move functions. */
11341 return 0;
11343 return move_signature_fn_p (d);
11346 /* D is a constructor or overloaded `operator='.
11348 Then, this function returns true when D has the same signature as a move
11349 constructor or move assignment operator (because either it is such a
11350 ctor/op= or it is a template specialization with the same signature),
11351 false otherwise. */
11353 bool
11354 move_signature_fn_p (const_tree d)
11356 tree args;
11357 tree arg_type;
11358 bool result = false;
11360 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11361 if (!args)
11362 return 0;
11364 arg_type = TREE_VALUE (args);
11365 if (arg_type == error_mark_node)
11366 return 0;
11368 if (TREE_CODE (arg_type) == REFERENCE_TYPE
11369 && TYPE_REF_IS_RVALUE (arg_type)
11370 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11371 DECL_CONTEXT (d)))
11372 result = true;
11374 args = TREE_CHAIN (args);
11376 if (args && args != void_list_node && !TREE_PURPOSE (args))
11377 /* There are more non-optional args. */
11378 return false;
11380 return result;
11383 /* Remember any special properties of member function DECL. */
11385 void
11386 grok_special_member_properties (tree decl)
11388 tree class_type;
11390 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11391 return;
11393 class_type = DECL_CONTEXT (decl);
11394 if (DECL_CONSTRUCTOR_P (decl))
11396 int ctor = copy_fn_p (decl);
11398 if (!DECL_ARTIFICIAL (decl))
11399 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11401 if (ctor > 0)
11403 /* [class.copy]
11405 A non-template constructor for class X is a copy
11406 constructor if its first parameter is of type X&, const
11407 X&, volatile X& or const volatile X&, and either there
11408 are no other parameters or else all other parameters have
11409 default arguments. */
11410 TYPE_HAS_COPY_CTOR (class_type) = 1;
11411 if (user_provided_p (decl))
11412 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
11413 if (ctor > 1)
11414 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
11416 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
11418 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
11419 if (user_provided_p (decl))
11420 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
11422 else if (move_fn_p (decl) && user_provided_p (decl))
11423 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
11424 else if (is_list_ctor (decl))
11425 TYPE_HAS_LIST_CTOR (class_type) = 1;
11427 if (DECL_DECLARED_CONSTEXPR_P (decl)
11428 && !copy_fn_p (decl) && !move_fn_p (decl))
11429 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
11431 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
11433 /* [class.copy]
11435 A non-template assignment operator for class X is a copy
11436 assignment operator if its parameter is of type X, X&, const
11437 X&, volatile X& or const volatile X&. */
11439 int assop = copy_fn_p (decl);
11441 if (assop)
11443 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
11444 if (user_provided_p (decl))
11445 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
11446 if (assop != 1)
11447 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
11449 else if (move_fn_p (decl) && user_provided_p (decl))
11450 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
11452 /* Destructors are handled in check_methods. */
11455 /* Check a constructor DECL has the correct form. Complains
11456 if the class has a constructor of the form X(X). */
11459 grok_ctor_properties (const_tree ctype, const_tree decl)
11461 int ctor_parm = copy_fn_p (decl);
11463 if (ctor_parm < 0)
11465 /* [class.copy]
11467 A declaration of a constructor for a class X is ill-formed if
11468 its first parameter is of type (optionally cv-qualified) X
11469 and either there are no other parameters or else all other
11470 parameters have default arguments.
11472 We *don't* complain about member template instantiations that
11473 have this form, though; they can occur as we try to decide
11474 what constructor to use during overload resolution. Since
11475 overload resolution will never prefer such a constructor to
11476 the non-template copy constructor (which is either explicitly
11477 or implicitly defined), there's no need to worry about their
11478 existence. Theoretically, they should never even be
11479 instantiated, but that's hard to forestall. */
11480 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11481 ctype, ctype);
11482 return 0;
11485 return 1;
11488 /* An operator with this code is unary, but can also be binary. */
11490 static int
11491 ambi_op_p (enum tree_code code)
11493 return (code == INDIRECT_REF
11494 || code == ADDR_EXPR
11495 || code == UNARY_PLUS_EXPR
11496 || code == NEGATE_EXPR
11497 || code == PREINCREMENT_EXPR
11498 || code == PREDECREMENT_EXPR);
11501 /* An operator with this name can only be unary. */
11503 static int
11504 unary_op_p (enum tree_code code)
11506 return (code == TRUTH_NOT_EXPR
11507 || code == BIT_NOT_EXPR
11508 || code == COMPONENT_REF
11509 || code == TYPE_EXPR);
11512 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
11513 errors are issued for invalid declarations. */
11515 bool
11516 grok_op_properties (tree decl, bool complain)
11518 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11519 tree argtype;
11520 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11521 tree name = DECL_NAME (decl);
11522 enum tree_code operator_code;
11523 int arity;
11524 bool ellipsis_p;
11525 tree class_type;
11527 /* Count the number of arguments and check for ellipsis. */
11528 for (argtype = argtypes, arity = 0;
11529 argtype && argtype != void_list_node;
11530 argtype = TREE_CHAIN (argtype))
11531 ++arity;
11532 ellipsis_p = !argtype;
11534 class_type = DECL_CONTEXT (decl);
11535 if (class_type && !CLASS_TYPE_P (class_type))
11536 class_type = NULL_TREE;
11538 if (DECL_CONV_FN_P (decl))
11539 operator_code = TYPE_EXPR;
11540 else
11543 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
11544 if (ansi_opname (CODE) == name) \
11546 operator_code = (CODE); \
11547 break; \
11549 else if (ansi_assopname (CODE) == name) \
11551 operator_code = (CODE); \
11552 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
11553 break; \
11556 #include "operators.def"
11557 #undef DEF_OPERATOR
11559 gcc_unreachable ();
11561 while (0);
11562 gcc_assert (operator_code != MAX_TREE_CODES);
11563 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11565 if (class_type)
11566 switch (operator_code)
11568 case NEW_EXPR:
11569 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11570 break;
11572 case DELETE_EXPR:
11573 TYPE_GETS_DELETE (class_type) |= 1;
11574 break;
11576 case VEC_NEW_EXPR:
11577 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11578 break;
11580 case VEC_DELETE_EXPR:
11581 TYPE_GETS_DELETE (class_type) |= 2;
11582 break;
11584 default:
11585 break;
11588 /* [basic.std.dynamic.allocation]/1:
11590 A program is ill-formed if an allocation function is declared
11591 in a namespace scope other than global scope or declared static
11592 in global scope.
11594 The same also holds true for deallocation functions. */
11595 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11596 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11598 if (DECL_NAMESPACE_SCOPE_P (decl))
11600 if (CP_DECL_CONTEXT (decl) != global_namespace)
11602 error ("%qD may not be declared within a namespace", decl);
11603 return false;
11605 else if (!TREE_PUBLIC (decl))
11607 error ("%qD may not be declared as static", decl);
11608 return false;
11613 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11615 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11616 DECL_IS_OPERATOR_NEW (decl) = 1;
11618 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11619 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11620 else
11622 /* An operator function must either be a non-static member function
11623 or have at least one parameter of a class, a reference to a class,
11624 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11625 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11627 if (operator_code == TYPE_EXPR
11628 || operator_code == CALL_EXPR
11629 || operator_code == COMPONENT_REF
11630 || operator_code == ARRAY_REF
11631 || operator_code == NOP_EXPR)
11633 error ("%qD must be a nonstatic member function", decl);
11634 return false;
11636 else
11638 tree p;
11640 if (DECL_STATIC_FUNCTION_P (decl))
11642 error ("%qD must be either a non-static member "
11643 "function or a non-member function", decl);
11644 return false;
11647 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11649 tree arg = non_reference (TREE_VALUE (p));
11650 if (arg == error_mark_node)
11651 return false;
11653 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11654 because these checks are performed even on
11655 template functions. */
11656 if (MAYBE_CLASS_TYPE_P (arg)
11657 || TREE_CODE (arg) == ENUMERAL_TYPE)
11658 break;
11661 if (!p || p == void_list_node)
11663 if (complain)
11664 error ("%qD must have an argument of class or "
11665 "enumerated type", decl);
11666 return false;
11671 /* There are no restrictions on the arguments to an overloaded
11672 "operator ()". */
11673 if (operator_code == CALL_EXPR)
11674 return true;
11676 /* Warn about conversion operators that will never be used. */
11677 if (IDENTIFIER_TYPENAME_P (name)
11678 && ! DECL_TEMPLATE_INFO (decl)
11679 && warn_conversion
11680 /* Warn only declaring the function; there is no need to
11681 warn again about out-of-class definitions. */
11682 && class_type == current_class_type)
11684 tree t = TREE_TYPE (name);
11685 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11687 if (ref)
11688 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11690 if (VOID_TYPE_P (t))
11691 warning (OPT_Wconversion,
11693 ? G_("conversion to a reference to void "
11694 "will never use a type conversion operator")
11695 : G_("conversion to void "
11696 "will never use a type conversion operator"));
11697 else if (class_type)
11699 if (t == class_type)
11700 warning (OPT_Wconversion,
11702 ? G_("conversion to a reference to the same type "
11703 "will never use a type conversion operator")
11704 : G_("conversion to the same type "
11705 "will never use a type conversion operator"));
11706 /* Don't force t to be complete here. */
11707 else if (MAYBE_CLASS_TYPE_P (t)
11708 && COMPLETE_TYPE_P (t)
11709 && DERIVED_FROM_P (t, class_type))
11710 warning (OPT_Wconversion,
11712 ? G_("conversion to a reference to a base class "
11713 "will never use a type conversion operator")
11714 : G_("conversion to a base class "
11715 "will never use a type conversion operator"));
11720 if (operator_code == COND_EXPR)
11722 /* 13.4.0.3 */
11723 error ("ISO C++ prohibits overloading operator ?:");
11724 return false;
11726 else if (ellipsis_p)
11728 error ("%qD must not have variable number of arguments", decl);
11729 return false;
11731 else if (ambi_op_p (operator_code))
11733 if (arity == 1)
11734 /* We pick the one-argument operator codes by default, so
11735 we don't have to change anything. */
11737 else if (arity == 2)
11739 /* If we thought this was a unary operator, we now know
11740 it to be a binary operator. */
11741 switch (operator_code)
11743 case INDIRECT_REF:
11744 operator_code = MULT_EXPR;
11745 break;
11747 case ADDR_EXPR:
11748 operator_code = BIT_AND_EXPR;
11749 break;
11751 case UNARY_PLUS_EXPR:
11752 operator_code = PLUS_EXPR;
11753 break;
11755 case NEGATE_EXPR:
11756 operator_code = MINUS_EXPR;
11757 break;
11759 case PREINCREMENT_EXPR:
11760 operator_code = POSTINCREMENT_EXPR;
11761 break;
11763 case PREDECREMENT_EXPR:
11764 operator_code = POSTDECREMENT_EXPR;
11765 break;
11767 default:
11768 gcc_unreachable ();
11771 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11773 if ((operator_code == POSTINCREMENT_EXPR
11774 || operator_code == POSTDECREMENT_EXPR)
11775 && ! processing_template_decl
11776 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11778 if (methodp)
11779 error ("postfix %qD must take %<int%> as its argument",
11780 decl);
11781 else
11782 error ("postfix %qD must take %<int%> as its second "
11783 "argument", decl);
11784 return false;
11787 else
11789 if (methodp)
11790 error ("%qD must take either zero or one argument", decl);
11791 else
11792 error ("%qD must take either one or two arguments", decl);
11793 return false;
11796 /* More Effective C++ rule 6. */
11797 if (warn_ecpp
11798 && (operator_code == POSTINCREMENT_EXPR
11799 || operator_code == POSTDECREMENT_EXPR
11800 || operator_code == PREINCREMENT_EXPR
11801 || operator_code == PREDECREMENT_EXPR))
11803 tree arg = TREE_VALUE (argtypes);
11804 tree ret = TREE_TYPE (TREE_TYPE (decl));
11805 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11806 arg = TREE_TYPE (arg);
11807 arg = TYPE_MAIN_VARIANT (arg);
11808 if (operator_code == PREINCREMENT_EXPR
11809 || operator_code == PREDECREMENT_EXPR)
11811 if (TREE_CODE (ret) != REFERENCE_TYPE
11812 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11813 arg))
11814 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11815 build_reference_type (arg));
11817 else
11819 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11820 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11824 else if (unary_op_p (operator_code))
11826 if (arity != 1)
11828 if (methodp)
11829 error ("%qD must take %<void%>", decl);
11830 else
11831 error ("%qD must take exactly one argument", decl);
11832 return false;
11835 else /* if (binary_op_p (operator_code)) */
11837 if (arity != 2)
11839 if (methodp)
11840 error ("%qD must take exactly one argument", decl);
11841 else
11842 error ("%qD must take exactly two arguments", decl);
11843 return false;
11846 /* More Effective C++ rule 7. */
11847 if (warn_ecpp
11848 && (operator_code == TRUTH_ANDIF_EXPR
11849 || operator_code == TRUTH_ORIF_EXPR
11850 || operator_code == COMPOUND_EXPR))
11851 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11852 decl);
11855 /* Effective C++ rule 23. */
11856 if (warn_ecpp
11857 && arity == 2
11858 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11859 && (operator_code == PLUS_EXPR
11860 || operator_code == MINUS_EXPR
11861 || operator_code == TRUNC_DIV_EXPR
11862 || operator_code == MULT_EXPR
11863 || operator_code == TRUNC_MOD_EXPR)
11864 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11865 warning (OPT_Weffc__, "%qD should return by value", decl);
11867 /* [over.oper]/8 */
11868 for (; argtypes && argtypes != void_list_node;
11869 argtypes = TREE_CHAIN (argtypes))
11870 if (TREE_PURPOSE (argtypes))
11872 TREE_PURPOSE (argtypes) = NULL_TREE;
11873 if (operator_code == POSTINCREMENT_EXPR
11874 || operator_code == POSTDECREMENT_EXPR)
11876 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments",
11877 decl);
11879 else
11881 error ("%qD cannot have default arguments", decl);
11882 return false;
11886 return true;
11889 /* Return a string giving the keyword associate with CODE. */
11891 static const char *
11892 tag_name (enum tag_types code)
11894 switch (code)
11896 case record_type:
11897 return "struct";
11898 case class_type:
11899 return "class";
11900 case union_type:
11901 return "union";
11902 case enum_type:
11903 return "enum";
11904 case typename_type:
11905 return "typename";
11906 default:
11907 gcc_unreachable ();
11911 /* Name lookup in an elaborated-type-specifier (after the keyword
11912 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
11913 elaborated-type-specifier is invalid, issue a diagnostic and return
11914 error_mark_node; otherwise, return the *_TYPE to which it referred.
11915 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
11917 tree
11918 check_elaborated_type_specifier (enum tag_types tag_code,
11919 tree decl,
11920 bool allow_template_p)
11922 tree type;
11924 /* In the case of:
11926 struct S { struct S *p; };
11928 name lookup will find the TYPE_DECL for the implicit "S::S"
11929 typedef. Adjust for that here. */
11930 if (DECL_SELF_REFERENCE_P (decl))
11931 decl = TYPE_NAME (TREE_TYPE (decl));
11933 type = TREE_TYPE (decl);
11935 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11936 is false for this case as well. */
11937 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11939 error ("using template type parameter %qT after %qs",
11940 type, tag_name (tag_code));
11941 return error_mark_node;
11943 /* Accept template template parameters. */
11944 else if (allow_template_p
11945 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
11946 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
11948 /* [dcl.type.elab]
11950 If the identifier resolves to a typedef-name or the
11951 simple-template-id resolves to an alias template
11952 specialization, the elaborated-type-specifier is ill-formed.
11954 In other words, the only legitimate declaration to use in the
11955 elaborated type specifier is the implicit typedef created when
11956 the type is declared. */
11957 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11958 && !DECL_SELF_REFERENCE_P (decl)
11959 && tag_code != typename_type)
11961 if (alias_template_specialization_p (type))
11962 error ("using alias template specialization %qT after %qs",
11963 type, tag_name (tag_code));
11964 else
11965 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11966 inform (DECL_SOURCE_LOCATION (decl),
11967 "%qD has a previous declaration here", decl);
11968 return error_mark_node;
11970 else if (TREE_CODE (type) != RECORD_TYPE
11971 && TREE_CODE (type) != UNION_TYPE
11972 && tag_code != enum_type
11973 && tag_code != typename_type)
11975 error ("%qT referred to as %qs", type, tag_name (tag_code));
11976 inform (input_location, "%q+T has a previous declaration here", type);
11977 return error_mark_node;
11979 else if (TREE_CODE (type) != ENUMERAL_TYPE
11980 && tag_code == enum_type)
11982 error ("%qT referred to as enum", type);
11983 inform (input_location, "%q+T has a previous declaration here", type);
11984 return error_mark_node;
11986 else if (!allow_template_p
11987 && TREE_CODE (type) == RECORD_TYPE
11988 && CLASSTYPE_IS_TEMPLATE (type))
11990 /* If a class template appears as elaborated type specifier
11991 without a template header such as:
11993 template <class T> class C {};
11994 void f(class C); // No template header here
11996 then the required template argument is missing. */
11997 error ("template argument required for %<%s %T%>",
11998 tag_name (tag_code),
11999 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
12000 return error_mark_node;
12003 return type;
12006 /* Lookup NAME in elaborate type specifier in scope according to
12007 SCOPE and issue diagnostics if necessary.
12008 Return *_TYPE node upon success, NULL_TREE when the NAME is not
12009 found, and ERROR_MARK_NODE for type error. */
12011 static tree
12012 lookup_and_check_tag (enum tag_types tag_code, tree name,
12013 tag_scope scope, bool template_header_p)
12015 tree t;
12016 tree decl;
12017 if (scope == ts_global)
12019 /* First try ordinary name lookup, ignoring hidden class name
12020 injected via friend declaration. */
12021 decl = lookup_name_prefer_type (name, 2);
12022 /* If that fails, the name will be placed in the smallest
12023 non-class, non-function-prototype scope according to 3.3.1/5.
12024 We may already have a hidden name declared as friend in this
12025 scope. So lookup again but not ignoring hidden names.
12026 If we find one, that name will be made visible rather than
12027 creating a new tag. */
12028 if (!decl)
12029 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
12031 else
12032 decl = lookup_type_scope (name, scope);
12034 if (decl
12035 && (DECL_CLASS_TEMPLATE_P (decl)
12036 /* If scope is ts_current we're defining a class, so ignore a
12037 template template parameter. */
12038 || (scope != ts_current
12039 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
12040 decl = DECL_TEMPLATE_RESULT (decl);
12042 if (decl && TREE_CODE (decl) == TYPE_DECL)
12044 /* Look for invalid nested type:
12045 class C {
12046 class C {};
12047 }; */
12048 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
12050 error ("%qD has the same name as the class in which it is "
12051 "declared",
12052 decl);
12053 return error_mark_node;
12056 /* Two cases we need to consider when deciding if a class
12057 template is allowed as an elaborated type specifier:
12058 1. It is a self reference to its own class.
12059 2. It comes with a template header.
12061 For example:
12063 template <class T> class C {
12064 class C *c1; // DECL_SELF_REFERENCE_P is true
12065 class D;
12067 template <class U> class C; // template_header_p is true
12068 template <class T> class C<T>::D {
12069 class C *c2; // DECL_SELF_REFERENCE_P is true
12070 }; */
12072 t = check_elaborated_type_specifier (tag_code,
12073 decl,
12074 template_header_p
12075 | DECL_SELF_REFERENCE_P (decl));
12076 return t;
12078 else if (decl && TREE_CODE (decl) == TREE_LIST)
12080 error ("reference to %qD is ambiguous", name);
12081 print_candidates (decl);
12082 return error_mark_node;
12084 else
12085 return NULL_TREE;
12088 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
12089 Define the tag as a forward-reference if it is not defined.
12091 If a declaration is given, process it here, and report an error if
12092 multiple declarations are not identical.
12094 SCOPE is TS_CURRENT when this is also a definition. Only look in
12095 the current frame for the name (since C++ allows new names in any
12096 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
12097 declaration. Only look beginning from the current scope outward up
12098 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
12100 TEMPLATE_HEADER_P is true when this declaration is preceded by
12101 a set of template parameters. */
12103 static tree
12104 xref_tag_1 (enum tag_types tag_code, tree name,
12105 tag_scope orig_scope, bool template_header_p)
12107 enum tree_code code;
12108 tree t;
12109 tree context = NULL_TREE;
12110 tag_scope scope;
12112 gcc_assert (identifier_p (name));
12114 switch (tag_code)
12116 case record_type:
12117 case class_type:
12118 code = RECORD_TYPE;
12119 break;
12120 case union_type:
12121 code = UNION_TYPE;
12122 break;
12123 case enum_type:
12124 code = ENUMERAL_TYPE;
12125 break;
12126 default:
12127 gcc_unreachable ();
12130 if (orig_scope == ts_lambda)
12131 scope = ts_current;
12132 else
12133 scope = orig_scope;
12135 /* In case of anonymous name, xref_tag is only called to
12136 make type node and push name. Name lookup is not required. */
12137 if (ANON_AGGRNAME_P (name))
12138 t = NULL_TREE;
12139 else
12140 t = lookup_and_check_tag (tag_code, name,
12141 scope, template_header_p);
12143 if (t == error_mark_node)
12144 return error_mark_node;
12146 if (scope != ts_current && t && current_class_type
12147 && template_class_depth (current_class_type)
12148 && template_header_p)
12150 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
12151 return t;
12153 /* Since SCOPE is not TS_CURRENT, we are not looking at a
12154 definition of this tag. Since, in addition, we are currently
12155 processing a (member) template declaration of a template
12156 class, we must be very careful; consider:
12158 template <class X>
12159 struct S1
12161 template <class U>
12162 struct S2
12163 { template <class V>
12164 friend struct S1; };
12166 Here, the S2::S1 declaration should not be confused with the
12167 outer declaration. In particular, the inner version should
12168 have a template parameter of level 2, not level 1. This
12169 would be particularly important if the member declaration
12170 were instead:
12172 template <class V = U> friend struct S1;
12174 say, when we should tsubst into `U' when instantiating
12175 S2. On the other hand, when presented with:
12177 template <class T>
12178 struct S1 {
12179 template <class U>
12180 struct S2 {};
12181 template <class U>
12182 friend struct S2;
12185 we must find the inner binding eventually. We
12186 accomplish this by making sure that the new type we
12187 create to represent this declaration has the right
12188 TYPE_CONTEXT. */
12189 context = TYPE_CONTEXT (t);
12190 t = NULL_TREE;
12193 if (! t)
12195 /* If no such tag is yet defined, create a forward-reference node
12196 and record it as the "definition".
12197 When a real declaration of this type is found,
12198 the forward-reference will be altered into a real type. */
12199 if (code == ENUMERAL_TYPE)
12201 error ("use of enum %q#D without previous declaration", name);
12202 return error_mark_node;
12204 else
12206 t = make_class_type (code);
12207 TYPE_CONTEXT (t) = context;
12208 if (orig_scope == ts_lambda)
12209 /* Remember that we're declaring a lambda to avoid bogus errors
12210 in push_template_decl. */
12211 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
12212 t = pushtag (name, t, scope);
12215 else
12217 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
12219 if (!redeclare_class_template (t, current_template_parms))
12220 return error_mark_node;
12222 else if (!processing_template_decl
12223 && CLASS_TYPE_P (t)
12224 && CLASSTYPE_IS_TEMPLATE (t))
12226 error ("redeclaration of %qT as a non-template", t);
12227 error ("previous declaration %q+D", t);
12228 return error_mark_node;
12231 /* Make injected friend class visible. */
12232 if (scope != ts_within_enclosing_non_class
12233 && hidden_name_p (TYPE_NAME (t)))
12235 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12236 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12238 if (TYPE_TEMPLATE_INFO (t))
12240 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12241 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12246 return t;
12249 /* Wrapper for xref_tag_1. */
12251 tree
12252 xref_tag (enum tag_types tag_code, tree name,
12253 tag_scope scope, bool template_header_p)
12255 tree ret;
12256 bool subtime;
12257 subtime = timevar_cond_start (TV_NAME_LOOKUP);
12258 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12259 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12260 return ret;
12264 tree
12265 xref_tag_from_type (tree old, tree id, tag_scope scope)
12267 enum tag_types tag_kind;
12269 if (TREE_CODE (old) == RECORD_TYPE)
12270 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12271 else
12272 tag_kind = union_type;
12274 if (id == NULL_TREE)
12275 id = TYPE_IDENTIFIER (old);
12277 return xref_tag (tag_kind, id, scope, false);
12280 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12281 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
12282 access_* node, and the TREE_VALUE is the type of the base-class.
12283 Non-NULL TREE_TYPE indicates virtual inheritance.
12285 Returns true if the binfo hierarchy was successfully created,
12286 false if an error was detected. */
12288 bool
12289 xref_basetypes (tree ref, tree base_list)
12291 tree *basep;
12292 tree binfo, base_binfo;
12293 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
12294 unsigned max_bases = 0; /* Maximum direct bases. */
12295 int i;
12296 tree default_access;
12297 tree igo_prev; /* Track Inheritance Graph Order. */
12299 if (ref == error_mark_node)
12300 return false;
12302 /* The base of a derived class is private by default, all others are
12303 public. */
12304 default_access = (TREE_CODE (ref) == RECORD_TYPE
12305 && CLASSTYPE_DECLARED_CLASS (ref)
12306 ? access_private_node : access_public_node);
12308 /* First, make sure that any templates in base-classes are
12309 instantiated. This ensures that if we call ourselves recursively
12310 we do not get confused about which classes are marked and which
12311 are not. */
12312 basep = &base_list;
12313 while (*basep)
12315 tree basetype = TREE_VALUE (*basep);
12317 /* The dependent_type_p call below should really be dependent_scope_p
12318 so that we give a hard error about using an incomplete type as a
12319 base, but we allow it with a pedwarn for backward
12320 compatibility. */
12321 if (processing_template_decl
12322 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12323 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12324 if (!dependent_type_p (basetype)
12325 && !complete_type_or_else (basetype, NULL))
12326 /* An incomplete type. Remove it from the list. */
12327 *basep = TREE_CHAIN (*basep);
12328 else
12330 max_bases++;
12331 if (TREE_TYPE (*basep))
12332 max_vbases++;
12333 if (CLASS_TYPE_P (basetype))
12334 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
12335 basep = &TREE_CHAIN (*basep);
12339 TYPE_MARKED_P (ref) = 1;
12341 /* The binfo slot should be empty, unless this is an (ill-formed)
12342 redefinition. */
12343 if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12345 error ("redefinition of %q#T", ref);
12346 return false;
12349 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12351 binfo = make_tree_binfo (max_bases);
12353 TYPE_BINFO (ref) = binfo;
12354 BINFO_OFFSET (binfo) = size_zero_node;
12355 BINFO_TYPE (binfo) = ref;
12357 /* Apply base-class info set up to the variants of this type. */
12358 fixup_type_variants (ref);
12360 if (max_bases)
12362 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
12363 /* An aggregate cannot have baseclasses. */
12364 CLASSTYPE_NON_AGGREGATE (ref) = 1;
12366 if (TREE_CODE (ref) == UNION_TYPE)
12368 error ("derived union %qT invalid", ref);
12369 return false;
12373 if (max_bases > 1)
12375 if (TYPE_FOR_JAVA (ref))
12377 error ("Java class %qT cannot have multiple bases", ref);
12378 return false;
12382 if (max_vbases)
12384 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
12386 if (TYPE_FOR_JAVA (ref))
12388 error ("Java class %qT cannot have virtual bases", ref);
12389 return false;
12393 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
12395 tree access = TREE_PURPOSE (base_list);
12396 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
12397 tree basetype = TREE_VALUE (base_list);
12399 if (access == access_default_node)
12400 access = default_access;
12402 if (PACK_EXPANSION_P (basetype))
12403 basetype = PACK_EXPANSION_PATTERN (basetype);
12404 if (TREE_CODE (basetype) == TYPE_DECL)
12405 basetype = TREE_TYPE (basetype);
12406 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
12408 error ("base type %qT fails to be a struct or class type",
12409 basetype);
12410 return false;
12413 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
12414 TYPE_FOR_JAVA (ref) = 1;
12416 base_binfo = NULL_TREE;
12417 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
12419 base_binfo = TYPE_BINFO (basetype);
12420 /* The original basetype could have been a typedef'd type. */
12421 basetype = BINFO_TYPE (base_binfo);
12423 /* Inherit flags from the base. */
12424 TYPE_HAS_NEW_OPERATOR (ref)
12425 |= TYPE_HAS_NEW_OPERATOR (basetype);
12426 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12427 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12428 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12429 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
12430 CLASSTYPE_DIAMOND_SHAPED_P (ref)
12431 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
12432 CLASSTYPE_REPEATED_BASE_P (ref)
12433 |= CLASSTYPE_REPEATED_BASE_P (basetype);
12436 /* We must do this test after we've seen through a typedef
12437 type. */
12438 if (TYPE_MARKED_P (basetype))
12440 if (basetype == ref)
12441 error ("recursive type %qT undefined", basetype);
12442 else
12443 error ("duplicate base type %qT invalid", basetype);
12444 return false;
12447 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
12448 /* Regenerate the pack expansion for the bases. */
12449 basetype = make_pack_expansion (basetype);
12451 TYPE_MARKED_P (basetype) = 1;
12453 base_binfo = copy_binfo (base_binfo, basetype, ref,
12454 &igo_prev, via_virtual);
12455 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
12456 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
12458 BINFO_BASE_APPEND (binfo, base_binfo);
12459 BINFO_BASE_ACCESS_APPEND (binfo, access);
12462 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
12463 /* If we didn't get max_vbases vbases, we must have shared at
12464 least one of them, and are therefore diamond shaped. */
12465 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
12467 /* Unmark all the types. */
12468 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12469 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12470 TYPE_MARKED_P (ref) = 0;
12472 /* Now see if we have a repeated base type. */
12473 if (!CLASSTYPE_REPEATED_BASE_P (ref))
12475 for (base_binfo = binfo; base_binfo;
12476 base_binfo = TREE_CHAIN (base_binfo))
12478 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12480 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
12481 break;
12483 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
12485 for (base_binfo = binfo; base_binfo;
12486 base_binfo = TREE_CHAIN (base_binfo))
12487 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12488 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12489 else
12490 break;
12493 return true;
12497 /* Copies the enum-related properties from type SRC to type DST.
12498 Used with the underlying type of an enum and the enum itself. */
12499 static void
12500 copy_type_enum (tree dst, tree src)
12502 tree t;
12503 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12505 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12506 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12507 TYPE_SIZE (t) = TYPE_SIZE (src);
12508 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12509 SET_TYPE_MODE (dst, TYPE_MODE (src));
12510 TYPE_PRECISION (t) = TYPE_PRECISION (src);
12511 TYPE_ALIGN (t) = TYPE_ALIGN (src);
12512 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12513 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12517 /* Begin compiling the definition of an enumeration type.
12518 NAME is its name,
12520 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12522 UNDERLYING_TYPE is the type that will be used as the storage for
12523 the enumeration type. This should be NULL_TREE if no storage type
12524 was specified.
12526 SCOPED_ENUM_P is true if this is a scoped enumeration type.
12528 if IS_NEW is not NULL, gets TRUE iff a new type is created.
12530 Returns the type object, as yet incomplete.
12531 Also records info about it so that build_enumerator
12532 may be used to declare the individual values as they are read. */
12534 tree
12535 start_enum (tree name, tree enumtype, tree underlying_type,
12536 bool scoped_enum_p, bool *is_new)
12538 tree prevtype = NULL_TREE;
12539 gcc_assert (identifier_p (name));
12541 if (is_new)
12542 *is_new = false;
12543 /* [C++0x dcl.enum]p5:
12545 If not explicitly specified, the underlying type of a scoped
12546 enumeration type is int. */
12547 if (!underlying_type && scoped_enum_p)
12548 underlying_type = integer_type_node;
12550 if (underlying_type)
12551 underlying_type = cv_unqualified (underlying_type);
12553 /* If this is the real definition for a previous forward reference,
12554 fill in the contents in the same object that used to be the
12555 forward reference. */
12556 if (!enumtype)
12557 enumtype = lookup_and_check_tag (enum_type, name,
12558 /*tag_scope=*/ts_current,
12559 /*template_header_p=*/false);
12561 /* In case of a template_decl, the only check that should be deferred
12562 to instantiation time is the comparison of underlying types. */
12563 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12565 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12567 error_at (input_location, "scoped/unscoped mismatch "
12568 "in enum %q#T", enumtype);
12569 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12570 "previous definition here");
12571 enumtype = error_mark_node;
12573 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12575 error_at (input_location, "underlying type mismatch "
12576 "in enum %q#T", enumtype);
12577 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12578 "previous definition here");
12579 enumtype = error_mark_node;
12581 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12582 && !dependent_type_p (underlying_type)
12583 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12584 && !same_type_p (underlying_type,
12585 ENUM_UNDERLYING_TYPE (enumtype)))
12587 error_at (input_location, "different underlying type "
12588 "in enum %q#T", enumtype);
12589 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12590 "previous definition here");
12591 underlying_type = NULL_TREE;
12595 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12596 || processing_template_decl)
12598 /* In case of error, make a dummy enum to allow parsing to
12599 continue. */
12600 if (enumtype == error_mark_node)
12602 name = make_anon_name ();
12603 enumtype = NULL_TREE;
12606 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12607 of an opaque enum, or an opaque enum of an already defined
12608 enumeration (C++0x only).
12609 In any other case, it'll be NULL_TREE. */
12610 if (!enumtype)
12612 if (is_new)
12613 *is_new = true;
12615 prevtype = enumtype;
12617 /* Do not push the decl more than once, unless we need to
12618 compare underlying types at instantiation time */
12619 if (!enumtype
12620 || TREE_CODE (enumtype) != ENUMERAL_TYPE
12621 || (underlying_type
12622 && dependent_type_p (underlying_type))
12623 || (ENUM_UNDERLYING_TYPE (enumtype)
12624 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12626 enumtype = cxx_make_type (ENUMERAL_TYPE);
12627 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12629 else
12630 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12631 false);
12633 if (enumtype == error_mark_node)
12634 return error_mark_node;
12636 /* The enum is considered opaque until the opening '{' of the
12637 enumerator list. */
12638 SET_OPAQUE_ENUM_P (enumtype, true);
12639 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12642 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12644 if (underlying_type)
12646 if (CP_INTEGRAL_TYPE_P (underlying_type))
12648 copy_type_enum (enumtype, underlying_type);
12649 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12651 else if (dependent_type_p (underlying_type))
12652 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12653 else
12654 error ("underlying type %<%T%> of %<%T%> must be an integral type",
12655 underlying_type, enumtype);
12658 /* If into a template class, the returned enum is always the first
12659 declaration (opaque or not) seen. This way all the references to
12660 this type will be to the same declaration. The following ones are used
12661 only to check for definition errors. */
12662 if (prevtype && processing_template_decl)
12663 return prevtype;
12664 else
12665 return enumtype;
12668 /* After processing and defining all the values of an enumeration type,
12669 install their decls in the enumeration type.
12670 ENUMTYPE is the type object. */
12672 void
12673 finish_enum_value_list (tree enumtype)
12675 tree values;
12676 tree underlying_type;
12677 tree decl;
12678 tree value;
12679 tree minnode, maxnode;
12680 tree t;
12682 bool fixed_underlying_type_p
12683 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12685 /* We built up the VALUES in reverse order. */
12686 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12688 /* For an enum defined in a template, just set the type of the values;
12689 all further processing is postponed until the template is
12690 instantiated. We need to set the type so that tsubst of a CONST_DECL
12691 works. */
12692 if (processing_template_decl)
12694 for (values = TYPE_VALUES (enumtype);
12695 values;
12696 values = TREE_CHAIN (values))
12697 TREE_TYPE (TREE_VALUE (values)) = enumtype;
12698 return;
12701 /* Determine the minimum and maximum values of the enumerators. */
12702 if (TYPE_VALUES (enumtype))
12704 minnode = maxnode = NULL_TREE;
12706 for (values = TYPE_VALUES (enumtype);
12707 values;
12708 values = TREE_CHAIN (values))
12710 decl = TREE_VALUE (values);
12712 /* [dcl.enum]: Following the closing brace of an enum-specifier,
12713 each enumerator has the type of its enumeration. Prior to the
12714 closing brace, the type of each enumerator is the type of its
12715 initializing value. */
12716 TREE_TYPE (decl) = enumtype;
12718 /* Update the minimum and maximum values, if appropriate. */
12719 value = DECL_INITIAL (decl);
12720 if (value == error_mark_node)
12721 value = integer_zero_node;
12722 /* Figure out what the minimum and maximum values of the
12723 enumerators are. */
12724 if (!minnode)
12725 minnode = maxnode = value;
12726 else if (tree_int_cst_lt (maxnode, value))
12727 maxnode = value;
12728 else if (tree_int_cst_lt (value, minnode))
12729 minnode = value;
12732 else
12733 /* [dcl.enum]
12735 If the enumerator-list is empty, the underlying type is as if
12736 the enumeration had a single enumerator with value 0. */
12737 minnode = maxnode = integer_zero_node;
12739 if (!fixed_underlying_type_p)
12741 /* Compute the number of bits require to represent all values of the
12742 enumeration. We must do this before the type of MINNODE and
12743 MAXNODE are transformed, since tree_int_cst_min_precision relies
12744 on the TREE_TYPE of the value it is passed. */
12745 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
12746 int lowprec = tree_int_cst_min_precision (minnode, sgn);
12747 int highprec = tree_int_cst_min_precision (maxnode, sgn);
12748 int precision = MAX (lowprec, highprec);
12749 unsigned int itk;
12750 bool use_short_enum;
12752 /* Determine the underlying type of the enumeration.
12754 [dcl.enum]
12756 The underlying type of an enumeration is an integral type that
12757 can represent all the enumerator values defined in the
12758 enumeration. It is implementation-defined which integral type is
12759 used as the underlying type for an enumeration except that the
12760 underlying type shall not be larger than int unless the value of
12761 an enumerator cannot fit in an int or unsigned int.
12763 We use "int" or an "unsigned int" as the underlying type, even if
12764 a smaller integral type would work, unless the user has
12765 explicitly requested that we use the smallest possible type. The
12766 user can request that for all enumerations with a command line
12767 flag, or for just one enumeration with an attribute. */
12769 use_short_enum = flag_short_enums
12770 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12772 for (itk = (use_short_enum ? itk_char : itk_int);
12773 itk != itk_none;
12774 itk++)
12776 underlying_type = integer_types[itk];
12777 if (underlying_type != NULL_TREE
12778 && TYPE_PRECISION (underlying_type) >= precision
12779 && TYPE_SIGN (underlying_type) == sgn)
12780 break;
12782 if (itk == itk_none)
12784 /* DR 377
12786 IF no integral type can represent all the enumerator values, the
12787 enumeration is ill-formed. */
12788 error ("no integral type can represent all of the enumerator values "
12789 "for %qT", enumtype);
12790 precision = TYPE_PRECISION (long_long_integer_type_node);
12791 underlying_type = integer_types[itk_unsigned_long_long];
12794 /* [dcl.enum]
12796 The value of sizeof() applied to an enumeration type, an object
12797 of an enumeration type, or an enumerator, is the value of sizeof()
12798 applied to the underlying type. */
12799 copy_type_enum (enumtype, underlying_type);
12801 /* Compute the minimum and maximum values for the type.
12803 [dcl.enum]
12805 For an enumeration where emin is the smallest enumerator and emax
12806 is the largest, the values of the enumeration are the values of the
12807 underlying type in the range bmin to bmax, where bmin and bmax are,
12808 respectively, the smallest and largest values of the smallest bit-
12809 field that can store emin and emax. */
12811 /* The middle-end currently assumes that types with TYPE_PRECISION
12812 narrower than their underlying type are suitably zero or sign
12813 extended to fill their mode. Similarly, it assumes that the front
12814 end assures that a value of a particular type must be within
12815 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12817 We used to set these fields based on bmin and bmax, but that led
12818 to invalid assumptions like optimizing away bounds checking. So
12819 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12820 TYPE_MAX_VALUE to the values for the mode above and only restrict
12821 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
12822 ENUM_UNDERLYING_TYPE (enumtype)
12823 = build_distinct_type_copy (underlying_type);
12824 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12825 set_min_and_max_values_for_integral_type
12826 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
12828 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
12829 if (flag_strict_enums)
12830 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
12832 else
12833 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12835 /* Convert each of the enumerators to the type of the underlying
12836 type of the enumeration. */
12837 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12839 location_t saved_location;
12841 decl = TREE_VALUE (values);
12842 saved_location = input_location;
12843 input_location = DECL_SOURCE_LOCATION (decl);
12844 if (fixed_underlying_type_p)
12845 /* If the enumeration type has a fixed underlying type, we
12846 already checked all of the enumerator values. */
12847 value = DECL_INITIAL (decl);
12848 else
12849 value = perform_implicit_conversion (underlying_type,
12850 DECL_INITIAL (decl),
12851 tf_warning_or_error);
12852 input_location = saved_location;
12854 /* Do not clobber shared ints. */
12855 value = copy_node (value);
12857 TREE_TYPE (value) = enumtype;
12858 DECL_INITIAL (decl) = value;
12861 /* Fix up all variant types of this enum type. */
12862 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12863 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12865 if (at_class_scope_p ()
12866 && COMPLETE_TYPE_P (current_class_type)
12867 && UNSCOPED_ENUM_P (enumtype))
12868 insert_late_enum_def_into_classtype_sorted_fields (enumtype,
12869 current_class_type);
12871 /* Finish debugging output for this type. */
12872 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12875 /* Finishes the enum type. This is called only the first time an
12876 enumeration is seen, be it opaque or odinary.
12877 ENUMTYPE is the type object. */
12879 void
12880 finish_enum (tree enumtype)
12882 if (processing_template_decl)
12884 if (at_function_scope_p ())
12885 add_stmt (build_min (TAG_DEFN, enumtype));
12886 return;
12889 /* If this is a forward declaration, there should not be any variants,
12890 though we can get a variant in the middle of an enum-specifier with
12891 wacky code like 'enum E { e = sizeof(const E*) };' */
12892 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12893 && (TYPE_VALUES (enumtype)
12894 || !TYPE_NEXT_VARIANT (enumtype)));
12897 /* Build and install a CONST_DECL for an enumeration constant of the
12898 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12899 LOC is the location of NAME.
12900 Assignment of sequential values by default is handled here. */
12902 void
12903 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12905 tree decl;
12906 tree context;
12907 tree type;
12909 /* If the VALUE was erroneous, pretend it wasn't there; that will
12910 result in the enum being assigned the next value in sequence. */
12911 if (value == error_mark_node)
12912 value = NULL_TREE;
12914 /* Remove no-op casts from the value. */
12915 if (value)
12916 STRIP_TYPE_NOPS (value);
12918 if (! processing_template_decl)
12920 /* Validate and default VALUE. */
12921 if (value != NULL_TREE)
12923 value = cxx_constant_value (value);
12925 if (TREE_CODE (value) != INTEGER_CST
12926 || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12928 error ("enumerator value for %qD is not an integer constant",
12929 name);
12930 value = NULL_TREE;
12934 /* Default based on previous value. */
12935 if (value == NULL_TREE)
12937 if (TYPE_VALUES (enumtype))
12939 tree prev_value;
12940 bool overflowed;
12942 /* C++03 7.2/4: If no initializer is specified for the first
12943 enumerator, the type is an unspecified integral
12944 type. Otherwise the type is the same as the type of the
12945 initializing value of the preceding enumerator unless the
12946 incremented value is not representable in that type, in
12947 which case the type is an unspecified integral type
12948 sufficient to contain the incremented value. */
12949 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12950 if (error_operand_p (prev_value))
12951 value = error_mark_node;
12952 else
12954 tree type = TREE_TYPE (prev_value);
12955 signop sgn = TYPE_SIGN (type);
12956 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
12957 &overflowed);
12958 if (!overflowed)
12960 bool pos = !wi::neg_p (wi, sgn);
12961 if (!wi::fits_to_tree_p (wi, type))
12963 unsigned int itk;
12964 for (itk = itk_int; itk != itk_none; itk++)
12966 type = integer_types[itk];
12967 if (type != NULL_TREE
12968 && (pos || !TYPE_UNSIGNED (type))
12969 && wi::fits_to_tree_p (wi, type))
12970 break;
12972 if (type && cxx_dialect < cxx11
12973 && itk > itk_unsigned_long)
12974 pedwarn (input_location, OPT_Wlong_long, pos ? "\
12975 incremented enumerator value is too large for %<unsigned long%>" : "\
12976 incremented enumerator value is too large for %<long%>");
12978 if (type == NULL_TREE)
12979 overflowed = true;
12980 else
12981 value = wide_int_to_tree (type, wi);
12984 if (overflowed)
12986 error ("overflow in enumeration values at %qD", name);
12987 value = error_mark_node;
12991 else
12992 value = integer_zero_node;
12995 /* Remove no-op casts from the value. */
12996 STRIP_TYPE_NOPS (value);
12998 /* If the underlying type of the enum is fixed, check whether
12999 the enumerator values fits in the underlying type. If it
13000 does not fit, the program is ill-formed [C++0x dcl.enum]. */
13001 if (ENUM_UNDERLYING_TYPE (enumtype)
13002 && value
13003 && TREE_CODE (value) == INTEGER_CST)
13005 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
13006 error ("enumerator value %E is outside the range of underlying "
13007 "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
13009 /* Convert the value to the appropriate type. */
13010 value = convert (ENUM_UNDERLYING_TYPE (enumtype), value);
13014 /* C++ associates enums with global, function, or class declarations. */
13015 context = current_scope ();
13017 /* Build the actual enumeration constant. Note that the enumeration
13018 constants have the underlying type of the enum (if it is fixed)
13019 or the type of their initializer (if the underlying type of the
13020 enum is not fixed):
13022 [ C++0x dcl.enum ]
13024 If the underlying type is fixed, the type of each enumerator
13025 prior to the closing brace is the underlying type; if the
13026 initializing value of an enumerator cannot be represented by
13027 the underlying type, the program is ill-formed. If the
13028 underlying type is not fixed, the type of each enumerator is
13029 the type of its initializing value.
13031 If the underlying type is not fixed, it will be computed by
13032 finish_enum and we will reset the type of this enumerator. Of
13033 course, if we're processing a template, there may be no value. */
13034 type = value ? TREE_TYPE (value) : NULL_TREE;
13036 decl = build_decl (loc, CONST_DECL, name, type);
13038 DECL_CONTEXT (decl) = enumtype;
13039 TREE_CONSTANT (decl) = 1;
13040 TREE_READONLY (decl) = 1;
13041 DECL_INITIAL (decl) = value;
13043 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
13044 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13045 on the TYPE_FIELDS list for `S'. (That's so that you can say
13046 things like `S::i' later.) */
13047 finish_member_declaration (decl);
13048 else
13049 pushdecl (decl);
13051 /* Add this enumeration constant to the list for this type. */
13052 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13055 /* Look for an enumerator with the given NAME within the enumeration
13056 type ENUMTYPE. This routine is used primarily for qualified name
13057 lookup into an enumerator in C++0x, e.g.,
13059 enum class Color { Red, Green, Blue };
13061 Color color = Color::Red;
13063 Returns the value corresponding to the enumerator, or
13064 NULL_TREE if no such enumerator was found. */
13065 tree
13066 lookup_enumerator (tree enumtype, tree name)
13068 tree e;
13069 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
13071 e = purpose_member (name, TYPE_VALUES (enumtype));
13072 return e? TREE_VALUE (e) : NULL_TREE;
13076 /* We're defining DECL. Make sure that its type is OK. */
13078 static void
13079 check_function_type (tree decl, tree current_function_parms)
13081 tree fntype = TREE_TYPE (decl);
13082 tree return_type = complete_type (TREE_TYPE (fntype));
13084 /* In a function definition, arg types must be complete. */
13085 require_complete_types_for_parms (current_function_parms);
13087 if (dependent_type_p (return_type)
13088 || type_uses_auto (return_type))
13089 return;
13090 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
13091 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
13093 tree args = TYPE_ARG_TYPES (fntype);
13095 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13096 error ("return type %q#T is incomplete", return_type);
13097 else
13098 error ("return type has Java class type %q#T", return_type);
13100 /* Make it return void instead. */
13101 if (TREE_CODE (fntype) == METHOD_TYPE)
13102 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
13103 void_type_node,
13104 TREE_CHAIN (args));
13105 else
13106 fntype = build_function_type (void_type_node, args);
13107 fntype
13108 = build_exception_variant (fntype,
13109 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
13110 fntype = (cp_build_type_attribute_variant
13111 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
13112 TREE_TYPE (decl) = fntype;
13114 else
13115 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13118 /* Create the FUNCTION_DECL for a function definition.
13119 DECLSPECS and DECLARATOR are the parts of the declaration;
13120 they describe the function's name and the type it returns,
13121 but twisted together in a fashion that parallels the syntax of C.
13123 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13124 DECLARATOR is really the DECL for the function we are about to
13125 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13126 indicating that the function is an inline defined in-class.
13128 This function creates a binding context for the function body
13129 as well as setting up the FUNCTION_DECL in current_function_decl.
13131 For C++, we must first check whether that datum makes any sense.
13132 For example, "class A local_a(1,2);" means that variable local_a
13133 is an aggregate of type A, which should have a constructor
13134 applied to it with the argument list [1, 2].
13136 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
13137 or may be a BLOCK if the function has been defined previously
13138 in this translation unit. On exit, DECL_INITIAL (decl1) will be
13139 error_mark_node if the function has never been defined, or
13140 a BLOCK if the function has been defined somewhere. */
13142 bool
13143 start_preparsed_function (tree decl1, tree attrs, int flags)
13145 tree ctype = NULL_TREE;
13146 tree fntype;
13147 tree restype;
13148 int doing_friend = 0;
13149 cp_binding_level *bl;
13150 tree current_function_parms;
13151 struct c_fileinfo *finfo
13152 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
13153 bool honor_interface;
13155 /* Sanity check. */
13156 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
13157 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
13159 fntype = TREE_TYPE (decl1);
13160 if (TREE_CODE (fntype) == METHOD_TYPE)
13161 ctype = TYPE_METHOD_BASETYPE (fntype);
13163 /* ISO C++ 11.4/5. A friend function defined in a class is in
13164 the (lexical) scope of the class in which it is defined. */
13165 if (!ctype && DECL_FRIEND_P (decl1))
13167 ctype = DECL_FRIEND_CONTEXT (decl1);
13169 /* CTYPE could be null here if we're dealing with a template;
13170 for example, `inline friend float foo()' inside a template
13171 will have no CTYPE set. */
13172 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13173 ctype = NULL_TREE;
13174 else
13175 doing_friend = 1;
13178 if (DECL_DECLARED_INLINE_P (decl1)
13179 && lookup_attribute ("noinline", attrs))
13180 warning (0, "inline function %q+D given attribute noinline", decl1);
13182 /* Handle gnu_inline attribute. */
13183 if (GNU_INLINE_P (decl1))
13185 DECL_EXTERNAL (decl1) = 1;
13186 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13187 DECL_INTERFACE_KNOWN (decl1) = 1;
13188 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
13191 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13192 /* This is a constructor, we must ensure that any default args
13193 introduced by this definition are propagated to the clones
13194 now. The clones are used directly in overload resolution. */
13195 adjust_clone_args (decl1);
13197 /* Sometimes we don't notice that a function is a static member, and
13198 build a METHOD_TYPE for it. Fix that up now. */
13199 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13200 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
13202 /* Set up current_class_type, and enter the scope of the class, if
13203 appropriate. */
13204 if (ctype)
13205 push_nested_class (ctype);
13206 else if (DECL_STATIC_FUNCTION_P (decl1))
13207 push_nested_class (DECL_CONTEXT (decl1));
13209 /* Now that we have entered the scope of the class, we must restore
13210 the bindings for any template parameters surrounding DECL1, if it
13211 is an inline member template. (Order is important; consider the
13212 case where a template parameter has the same name as a field of
13213 the class.) It is not until after this point that
13214 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
13215 if (flags & SF_INCLASS_INLINE)
13216 maybe_begin_member_template_processing (decl1);
13218 /* Effective C++ rule 15. */
13219 if (warn_ecpp
13220 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13221 && VOID_TYPE_P (TREE_TYPE (fntype)))
13222 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13224 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13225 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13226 if (!DECL_INITIAL (decl1))
13227 DECL_INITIAL (decl1) = error_mark_node;
13229 /* This function exists in static storage.
13230 (This does not mean `static' in the C sense!) */
13231 TREE_STATIC (decl1) = 1;
13233 /* We must call push_template_decl after current_class_type is set
13234 up. (If we are processing inline definitions after exiting a
13235 class scope, current_class_type will be NULL_TREE until set above
13236 by push_nested_class.) */
13237 if (processing_template_decl)
13239 tree newdecl1 = push_template_decl (decl1);
13240 if (newdecl1 == error_mark_node)
13242 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
13243 pop_nested_class ();
13244 return false;
13246 decl1 = newdecl1;
13249 /* We are now in the scope of the function being defined. */
13250 current_function_decl = decl1;
13252 /* Save the parm names or decls from this function's declarator
13253 where store_parm_decls will find them. */
13254 current_function_parms = DECL_ARGUMENTS (decl1);
13256 /* Make sure the parameter and return types are reasonable. When
13257 you declare a function, these types can be incomplete, but they
13258 must be complete when you define the function. */
13259 check_function_type (decl1, current_function_parms);
13261 /* Build the return declaration for the function. */
13262 restype = TREE_TYPE (fntype);
13264 if (DECL_RESULT (decl1) == NULL_TREE)
13266 tree resdecl;
13268 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13269 DECL_ARTIFICIAL (resdecl) = 1;
13270 DECL_IGNORED_P (resdecl) = 1;
13271 DECL_RESULT (decl1) = resdecl;
13273 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13276 /* Let the user know we're compiling this function. */
13277 announce_function (decl1);
13279 /* Record the decl so that the function name is defined.
13280 If we already have a decl for this name, and it is a FUNCTION_DECL,
13281 use the old decl. */
13282 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13284 /* A specialization is not used to guide overload resolution. */
13285 if (!DECL_FUNCTION_MEMBER_P (decl1)
13286 && !(DECL_USE_TEMPLATE (decl1) &&
13287 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
13289 tree olddecl = pushdecl (decl1);
13291 if (olddecl == error_mark_node)
13292 /* If something went wrong when registering the declaration,
13293 use DECL1; we have to have a FUNCTION_DECL to use when
13294 parsing the body of the function. */
13296 else
13298 /* Otherwise, OLDDECL is either a previous declaration
13299 of the same function or DECL1 itself. */
13301 if (warn_missing_declarations
13302 && olddecl == decl1
13303 && !DECL_MAIN_P (decl1)
13304 && TREE_PUBLIC (decl1)
13305 && !DECL_DECLARED_INLINE_P (decl1))
13307 tree context;
13309 /* Check whether DECL1 is in an anonymous
13310 namespace. */
13311 for (context = DECL_CONTEXT (decl1);
13312 context;
13313 context = DECL_CONTEXT (context))
13315 if (TREE_CODE (context) == NAMESPACE_DECL
13316 && DECL_NAME (context) == NULL_TREE)
13317 break;
13320 if (context == NULL)
13321 warning (OPT_Wmissing_declarations,
13322 "no previous declaration for %q+D", decl1);
13325 decl1 = olddecl;
13328 else
13330 /* We need to set the DECL_CONTEXT. */
13331 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13332 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13334 fntype = TREE_TYPE (decl1);
13335 restype = TREE_TYPE (fntype);
13337 /* If #pragma weak applies, mark the decl appropriately now.
13338 The pragma only applies to global functions. Because
13339 determining whether or not the #pragma applies involves
13340 computing the mangled name for the declaration, we cannot
13341 apply the pragma until after we have merged this declaration
13342 with any previous declarations; if the original declaration
13343 has a linkage specification, that specification applies to
13344 the definition as well, and may affect the mangled name. */
13345 if (DECL_FILE_SCOPE_P (decl1))
13346 maybe_apply_pragma_weak (decl1);
13349 /* Reset this in case the call to pushdecl changed it. */
13350 current_function_decl = decl1;
13352 gcc_assert (DECL_INITIAL (decl1));
13354 /* This function may already have been parsed, in which case just
13355 return; our caller will skip over the body without parsing. */
13356 if (DECL_INITIAL (decl1) != error_mark_node)
13357 return true;
13359 /* Initialize RTL machinery. We cannot do this until
13360 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13361 even when processing a template; this is how we get
13362 CFUN set up, and our per-function variables initialized.
13363 FIXME factor out the non-RTL stuff. */
13364 bl = current_binding_level;
13365 allocate_struct_function (decl1, processing_template_decl);
13367 /* Initialize the language data structures. Whenever we start
13368 a new function, we destroy temporaries in the usual way. */
13369 cfun->language = ggc_cleared_alloc<language_function> ();
13370 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
13371 current_binding_level = bl;
13373 if (!processing_template_decl && type_uses_auto (restype))
13375 FNDECL_USED_AUTO (decl1) = true;
13376 current_function_auto_return_pattern = restype;
13379 /* Start the statement-tree, start the tree now. */
13380 DECL_SAVED_TREE (decl1) = push_stmt_list ();
13382 /* If we are (erroneously) defining a function that we have already
13383 defined before, wipe out what we knew before. */
13384 if (!DECL_PENDING_INLINE_P (decl1))
13385 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13387 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13389 /* We know that this was set up by `grokclassfn'. We do not
13390 wait until `store_parm_decls', since evil parse errors may
13391 never get us to that point. Here we keep the consistency
13392 between `current_class_type' and `current_class_ptr'. */
13393 tree t = DECL_ARGUMENTS (decl1);
13395 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
13396 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
13398 cp_function_chain->x_current_class_ref
13399 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
13400 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
13401 cp_function_chain->x_current_class_ptr = t;
13403 /* Constructors and destructors need to know whether they're "in
13404 charge" of initializing virtual base classes. */
13405 t = DECL_CHAIN (t);
13406 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13408 current_in_charge_parm = t;
13409 t = DECL_CHAIN (t);
13411 if (DECL_HAS_VTT_PARM_P (decl1))
13413 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
13414 current_vtt_parm = t;
13418 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
13419 /* Implicitly-defined methods (like the
13420 destructor for a class in which no destructor
13421 is explicitly declared) must not be defined
13422 until their definition is needed. So, we
13423 ignore interface specifications for
13424 compiler-generated functions. */
13425 && !DECL_ARTIFICIAL (decl1));
13427 if (processing_template_decl)
13428 /* Don't mess with interface flags. */;
13429 else if (DECL_INTERFACE_KNOWN (decl1))
13431 tree ctx = decl_function_context (decl1);
13433 if (DECL_NOT_REALLY_EXTERN (decl1))
13434 DECL_EXTERNAL (decl1) = 0;
13436 if (ctx != NULL_TREE && vague_linkage_p (ctx))
13437 /* This is a function in a local class in an extern inline
13438 or template function. */
13439 comdat_linkage (decl1);
13441 /* If this function belongs to an interface, it is public.
13442 If it belongs to someone else's interface, it is also external.
13443 This only affects inlines and template instantiations. */
13444 else if (!finfo->interface_unknown && honor_interface)
13446 if (DECL_DECLARED_INLINE_P (decl1)
13447 || DECL_TEMPLATE_INSTANTIATION (decl1))
13449 DECL_EXTERNAL (decl1)
13450 = (finfo->interface_only
13451 || (DECL_DECLARED_INLINE_P (decl1)
13452 && ! flag_implement_inlines
13453 && !DECL_VINDEX (decl1)));
13455 /* For WIN32 we also want to put these in linkonce sections. */
13456 maybe_make_one_only (decl1);
13458 else
13459 DECL_EXTERNAL (decl1) = 0;
13460 DECL_INTERFACE_KNOWN (decl1) = 1;
13461 /* If this function is in an interface implemented in this file,
13462 make sure that the back end knows to emit this function
13463 here. */
13464 if (!DECL_EXTERNAL (decl1))
13465 mark_needed (decl1);
13467 else if (finfo->interface_unknown && finfo->interface_only
13468 && honor_interface)
13470 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13471 interface, we will have both finfo->interface_unknown and
13472 finfo->interface_only set. In that case, we don't want to
13473 use the normal heuristics because someone will supply a
13474 #pragma implementation elsewhere, and deducing it here would
13475 produce a conflict. */
13476 comdat_linkage (decl1);
13477 DECL_EXTERNAL (decl1) = 0;
13478 DECL_INTERFACE_KNOWN (decl1) = 1;
13479 DECL_DEFER_OUTPUT (decl1) = 1;
13481 else
13483 /* This is a definition, not a reference.
13484 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
13485 if (!GNU_INLINE_P (decl1))
13486 DECL_EXTERNAL (decl1) = 0;
13488 if ((DECL_DECLARED_INLINE_P (decl1)
13489 || DECL_TEMPLATE_INSTANTIATION (decl1))
13490 && ! DECL_INTERFACE_KNOWN (decl1))
13491 DECL_DEFER_OUTPUT (decl1) = 1;
13492 else
13493 DECL_INTERFACE_KNOWN (decl1) = 1;
13496 /* Determine the ELF visibility attribute for the function. We must not
13497 do this before calling "pushdecl", as we must allow "duplicate_decls"
13498 to merge any attributes appropriately. We also need to wait until
13499 linkage is set. */
13500 if (!DECL_CLONED_FUNCTION_P (decl1))
13501 determine_visibility (decl1);
13503 if (!processing_template_decl)
13504 maybe_instantiate_noexcept (decl1);
13506 begin_scope (sk_function_parms, decl1);
13508 ++function_depth;
13510 if (DECL_DESTRUCTOR_P (decl1)
13511 || (DECL_CONSTRUCTOR_P (decl1)
13512 && targetm.cxx.cdtor_returns_this ()))
13514 cdtor_label = build_decl (input_location,
13515 LABEL_DECL, NULL_TREE, NULL_TREE);
13516 DECL_CONTEXT (cdtor_label) = current_function_decl;
13519 start_fname_decls ();
13521 store_parm_decls (current_function_parms);
13523 return true;
13527 /* Like start_preparsed_function, except that instead of a
13528 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13530 Returns true on success. If the DECLARATOR is not suitable
13531 for a function, we return false, which tells the parser to
13532 skip the entire function. */
13534 bool
13535 start_function (cp_decl_specifier_seq *declspecs,
13536 const cp_declarator *declarator,
13537 tree attrs)
13539 tree decl1;
13541 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13542 if (decl1 == error_mark_node)
13543 return false;
13544 /* If the declarator is not suitable for a function definition,
13545 cause a syntax error. */
13546 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13548 error ("invalid function declaration");
13549 return false;
13552 if (DECL_MAIN_P (decl1))
13553 /* main must return int. grokfndecl should have corrected it
13554 (and issued a diagnostic) if the user got it wrong. */
13555 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13556 integer_type_node));
13558 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13561 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13562 FN. */
13564 static bool
13565 use_eh_spec_block (tree fn)
13567 return (flag_exceptions && flag_enforce_eh_specs
13568 && !processing_template_decl
13569 && !type_throw_all_p (TREE_TYPE (fn))
13570 /* We insert the EH_SPEC_BLOCK only in the original
13571 function; then, it is copied automatically to the
13572 clones. */
13573 && !DECL_CLONED_FUNCTION_P (fn)
13574 /* Implicitly-generated constructors and destructors have
13575 exception specifications. However, those specifications
13576 are the union of the possible exceptions specified by the
13577 constructors/destructors for bases and members, so no
13578 unallowed exception will ever reach this function. By
13579 not creating the EH_SPEC_BLOCK we save a little memory,
13580 and we avoid spurious warnings about unreachable
13581 code. */
13582 && !DECL_DEFAULTED_FN (fn));
13585 /* Store the parameter declarations into the current function declaration.
13586 This is called after parsing the parameter declarations, before
13587 digesting the body of the function.
13589 Also install to binding contour return value identifier, if any. */
13591 static void
13592 store_parm_decls (tree current_function_parms)
13594 tree fndecl = current_function_decl;
13595 tree parm;
13597 /* This is a chain of any other decls that came in among the parm
13598 declarations. If a parm is declared with enum {foo, bar} x;
13599 then CONST_DECLs for foo and bar are put here. */
13600 tree nonparms = NULL_TREE;
13602 if (current_function_parms)
13604 /* This case is when the function was defined with an ANSI prototype.
13605 The parms already have decls, so we need not do anything here
13606 except record them as in effect
13607 and complain if any redundant old-style parm decls were written. */
13609 tree specparms = current_function_parms;
13610 tree next;
13612 /* Must clear this because it might contain TYPE_DECLs declared
13613 at class level. */
13614 current_binding_level->names = NULL;
13616 /* If we're doing semantic analysis, then we'll call pushdecl
13617 for each of these. We must do them in reverse order so that
13618 they end in the correct forward order. */
13619 specparms = nreverse (specparms);
13621 for (parm = specparms; parm; parm = next)
13623 next = DECL_CHAIN (parm);
13624 if (TREE_CODE (parm) == PARM_DECL)
13626 if (DECL_NAME (parm) == NULL_TREE
13627 || !VOID_TYPE_P (parm))
13628 pushdecl (parm);
13629 else
13630 error ("parameter %qD declared void", parm);
13632 else
13634 /* If we find an enum constant or a type tag,
13635 put it aside for the moment. */
13636 TREE_CHAIN (parm) = NULL_TREE;
13637 nonparms = chainon (nonparms, parm);
13641 /* Get the decls in their original chain order and record in the
13642 function. This is all and only the PARM_DECLs that were
13643 pushed into scope by the loop above. */
13644 DECL_ARGUMENTS (fndecl) = getdecls ();
13646 else
13647 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13649 /* Now store the final chain of decls for the arguments
13650 as the decl-chain of the current lexical scope.
13651 Put the enumerators in as well, at the front so that
13652 DECL_ARGUMENTS is not modified. */
13653 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13655 if (use_eh_spec_block (current_function_decl))
13656 current_eh_spec_block = begin_eh_spec_block ();
13660 /* We have finished doing semantic analysis on DECL, but have not yet
13661 generated RTL for its body. Save away our current state, so that
13662 when we want to generate RTL later we know what to do. */
13664 static void
13665 save_function_data (tree decl)
13667 struct language_function *f;
13669 /* Save the language-specific per-function data so that we can
13670 get it back when we really expand this function. */
13671 gcc_assert (!DECL_PENDING_INLINE_P (decl));
13673 /* Make a copy. */
13674 f = ggc_alloc<language_function> ();
13675 memcpy (f, cp_function_chain, sizeof (struct language_function));
13676 DECL_SAVED_FUNCTION_DATA (decl) = f;
13678 /* Clear out the bits we don't need. */
13679 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13680 f->bindings = NULL;
13681 f->x_local_names = NULL;
13682 f->base.local_typedefs = NULL;
13686 /* Set the return value of the constructor (if present). */
13688 static void
13689 finish_constructor_body (void)
13691 tree val;
13692 tree exprstmt;
13694 if (targetm.cxx.cdtor_returns_this ()
13695 && (! TYPE_FOR_JAVA (current_class_type)))
13697 /* Any return from a constructor will end up here. */
13698 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13700 val = DECL_ARGUMENTS (current_function_decl);
13701 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13702 DECL_RESULT (current_function_decl), val);
13703 /* Return the address of the object. */
13704 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13705 add_stmt (exprstmt);
13709 /* Do all the processing for the beginning of a destructor; set up the
13710 vtable pointers and cleanups for bases and members. */
13712 static void
13713 begin_destructor_body (void)
13715 tree compound_stmt;
13717 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13718 issued an error message. We still want to try to process the
13719 body of the function, but initialize_vtbl_ptrs will crash if
13720 TYPE_BINFO is NULL. */
13721 if (COMPLETE_TYPE_P (current_class_type))
13723 compound_stmt = begin_compound_stmt (0);
13724 /* Make all virtual function table pointers in non-virtual base
13725 classes point to CURRENT_CLASS_TYPE's virtual function
13726 tables. */
13727 initialize_vtbl_ptrs (current_class_ptr);
13728 finish_compound_stmt (compound_stmt);
13730 /* Insert a cleanup to let the back end know that the object is dead
13731 when we exit the destructor, either normally or via exception. */
13732 tree clobber = build_constructor (current_class_type, NULL);
13733 TREE_THIS_VOLATILE (clobber) = true;
13734 tree exprstmt = build2 (MODIFY_EXPR, current_class_type,
13735 current_class_ref, clobber);
13736 finish_decl_cleanup (NULL_TREE, exprstmt);
13738 /* And insert cleanups for our bases and members so that they
13739 will be properly destroyed if we throw. */
13740 push_base_cleanups ();
13744 /* At the end of every destructor we generate code to delete the object if
13745 necessary. Do that now. */
13747 static void
13748 finish_destructor_body (void)
13750 tree exprstmt;
13752 /* Any return from a destructor will end up here; that way all base
13753 and member cleanups will be run when the function returns. */
13754 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13756 /* In a virtual destructor, we must call delete. */
13757 if (DECL_VIRTUAL_P (current_function_decl))
13759 tree if_stmt;
13760 tree virtual_size = cxx_sizeof (current_class_type);
13762 /* [class.dtor]
13764 At the point of definition of a virtual destructor (including
13765 an implicit definition), non-placement operator delete shall
13766 be looked up in the scope of the destructor's class and if
13767 found shall be accessible and unambiguous. */
13768 exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
13769 virtual_size,
13770 /*global_p=*/false,
13771 /*placement=*/NULL_TREE,
13772 /*alloc_fn=*/NULL_TREE,
13773 tf_warning_or_error);
13775 if_stmt = begin_if_stmt ();
13776 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13777 current_in_charge_parm,
13778 integer_one_node),
13779 if_stmt);
13780 finish_expr_stmt (exprstmt);
13781 finish_then_clause (if_stmt);
13782 finish_if_stmt (if_stmt);
13785 if (targetm.cxx.cdtor_returns_this ())
13787 tree val;
13789 val = DECL_ARGUMENTS (current_function_decl);
13790 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13791 DECL_RESULT (current_function_decl), val);
13792 /* Return the address of the object. */
13793 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13794 add_stmt (exprstmt);
13798 /* Do the necessary processing for the beginning of a function body, which
13799 in this case includes member-initializers, but not the catch clauses of
13800 a function-try-block. Currently, this means opening a binding level
13801 for the member-initializers (in a ctor), member cleanups (in a dtor),
13802 and capture proxies (in a lambda operator()). */
13804 tree
13805 begin_function_body (void)
13807 tree stmt;
13809 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13810 return NULL_TREE;
13812 if (processing_template_decl)
13813 /* Do nothing now. */;
13814 else
13815 /* Always keep the BLOCK node associated with the outermost pair of
13816 curly braces of a function. These are needed for correct
13817 operation of dwarfout.c. */
13818 keep_next_level (true);
13820 stmt = begin_compound_stmt (BCS_FN_BODY);
13822 if (processing_template_decl)
13823 /* Do nothing now. */;
13824 else if (DECL_DESTRUCTOR_P (current_function_decl))
13825 begin_destructor_body ();
13827 return stmt;
13830 /* Do the processing for the end of a function body. Currently, this means
13831 closing out the cleanups for fully-constructed bases and members, and in
13832 the case of the destructor, deleting the object if desired. Again, this
13833 is only meaningful for [cd]tors, since they are the only functions where
13834 there is a significant distinction between the main body and any
13835 function catch clauses. Handling, say, main() return semantics here
13836 would be wrong, as flowing off the end of a function catch clause for
13837 main() would also need to return 0. */
13839 void
13840 finish_function_body (tree compstmt)
13842 if (compstmt == NULL_TREE)
13843 return;
13845 /* Close the block. */
13846 finish_compound_stmt (compstmt);
13848 if (processing_template_decl)
13849 /* Do nothing now. */;
13850 else if (DECL_CONSTRUCTOR_P (current_function_decl))
13851 finish_constructor_body ();
13852 else if (DECL_DESTRUCTOR_P (current_function_decl))
13853 finish_destructor_body ();
13856 /* Given a function, returns the BLOCK corresponding to the outermost level
13857 of curly braces, skipping the artificial block created for constructor
13858 initializers. */
13860 tree
13861 outer_curly_brace_block (tree fndecl)
13863 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13864 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13865 /* Skip the artificial function body block. */
13866 block = BLOCK_SUBBLOCKS (block);
13867 return block;
13870 /* If FNDECL is a class's key method, add the class to the list of
13871 keyed classes that should be emitted. */
13873 static void
13874 record_key_method_defined (tree fndecl)
13876 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13877 && DECL_VIRTUAL_P (fndecl)
13878 && !processing_template_decl)
13880 tree fnclass = DECL_CONTEXT (fndecl);
13881 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13882 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13886 /* Subroutine of finish_function.
13887 Save the body of constexpr functions for possible
13888 future compile time evaluation. */
13890 static void
13891 maybe_save_function_definition (tree fun)
13893 if (!processing_template_decl
13894 && DECL_DECLARED_CONSTEXPR_P (fun)
13895 && !DECL_CLONED_FUNCTION_P (fun))
13896 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13899 /* Finish up a function declaration and compile that function
13900 all the way to assembler language output. The free the storage
13901 for the function definition.
13903 FLAGS is a bitwise or of the following values:
13904 2 - INCLASS_INLINE
13905 We just finished processing the body of an in-class inline
13906 function definition. (This processing will have taken place
13907 after the class definition is complete.) */
13909 tree
13910 finish_function (int flags)
13912 tree fndecl = current_function_decl;
13913 tree fntype, ctype = NULL_TREE;
13914 int inclass_inline = (flags & 2) != 0;
13916 /* When we get some parse errors, we can end up without a
13917 current_function_decl, so cope. */
13918 if (fndecl == NULL_TREE)
13919 return error_mark_node;
13921 if (c_dialect_objc ())
13922 objc_finish_function ();
13924 gcc_assert (!defer_mark_used_calls);
13925 defer_mark_used_calls = true;
13927 record_key_method_defined (fndecl);
13929 fntype = TREE_TYPE (fndecl);
13931 /* TREE_READONLY (fndecl) = 1;
13932 This caused &foo to be of type ptr-to-const-function
13933 which then got a warning when stored in a ptr-to-function variable. */
13935 gcc_assert (building_stmt_list_p ());
13936 /* The current function is being defined, so its DECL_INITIAL should
13937 be set, and unless there's a multiple definition, it should be
13938 error_mark_node. */
13939 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13941 /* For a cloned function, we've already got all the code we need;
13942 there's no need to add any extra bits. */
13943 if (!DECL_CLONED_FUNCTION_P (fndecl))
13945 /* Make it so that `main' always returns 0 by default. */
13946 if (DECL_MAIN_P (current_function_decl))
13947 finish_return_stmt (integer_zero_node);
13949 if (use_eh_spec_block (current_function_decl))
13950 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13951 (TREE_TYPE (current_function_decl)),
13952 current_eh_spec_block);
13955 /* If we're saving up tree structure, tie off the function now. */
13956 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13958 if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
13959 cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
13961 finish_fname_decls ();
13963 /* If this function can't throw any exceptions, remember that. */
13964 if (!processing_template_decl
13965 && !cp_function_chain->can_throw
13966 && !flag_non_call_exceptions
13967 && !decl_replaceable_p (fndecl))
13968 TREE_NOTHROW (fndecl) = 1;
13970 /* This must come after expand_function_end because cleanups might
13971 have declarations (from inline functions) that need to go into
13972 this function's blocks. */
13974 /* If the current binding level isn't the outermost binding level
13975 for this function, either there is a bug, or we have experienced
13976 syntax errors and the statement tree is malformed. */
13977 if (current_binding_level->kind != sk_function_parms)
13979 /* Make sure we have already experienced errors. */
13980 gcc_assert (errorcount);
13982 /* Throw away the broken statement tree and extra binding
13983 levels. */
13984 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13986 while (current_binding_level->kind != sk_function_parms)
13988 if (current_binding_level->kind == sk_class)
13989 pop_nested_class ();
13990 else
13991 poplevel (0, 0, 0);
13994 poplevel (1, 0, 1);
13996 /* Statements should always be full-expressions at the outermost set
13997 of curly braces for a function. */
13998 gcc_assert (stmts_are_full_exprs_p ());
14000 /* If there are no return statements in a function with auto return type,
14001 the return type is void. But if the declared type is something like
14002 auto*, this is an error. */
14003 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
14004 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
14006 if (!is_auto (current_function_auto_return_pattern)
14007 && !current_function_returns_value && !current_function_returns_null)
14009 error ("no return statements in function returning %qT",
14010 current_function_auto_return_pattern);
14011 inform (input_location, "only plain %<auto%> return type can be "
14012 "deduced to %<void%>");
14014 apply_deduced_return_type (fndecl, void_type_node);
14015 fntype = TREE_TYPE (fndecl);
14018 /* Save constexpr function body before it gets munged by
14019 the NRV transformation. */
14020 maybe_save_function_definition (fndecl);
14022 /* Set up the named return value optimization, if we can. Candidate
14023 variables are selected in check_return_expr. */
14024 if (current_function_return_value)
14026 tree r = current_function_return_value;
14027 tree outer;
14029 if (r != error_mark_node
14030 /* This is only worth doing for fns that return in memory--and
14031 simpler, since we don't have to worry about promoted modes. */
14032 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
14033 /* Only allow this for variables declared in the outer scope of
14034 the function so we know that their lifetime always ends with a
14035 return; see g++.dg/opt/nrv6.C. We could be more flexible if
14036 we were to do this optimization in tree-ssa. */
14037 && (outer = outer_curly_brace_block (fndecl))
14038 && chain_member (r, BLOCK_VARS (outer)))
14039 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
14041 current_function_return_value = NULL_TREE;
14044 /* Remember that we were in class scope. */
14045 if (current_class_name)
14046 ctype = current_class_type;
14048 /* Must mark the RESULT_DECL as being in this function. */
14049 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14051 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14052 to the FUNCTION_DECL node itself. */
14053 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14055 /* Save away current state, if appropriate. */
14056 if (!processing_template_decl)
14057 save_function_data (fndecl);
14059 /* Complain if there's just no return statement. */
14060 if (warn_return_type
14061 && !VOID_TYPE_P (TREE_TYPE (fntype))
14062 && !dependent_type_p (TREE_TYPE (fntype))
14063 && !current_function_returns_value && !current_function_returns_null
14064 /* Don't complain if we abort or throw. */
14065 && !current_function_returns_abnormally
14066 /* Don't complain if there's an infinite loop. */
14067 && !current_function_infinite_loop
14068 /* Don't complain if we are declared noreturn. */
14069 && !TREE_THIS_VOLATILE (fndecl)
14070 && !DECL_NAME (DECL_RESULT (fndecl))
14071 && !TREE_NO_WARNING (fndecl)
14072 /* Structor return values (if any) are set by the compiler. */
14073 && !DECL_CONSTRUCTOR_P (fndecl)
14074 && !DECL_DESTRUCTOR_P (fndecl)
14075 && targetm.warn_func_return (fndecl))
14077 warning (OPT_Wreturn_type,
14078 "no return statement in function returning non-void");
14079 TREE_NO_WARNING (fndecl) = 1;
14082 /* Store the end of the function, so that we get good line number
14083 info for the epilogue. */
14084 cfun->function_end_locus = input_location;
14086 /* Complain about parameters that are only set, but never otherwise used. */
14087 if (warn_unused_but_set_parameter
14088 && !processing_template_decl
14089 && errorcount == unused_but_set_errorcount
14090 && !DECL_CLONED_FUNCTION_P (fndecl))
14092 tree decl;
14094 for (decl = DECL_ARGUMENTS (fndecl);
14095 decl;
14096 decl = DECL_CHAIN (decl))
14097 if (TREE_USED (decl)
14098 && TREE_CODE (decl) == PARM_DECL
14099 && !DECL_READ_P (decl)
14100 && DECL_NAME (decl)
14101 && !DECL_ARTIFICIAL (decl)
14102 && !TREE_NO_WARNING (decl)
14103 && !DECL_IN_SYSTEM_HEADER (decl)
14104 && TREE_TYPE (decl) != error_mark_node
14105 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
14106 && (!CLASS_TYPE_P (TREE_TYPE (decl))
14107 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
14108 warning (OPT_Wunused_but_set_parameter,
14109 "parameter %q+D set but not used", decl);
14110 unused_but_set_errorcount = errorcount;
14113 /* Complain about locally defined typedefs that are not used in this
14114 function. */
14115 maybe_warn_unused_local_typedefs ();
14117 /* Genericize before inlining. */
14118 if (!processing_template_decl)
14120 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
14121 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
14122 cp_genericize (fndecl);
14123 /* Clear out the bits we don't need. */
14124 f->x_current_class_ptr = NULL;
14125 f->x_current_class_ref = NULL;
14126 f->x_eh_spec_block = NULL;
14127 f->x_in_charge_parm = NULL;
14128 f->x_vtt_parm = NULL;
14129 f->x_return_value = NULL;
14130 f->bindings = NULL;
14131 f->extern_decl_map = NULL;
14132 f->infinite_loops = NULL;
14134 /* Clear out the bits we don't need. */
14135 local_names = NULL;
14137 /* We're leaving the context of this function, so zap cfun. It's still in
14138 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
14139 set_cfun (NULL);
14140 current_function_decl = NULL;
14142 /* If this is an in-class inline definition, we may have to pop the
14143 bindings for the template parameters that we added in
14144 maybe_begin_member_template_processing when start_function was
14145 called. */
14146 if (inclass_inline)
14147 maybe_end_member_template_processing ();
14149 /* Leave the scope of the class. */
14150 if (ctype)
14151 pop_nested_class ();
14153 --function_depth;
14155 /* Clean up. */
14156 current_function_decl = NULL_TREE;
14158 defer_mark_used_calls = false;
14159 if (deferred_mark_used_calls)
14161 unsigned int i;
14162 tree decl;
14164 FOR_EACH_VEC_SAFE_ELT (deferred_mark_used_calls, i, decl)
14165 mark_used (decl);
14166 vec_free (deferred_mark_used_calls);
14169 return fndecl;
14172 /* Create the FUNCTION_DECL for a function definition.
14173 DECLSPECS and DECLARATOR are the parts of the declaration;
14174 they describe the return type and the name of the function,
14175 but twisted together in a fashion that parallels the syntax of C.
14177 This function creates a binding context for the function body
14178 as well as setting up the FUNCTION_DECL in current_function_decl.
14180 Returns a FUNCTION_DECL on success.
14182 If the DECLARATOR is not suitable for a function (it defines a datum
14183 instead), we return 0, which tells yyparse to report a parse error.
14185 May return void_type_node indicating that this method is actually
14186 a friend. See grokfield for more details.
14188 Came here with a `.pushlevel' .
14190 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14191 CHANGES TO CODE IN `grokfield'. */
14193 tree
14194 grokmethod (cp_decl_specifier_seq *declspecs,
14195 const cp_declarator *declarator, tree attrlist)
14197 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14198 &attrlist);
14200 if (fndecl == error_mark_node)
14201 return error_mark_node;
14203 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14205 error ("invalid member function declaration");
14206 return error_mark_node;
14209 if (attrlist)
14210 cplus_decl_attributes (&fndecl, attrlist, 0);
14212 /* Pass friends other than inline friend functions back. */
14213 if (fndecl == void_type_node)
14214 return fndecl;
14216 if (DECL_IN_AGGR_P (fndecl))
14218 if (DECL_CLASS_SCOPE_P (fndecl))
14219 error ("%qD is already defined in class %qT", fndecl,
14220 DECL_CONTEXT (fndecl));
14221 return error_mark_node;
14224 check_template_shadow (fndecl);
14226 DECL_DECLARED_INLINE_P (fndecl) = 1;
14227 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
14229 /* We process method specializations in finish_struct_1. */
14230 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14232 fndecl = push_template_decl (fndecl);
14233 if (fndecl == error_mark_node)
14234 return fndecl;
14237 if (! DECL_FRIEND_P (fndecl))
14239 if (DECL_CHAIN (fndecl))
14241 fndecl = copy_node (fndecl);
14242 TREE_CHAIN (fndecl) = NULL_TREE;
14246 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14248 DECL_IN_AGGR_P (fndecl) = 1;
14249 return fndecl;
14253 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
14254 we can lay it out later, when and if its type becomes complete.
14256 Also handle constexpr pointer to member variables where the initializer
14257 is an unlowered PTRMEM_CST because the class isn't complete yet. */
14259 void
14260 maybe_register_incomplete_var (tree var)
14262 gcc_assert (VAR_P (var));
14264 /* Keep track of variables with incomplete types. */
14265 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14266 && DECL_EXTERNAL (var))
14268 tree inner_type = TREE_TYPE (var);
14270 while (TREE_CODE (inner_type) == ARRAY_TYPE)
14271 inner_type = TREE_TYPE (inner_type);
14272 inner_type = TYPE_MAIN_VARIANT (inner_type);
14274 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14275 /* RTTI TD entries are created while defining the type_info. */
14276 || (TYPE_LANG_SPECIFIC (inner_type)
14277 && TYPE_BEING_DEFINED (inner_type)))
14279 incomplete_var iv = {var, inner_type};
14280 vec_safe_push (incomplete_vars, iv);
14282 else if (TYPE_PTRMEM_P (inner_type)
14283 && DECL_INITIAL (var)
14284 && TREE_CODE (DECL_INITIAL (var)) == PTRMEM_CST)
14286 tree context = TYPE_PTRMEM_CLASS_TYPE (inner_type);
14287 gcc_assert (TYPE_BEING_DEFINED (context));
14288 incomplete_var iv = {var, context};
14289 vec_safe_push (incomplete_vars, iv);
14294 /* Called when a class type (given by TYPE) is defined. If there are
14295 any existing VAR_DECLs whose type has been completed by this
14296 declaration, update them now. */
14298 void
14299 complete_vars (tree type)
14301 unsigned ix;
14302 incomplete_var *iv;
14304 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
14306 if (same_type_p (type, iv->incomplete_type))
14308 tree var = iv->decl;
14309 tree type = TREE_TYPE (var);
14311 if (TYPE_PTRMEM_P (type))
14312 DECL_INITIAL (var) = cplus_expand_constant (DECL_INITIAL (var));
14313 else
14315 /* Complete the type of the variable. The VAR_DECL itself
14316 will be laid out in expand_expr. */
14317 complete_type (type);
14318 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
14321 /* Remove this entry from the list. */
14322 incomplete_vars->unordered_remove (ix);
14324 else
14325 ix++;
14328 /* Check for pending declarations which may have abstract type. */
14329 complete_type_check_abstract (type);
14332 /* If DECL is of a type which needs a cleanup, build and return an
14333 expression to perform that cleanup here. Return NULL_TREE if no
14334 cleanup need be done. */
14336 tree
14337 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
14339 tree type;
14340 tree attr;
14341 tree cleanup;
14343 /* Assume no cleanup is required. */
14344 cleanup = NULL_TREE;
14346 if (error_operand_p (decl))
14347 return cleanup;
14349 /* Handle "__attribute__((cleanup))". We run the cleanup function
14350 before the destructor since the destructor is what actually
14351 terminates the lifetime of the object. */
14352 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
14353 if (attr)
14355 tree id;
14356 tree fn;
14357 tree arg;
14359 /* Get the name specified by the user for the cleanup function. */
14360 id = TREE_VALUE (TREE_VALUE (attr));
14361 /* Look up the name to find the cleanup function to call. It is
14362 important to use lookup_name here because that is what is
14363 used in c-common.c:handle_cleanup_attribute when performing
14364 initial checks on the attribute. Note that those checks
14365 include ensuring that the function found is not an overloaded
14366 function, or an object with an overloaded call operator,
14367 etc.; we can rely on the fact that the function found is an
14368 ordinary FUNCTION_DECL. */
14369 fn = lookup_name (id);
14370 arg = build_address (decl);
14371 mark_used (decl);
14372 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
14373 if (cleanup == error_mark_node)
14374 return error_mark_node;
14376 /* Handle ordinary C++ destructors. */
14377 type = TREE_TYPE (decl);
14378 if (type_build_dtor_call (type))
14380 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
14381 tree addr;
14382 tree call;
14384 if (TREE_CODE (type) == ARRAY_TYPE)
14385 addr = decl;
14386 else
14387 addr = build_address (decl);
14389 call = build_delete (TREE_TYPE (addr), addr,
14390 sfk_complete_destructor, flags, 0, complain);
14391 if (call == error_mark_node)
14392 cleanup = error_mark_node;
14393 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
14394 /* Discard the call. */;
14395 else if (cleanup)
14396 cleanup = cp_build_compound_expr (cleanup, call, complain);
14397 else
14398 cleanup = call;
14401 /* build_delete sets the location of the destructor call to the
14402 current location, even though the destructor is going to be
14403 called later, at the end of the current scope. This can lead to
14404 a "jumpy" behaviour for users of debuggers when they step around
14405 the end of the block. So let's unset the location of the
14406 destructor call instead. */
14407 if (cleanup != NULL && EXPR_P (cleanup))
14408 SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
14410 if (cleanup
14411 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl))))
14412 /* Treat objects with destructors as used; the destructor may do
14413 something substantive. */
14414 mark_used (decl);
14416 return cleanup;
14420 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
14421 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
14422 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
14424 tree
14425 static_fn_type (tree memfntype)
14427 tree fntype;
14428 tree args;
14430 if (TYPE_PTRMEMFUNC_P (memfntype))
14431 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
14432 if (POINTER_TYPE_P (memfntype)
14433 || TREE_CODE (memfntype) == FUNCTION_DECL)
14434 memfntype = TREE_TYPE (memfntype);
14435 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
14436 return memfntype;
14437 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
14438 args = TYPE_ARG_TYPES (memfntype);
14439 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
14440 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
14441 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
14442 fntype = (cp_build_type_attribute_variant
14443 (fntype, TYPE_ATTRIBUTES (memfntype)));
14444 fntype = (build_exception_variant
14445 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
14446 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
14447 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
14448 return fntype;
14451 /* DECL was originally constructed as a non-static member function,
14452 but turned out to be static. Update it accordingly. */
14454 void
14455 revert_static_member_fn (tree decl)
14457 tree stype = static_fn_type (decl);
14458 cp_cv_quals quals = type_memfn_quals (stype);
14459 cp_ref_qualifier rqual = type_memfn_rqual (stype);
14461 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
14462 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
14464 TREE_TYPE (decl) = stype;
14466 if (DECL_ARGUMENTS (decl))
14467 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
14468 DECL_STATIC_FUNCTION_P (decl) = 1;
14471 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14472 one of the language-independent trees. */
14474 enum cp_tree_node_structure_enum
14475 cp_tree_node_structure (union lang_tree_node * t)
14477 switch (TREE_CODE (&t->generic))
14479 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
14480 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
14481 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
14482 case OVERLOAD: return TS_CP_OVERLOAD;
14483 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
14484 case PTRMEM_CST: return TS_CP_PTRMEM;
14485 case BASELINK: return TS_CP_BASELINK;
14486 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
14487 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
14488 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
14489 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
14490 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
14491 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
14492 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
14493 default: return TS_CP_GENERIC;
14497 /* Build the void_list_node (void_type_node having been created). */
14498 tree
14499 build_void_list_node (void)
14501 tree t = build_tree_list (NULL_TREE, void_type_node);
14502 return t;
14505 bool
14506 cp_missing_noreturn_ok_p (tree decl)
14508 /* A missing noreturn is ok for the `main' function. */
14509 return DECL_MAIN_P (decl);
14512 /* Return the decl used to identify the COMDAT group into which DECL should
14513 be placed. */
14515 tree
14516 cxx_comdat_group (tree decl)
14518 /* Virtual tables, construction virtual tables, and virtual table
14519 tables all go in a single COMDAT group, named after the primary
14520 virtual table. */
14521 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
14522 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
14523 /* For all other DECLs, the COMDAT group is the mangled name of the
14524 declaration itself. */
14525 else
14527 while (DECL_THUNK_P (decl))
14529 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
14530 into the same section as the target function. In that case
14531 we must return target's name. */
14532 tree target = THUNK_TARGET (decl);
14533 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14534 && DECL_SECTION_NAME (target) != NULL
14535 && DECL_ONE_ONLY (target))
14536 decl = target;
14537 else
14538 break;
14542 return decl;
14545 /* Returns the return type for FN as written by the user, which may include
14546 a placeholder for a deduced return type. */
14548 tree
14549 fndecl_declared_return_type (tree fn)
14551 fn = STRIP_TEMPLATE (fn);
14552 if (FNDECL_USED_AUTO (fn))
14554 struct language_function *f = NULL;
14555 if (DECL_STRUCT_FUNCTION (fn))
14556 f = DECL_STRUCT_FUNCTION (fn)->language;
14557 if (f == NULL)
14558 f = DECL_SAVED_FUNCTION_DATA (fn);
14559 return f->x_auto_return_pattern;
14561 return TREE_TYPE (TREE_TYPE (fn));
14564 /* Returns true iff DECL was declared with an auto return type and it has
14565 not yet been deduced to a real type. */
14567 bool
14568 undeduced_auto_decl (tree decl)
14570 if (cxx_dialect < cxx1y)
14571 return false;
14572 return type_uses_auto (TREE_TYPE (decl));
14575 /* Complain if DECL has an undeduced return type. */
14577 void
14578 require_deduced_type (tree decl)
14580 if (undeduced_auto_decl (decl))
14581 error ("use of %qD before deduction of %<auto%>", decl);
14584 #include "gt-cp-decl.h"