Reverting merge from trunk
[official-gcc.git] / gcc / cp / decl.c
blob5f9dfadcf5fafa4477f866d4fedabc22e2e01c20
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2013 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 "flags.h"
35 #include "cp-tree.h"
36 #include "tree-iterator.h"
37 #include "tree-inline.h"
38 #include "decl.h"
39 #include "intl.h"
40 #include "toplev.h"
41 #include "hashtab.h"
42 #include "tm_p.h"
43 #include "target.h"
44 #include "c-family/c-common.h"
45 #include "c-family/c-objc.h"
46 #include "c-family/c-pragma.h"
47 #include "c-family/c-target.h"
48 #include "c-family/c-ubsan.h"
49 #include "diagnostic.h"
50 #include "intl.h"
51 #include "debug.h"
52 #include "timevar.h"
53 #include "pointer-set.h"
54 #include "splay-tree.h"
55 #include "plugin.h"
56 #include "cgraph.h"
58 /* Possible cases of bad specifiers type used by bad_specifiers. */
59 enum bad_spec_place {
60 BSP_VAR, /* variable */
61 BSP_PARM, /* parameter */
62 BSP_TYPE, /* type */
63 BSP_FIELD /* field */
66 static tree grokparms (tree parmlist, tree *);
67 static const char *redeclaration_error_message (tree, tree);
69 static int decl_jump_unsafe (tree);
70 static void require_complete_types_for_parms (tree);
71 static int ambi_op_p (enum tree_code);
72 static int unary_op_p (enum tree_code);
73 static void push_local_name (tree);
74 static tree grok_reference_init (tree, tree, tree, int);
75 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
76 int, int, tree);
77 static int check_static_variable_definition (tree, tree);
78 static void record_unknown_type (tree, const char *);
79 static tree builtin_function_1 (tree, tree, bool);
80 static int member_function_or_else (tree, tree, enum overload_flags);
81 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
82 int);
83 static void check_for_uninitialized_const_var (tree);
84 static hashval_t typename_hash (const void *);
85 static int typename_compare (const void *, const void *);
86 static tree local_variable_p_walkfn (tree *, int *, void *);
87 static tree record_builtin_java_type (const char *, int);
88 static const char *tag_name (enum tag_types);
89 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
90 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
91 static void maybe_deduce_size_from_array_init (tree, tree);
92 static void layout_var_decl (tree);
93 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
94 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
95 static void save_function_data (tree);
96 static void copy_type_enum (tree , tree);
97 static void check_function_type (tree, tree);
98 static void finish_constructor_body (void);
99 static void begin_destructor_body (void);
100 static void finish_destructor_body (void);
101 static void record_key_method_defined (tree);
102 static tree create_array_type_for_decl (tree, tree, tree);
103 static tree get_atexit_node (void);
104 static tree get_dso_handle_node (void);
105 static tree start_cleanup_fn (void);
106 static void end_cleanup_fn (void);
107 static tree cp_make_fname_decl (location_t, tree, int);
108 static void initialize_predefined_identifiers (void);
109 static tree check_special_function_return_type
110 (special_function_kind, tree, tree);
111 static tree push_cp_library_fn (enum tree_code, tree, int);
112 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
113 static void store_parm_decls (tree);
114 static void initialize_local_var (tree, tree);
115 static void expand_static_init (tree, tree);
117 /* The following symbols are subsumed in the cp_global_trees array, and
118 listed here individually for documentation purposes.
120 C++ extensions
121 tree wchar_decl_node;
123 tree vtable_entry_type;
124 tree delta_type_node;
125 tree __t_desc_type_node;
127 tree class_type_node;
128 tree unknown_type_node;
130 Array type `vtable_entry_type[]'
132 tree vtbl_type_node;
133 tree vtbl_ptr_type_node;
135 Namespaces,
137 tree std_node;
138 tree abi_node;
140 A FUNCTION_DECL which can call `abort'. Not necessarily the
141 one that the user will declare, but sufficient to be called
142 by routines that want to abort the program.
144 tree abort_fndecl;
146 The FUNCTION_DECL for the default `::operator delete'.
148 tree global_delete_fndecl;
150 Used by RTTI
151 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
152 tree tinfo_var_id; */
154 tree cp_global_trees[CPTI_MAX];
156 /* Indicates that there is a type value in some namespace, although
157 that is not necessarily in scope at the moment. */
159 tree global_type_node;
161 /* The node that holds the "name" of the global scope. */
162 tree global_scope_name;
164 #define local_names cp_function_chain->x_local_names
166 /* A list of objects which have constructors or destructors
167 which reside in the global scope. The decl is stored in
168 the TREE_VALUE slot and the initializer is stored
169 in the TREE_PURPOSE slot. */
170 tree static_aggregates;
172 /* Like static_aggregates, but for thread_local variables. */
173 tree tls_aggregates;
175 /* -- end of C++ */
177 /* A node for the integer constant 2. */
179 tree integer_two_node;
181 /* Used only for jumps to as-yet undefined labels, since jumps to
182 defined labels can have their validity checked immediately. */
184 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
185 struct named_label_use_entry *next;
186 /* The binding level to which this entry is *currently* attached.
187 This is initially the binding level in which the goto appeared,
188 but is modified as scopes are closed. */
189 cp_binding_level *binding_level;
190 /* The head of the names list that was current when the goto appeared,
191 or the inner scope popped. These are the decls that will *not* be
192 skipped when jumping to the label. */
193 tree names_in_scope;
194 /* The location of the goto, for error reporting. */
195 location_t o_goto_locus;
196 /* True if an OpenMP structured block scope has been closed since
197 the goto appeared. This means that the branch from the label will
198 illegally exit an OpenMP scope. */
199 bool in_omp_scope;
202 /* A list of all LABEL_DECLs in the function that have names. Here so
203 we can clear out their names' definitions at the end of the
204 function, and so we can check the validity of jumps to these labels. */
206 struct GTY(()) named_label_entry {
207 /* The decl itself. */
208 tree label_decl;
210 /* The binding level to which the label is *currently* attached.
211 This is initially set to the binding level in which the label
212 is defined, but is modified as scopes are closed. */
213 cp_binding_level *binding_level;
214 /* The head of the names list that was current when the label was
215 defined, or the inner scope popped. These are the decls that will
216 be skipped when jumping to the label. */
217 tree names_in_scope;
218 /* A vector of all decls from all binding levels that would be
219 crossed by a backward branch to the label. */
220 vec<tree, va_gc> *bad_decls;
222 /* A list of uses of the label, before the label is defined. */
223 struct named_label_use_entry *uses;
225 /* The following bits are set after the label is defined, and are
226 updated as scopes are popped. They indicate that a backward jump
227 to the label will illegally enter a scope of the given flavor. */
228 bool in_try_scope;
229 bool in_catch_scope;
230 bool in_omp_scope;
233 #define named_labels cp_function_chain->x_named_labels
235 /* The number of function bodies which we are currently processing.
236 (Zero if we are at namespace scope, one inside the body of a
237 function, two inside the body of a function in a local class, etc.) */
238 int function_depth;
240 /* To avoid unwanted recursion, finish_function defers all mark_used calls
241 encountered during its execution until it finishes. */
242 bool defer_mark_used_calls;
243 vec<tree, va_gc> *deferred_mark_used_calls;
245 /* States indicating how grokdeclarator() should handle declspecs marked
246 with __attribute__((deprecated)). An object declared as
247 __attribute__((deprecated)) suppresses warnings of uses of other
248 deprecated items. */
249 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
252 /* A list of VAR_DECLs whose type was incomplete at the time the
253 variable was declared. */
255 typedef struct GTY(()) incomplete_var_d {
256 tree decl;
257 tree incomplete_type;
258 } incomplete_var;
261 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
263 /* Returns the kind of template specialization we are currently
264 processing, given that it's declaration contained N_CLASS_SCOPES
265 explicit scope qualifications. */
267 tmpl_spec_kind
268 current_tmpl_spec_kind (int n_class_scopes)
270 int n_template_parm_scopes = 0;
271 int seen_specialization_p = 0;
272 int innermost_specialization_p = 0;
273 cp_binding_level *b;
275 /* Scan through the template parameter scopes. */
276 for (b = current_binding_level;
277 b->kind == sk_template_parms;
278 b = b->level_chain)
280 /* If we see a specialization scope inside a parameter scope,
281 then something is wrong. That corresponds to a declaration
282 like:
284 template <class T> template <> ...
286 which is always invalid since [temp.expl.spec] forbids the
287 specialization of a class member template if the enclosing
288 class templates are not explicitly specialized as well. */
289 if (b->explicit_spec_p)
291 if (n_template_parm_scopes == 0)
292 innermost_specialization_p = 1;
293 else
294 seen_specialization_p = 1;
296 else if (seen_specialization_p == 1)
297 return tsk_invalid_member_spec;
299 ++n_template_parm_scopes;
302 /* Handle explicit instantiations. */
303 if (processing_explicit_instantiation)
305 if (n_template_parm_scopes != 0)
306 /* We've seen a template parameter list during an explicit
307 instantiation. For example:
309 template <class T> template void f(int);
311 This is erroneous. */
312 return tsk_invalid_expl_inst;
313 else
314 return tsk_expl_inst;
317 if (n_template_parm_scopes < n_class_scopes)
318 /* We've not seen enough template headers to match all the
319 specialized classes present. For example:
321 template <class T> void R<T>::S<T>::f(int);
323 This is invalid; there needs to be one set of template
324 parameters for each class. */
325 return tsk_insufficient_parms;
326 else if (n_template_parm_scopes == n_class_scopes)
327 /* We're processing a non-template declaration (even though it may
328 be a member of a template class.) For example:
330 template <class T> void S<T>::f(int);
332 The `class T' matches the `S<T>', leaving no template headers
333 corresponding to the `f'. */
334 return tsk_none;
335 else if (n_template_parm_scopes > n_class_scopes + 1)
336 /* We've got too many template headers. For example:
338 template <> template <class T> void f (T);
340 There need to be more enclosing classes. */
341 return tsk_excessive_parms;
342 else
343 /* This must be a template. It's of the form:
345 template <class T> template <class U> void S<T>::f(U);
347 This is a specialization if the innermost level was a
348 specialization; otherwise it's just a definition of the
349 template. */
350 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
353 /* Exit the current scope. */
355 void
356 finish_scope (void)
358 poplevel (0, 0, 0);
361 /* When a label goes out of scope, check to see if that label was used
362 in a valid manner, and issue any appropriate warnings or errors. */
364 static void
365 pop_label (tree label, tree old_value)
367 if (!processing_template_decl)
369 if (DECL_INITIAL (label) == NULL_TREE)
371 location_t location;
373 error ("label %q+D used but not defined", label);
374 location = input_location; /* FIXME want (input_filename, (line)0) */
375 /* Avoid crashing later. */
376 define_label (location, DECL_NAME (label));
378 else
379 warn_for_unused_label (label);
382 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
385 /* At the end of a function, all labels declared within the function
386 go out of scope. BLOCK is the top-level block for the
387 function. */
389 static int
390 pop_labels_1 (void **slot, void *data)
392 struct named_label_entry *ent = (struct named_label_entry *) *slot;
393 tree block = (tree) data;
395 pop_label (ent->label_decl, NULL_TREE);
397 /* Put the labels into the "variables" of the top-level block,
398 so debugger can see them. */
399 DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
400 BLOCK_VARS (block) = ent->label_decl;
402 htab_clear_slot (named_labels, slot);
404 return 1;
407 static void
408 pop_labels (tree block)
410 if (named_labels)
412 htab_traverse (named_labels, pop_labels_1, block);
413 named_labels = NULL;
417 /* At the end of a block with local labels, restore the outer definition. */
419 static void
420 pop_local_label (tree label, tree old_value)
422 struct named_label_entry dummy;
423 void **slot;
425 pop_label (label, old_value);
427 dummy.label_decl = label;
428 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
429 htab_clear_slot (named_labels, slot);
432 /* The following two routines are used to interface to Objective-C++.
433 The binding level is purposely treated as an opaque type. */
435 void *
436 objc_get_current_scope (void)
438 return current_binding_level;
441 /* The following routine is used by the NeXT-style SJLJ exceptions;
442 variables get marked 'volatile' so as to not be clobbered by
443 _setjmp()/_longjmp() calls. All variables in the current scope,
444 as well as parent scopes up to (but not including) ENCLOSING_BLK
445 shall be thusly marked. */
447 void
448 objc_mark_locals_volatile (void *enclosing_blk)
450 cp_binding_level *scope;
452 for (scope = current_binding_level;
453 scope && scope != enclosing_blk;
454 scope = scope->level_chain)
456 tree decl;
458 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
459 objc_volatilize_decl (decl);
461 /* Do not climb up past the current function. */
462 if (scope->kind == sk_function_parms)
463 break;
467 /* Update data for defined and undefined labels when leaving a scope. */
469 static int
470 poplevel_named_label_1 (void **slot, void *data)
472 struct named_label_entry *ent = (struct named_label_entry *) *slot;
473 cp_binding_level *bl = (cp_binding_level *) data;
474 cp_binding_level *obl = bl->level_chain;
476 if (ent->binding_level == bl)
478 tree decl;
480 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
481 TREE_LISTs representing OVERLOADs, so be careful. */
482 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
483 ? DECL_CHAIN (decl)
484 : TREE_CHAIN (decl)))
485 if (decl_jump_unsafe (decl))
486 vec_safe_push (ent->bad_decls, decl);
488 ent->binding_level = obl;
489 ent->names_in_scope = obl->names;
490 switch (bl->kind)
492 case sk_try:
493 ent->in_try_scope = true;
494 break;
495 case sk_catch:
496 ent->in_catch_scope = true;
497 break;
498 case sk_omp:
499 ent->in_omp_scope = true;
500 break;
501 default:
502 break;
505 else if (ent->uses)
507 struct named_label_use_entry *use;
509 for (use = ent->uses; use ; use = use->next)
510 if (use->binding_level == bl)
512 use->binding_level = obl;
513 use->names_in_scope = obl->names;
514 if (bl->kind == sk_omp)
515 use->in_omp_scope = true;
519 return 1;
522 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
523 when errors were reported, except for -Werror-unused-but-set-*. */
524 static int unused_but_set_errorcount;
526 /* Exit a binding level.
527 Pop the level off, and restore the state of the identifier-decl mappings
528 that were in effect when this level was entered.
530 If KEEP == 1, this level had explicit declarations, so
531 and create a "block" (a BLOCK node) for the level
532 to record its declarations and subblocks for symbol table output.
534 If FUNCTIONBODY is nonzero, this level is the body of a function,
535 so create a block as if KEEP were set and also clear out all
536 label names.
538 If REVERSE is nonzero, reverse the order of decls before putting
539 them into the BLOCK. */
541 tree
542 poplevel (int keep, int reverse, int functionbody)
544 tree link;
545 /* The chain of decls was accumulated in reverse order.
546 Put it into forward order, just for cleanliness. */
547 tree decls;
548 tree subblocks;
549 tree block;
550 tree decl;
551 int leaving_for_scope;
552 scope_kind kind;
553 unsigned ix;
554 cp_label_binding *label_bind;
556 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
557 restart:
559 block = NULL_TREE;
561 gcc_assert (current_binding_level->kind != sk_class);
563 if (current_binding_level->kind == sk_cleanup)
564 functionbody = 0;
565 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
567 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
569 /* We used to use KEEP == 2 to indicate that the new block should go
570 at the beginning of the list of blocks at this binding level,
571 rather than the end. This hack is no longer used. */
572 gcc_assert (keep == 0 || keep == 1);
574 if (current_binding_level->keep)
575 keep = 1;
577 /* Any uses of undefined labels, and any defined labels, now operate
578 under constraints of next binding contour. */
579 if (cfun && !functionbody && named_labels)
580 htab_traverse (named_labels, poplevel_named_label_1,
581 current_binding_level);
583 /* Get the decls in the order they were written.
584 Usually current_binding_level->names is in reverse order.
585 But parameter decls were previously put in forward order. */
587 if (reverse)
588 current_binding_level->names
589 = decls = nreverse (current_binding_level->names);
590 else
591 decls = current_binding_level->names;
593 /* If there were any declarations or structure tags in that level,
594 or if this level is a function body,
595 create a BLOCK to record them for the life of this function. */
596 block = NULL_TREE;
597 if (keep == 1 || functionbody)
598 block = make_node (BLOCK);
599 if (block != NULL_TREE)
601 BLOCK_VARS (block) = decls;
602 BLOCK_SUBBLOCKS (block) = subblocks;
605 /* In each subblock, record that this is its superior. */
606 if (keep >= 0)
607 for (link = subblocks; link; link = BLOCK_CHAIN (link))
608 BLOCK_SUPERCONTEXT (link) = block;
610 /* We still support the old for-scope rules, whereby the variables
611 in a for-init statement were in scope after the for-statement
612 ended. We only use the new rules if flag_new_for_scope is
613 nonzero. */
614 leaving_for_scope
615 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
617 /* Before we remove the declarations first check for unused variables. */
618 if ((warn_unused_variable || warn_unused_but_set_variable)
619 && !processing_template_decl)
620 for (tree d = getdecls (); d; d = TREE_CHAIN (d))
622 /* There are cases where D itself is a TREE_LIST. See in
623 push_local_binding where the list of decls returned by
624 getdecls is built. */
625 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
626 // See through references for improved -Wunused-variable (PR 38958).
627 tree type = non_reference (TREE_TYPE (decl));
628 if (VAR_P (decl)
629 && (! TREE_USED (decl) || !DECL_READ_P (decl))
630 && ! DECL_IN_SYSTEM_HEADER (decl)
631 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
632 && type != error_mark_node
633 && (!CLASS_TYPE_P (type)
634 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
635 || lookup_attribute ("warn_unused",
636 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
638 if (! TREE_USED (decl))
639 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
640 else if (DECL_CONTEXT (decl) == current_function_decl
641 // For -Wunused-but-set-variable leave references alone.
642 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
643 && errorcount == unused_but_set_errorcount)
645 warning (OPT_Wunused_but_set_variable,
646 "variable %q+D set but not used", decl);
647 unused_but_set_errorcount = errorcount;
652 /* Remove declarations for all the DECLs in this level. */
653 for (link = decls; link; link = TREE_CHAIN (link))
655 if (leaving_for_scope && VAR_P (link)
656 /* It's hard to make this ARM compatibility hack play nicely with
657 lambdas, and it really isn't necessary in C++11 mode. */
658 && cxx_dialect < cxx11
659 && DECL_NAME (link))
661 tree name = DECL_NAME (link);
662 cxx_binding *ob;
663 tree ns_binding;
665 ob = outer_binding (name,
666 IDENTIFIER_BINDING (name),
667 /*class_p=*/true);
668 if (!ob)
669 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
670 else
671 ns_binding = NULL_TREE;
673 if (ob && ob->scope == current_binding_level->level_chain)
674 /* We have something like:
676 int i;
677 for (int i; ;);
679 and we are leaving the `for' scope. There's no reason to
680 keep the binding of the inner `i' in this case. */
681 pop_binding (name, link);
682 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
683 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
684 /* Here, we have something like:
686 typedef int I;
688 void f () {
689 for (int I; ;);
692 We must pop the for-scope binding so we know what's a
693 type and what isn't. */
694 pop_binding (name, link);
695 else
697 /* Mark this VAR_DECL as dead so that we can tell we left it
698 there only for backward compatibility. */
699 DECL_DEAD_FOR_LOCAL (link) = 1;
701 /* Keep track of what should have happened when we
702 popped the binding. */
703 if (ob && ob->value)
705 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
706 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
709 /* Add it to the list of dead variables in the next
710 outermost binding to that we can remove these when we
711 leave that binding. */
712 vec_safe_push (
713 current_binding_level->level_chain->dead_vars_from_for,
714 link);
716 /* Although we don't pop the cxx_binding, we do clear
717 its SCOPE since the scope is going away now. */
718 IDENTIFIER_BINDING (name)->scope
719 = current_binding_level->level_chain;
722 else
724 tree name;
726 /* Remove the binding. */
727 decl = link;
729 if (TREE_CODE (decl) == TREE_LIST)
730 decl = TREE_VALUE (decl);
731 name = decl;
733 if (TREE_CODE (name) == OVERLOAD)
734 name = OVL_FUNCTION (name);
736 gcc_assert (DECL_P (name));
737 pop_binding (DECL_NAME (name), decl);
741 /* Remove declarations for any `for' variables from inner scopes
742 that we kept around. */
743 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
744 ix, decl)
745 pop_binding (DECL_NAME (decl), decl);
747 /* Restore the IDENTIFIER_TYPE_VALUEs. */
748 for (link = current_binding_level->type_shadowed;
749 link; link = TREE_CHAIN (link))
750 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
752 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
753 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->shadowed_labels,
754 ix, label_bind)
755 pop_local_label (label_bind->label, label_bind->prev_value);
757 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
758 list if a `using' declaration put them there. The debugging
759 back ends won't understand OVERLOAD, so we remove them here.
760 Because the BLOCK_VARS are (temporarily) shared with
761 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
762 popped all the bindings. */
763 if (block)
765 tree* d;
767 for (d = &BLOCK_VARS (block); *d; )
769 if (TREE_CODE (*d) == TREE_LIST)
770 *d = TREE_CHAIN (*d);
771 else
772 d = &DECL_CHAIN (*d);
776 /* If the level being exited is the top level of a function,
777 check over all the labels. */
778 if (functionbody)
780 /* Since this is the top level block of a function, the vars are
781 the function's parameters. Don't leave them in the BLOCK
782 because they are found in the FUNCTION_DECL instead. */
783 BLOCK_VARS (block) = 0;
784 pop_labels (block);
787 kind = current_binding_level->kind;
788 if (kind == sk_cleanup)
790 tree stmt;
792 /* If this is a temporary binding created for a cleanup, then we'll
793 have pushed a statement list level. Pop that, create a new
794 BIND_EXPR for the block, and insert it into the stream. */
795 stmt = pop_stmt_list (current_binding_level->statement_list);
796 stmt = c_build_bind_expr (input_location, block, stmt);
797 add_stmt (stmt);
800 leave_scope ();
801 if (functionbody)
803 /* The current function is being defined, so its DECL_INITIAL
804 should be error_mark_node. */
805 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
806 DECL_INITIAL (current_function_decl) = block;
808 else if (block)
809 current_binding_level->blocks
810 = block_chainon (current_binding_level->blocks, block);
812 /* If we did not make a block for the level just exited,
813 any blocks made for inner levels
814 (since they cannot be recorded as subblocks in that level)
815 must be carried forward so they will later become subblocks
816 of something else. */
817 else if (subblocks)
818 current_binding_level->blocks
819 = block_chainon (current_binding_level->blocks, subblocks);
821 /* Each and every BLOCK node created here in `poplevel' is important
822 (e.g. for proper debugging information) so if we created one
823 earlier, mark it as "used". */
824 if (block)
825 TREE_USED (block) = 1;
827 /* All temporary bindings created for cleanups are popped silently. */
828 if (kind == sk_cleanup)
829 goto restart;
831 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
832 return block;
835 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
836 itself, calling F for each. The DATA is passed to F as well. */
838 static int
839 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
841 int result = 0;
842 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
844 result |= (*f) (name_space, data);
846 for (; current; current = DECL_CHAIN (current))
847 result |= walk_namespaces_r (current, f, data);
849 return result;
852 /* Walk all the namespaces, calling F for each. The DATA is passed to
853 F as well. */
856 walk_namespaces (walk_namespaces_fn f, void* data)
858 return walk_namespaces_r (global_namespace, f, data);
861 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
862 DATA is non-NULL, this is the last time we will call
863 wrapup_global_declarations for this NAMESPACE. */
866 wrapup_globals_for_namespace (tree name_space, void* data)
868 cp_binding_level *level = NAMESPACE_LEVEL (name_space);
869 vec<tree, va_gc> *statics = level->static_decls;
870 tree *vec = statics->address ();
871 int len = statics->length ();
872 int last_time = (data != 0);
874 if (last_time)
876 check_global_declarations (vec, len);
877 emit_debug_global_declarations (vec, len);
878 return 0;
881 /* Write out any globals that need to be output. */
882 return wrapup_global_declarations (vec, len);
886 /* In C++, you don't have to write `struct S' to refer to `S'; you
887 can just use `S'. We accomplish this by creating a TYPE_DECL as
888 if the user had written `typedef struct S S'. Create and return
889 the TYPE_DECL for TYPE. */
891 tree
892 create_implicit_typedef (tree name, tree type)
894 tree decl;
896 decl = build_decl (input_location, TYPE_DECL, name, type);
897 DECL_ARTIFICIAL (decl) = 1;
898 /* There are other implicit type declarations, like the one *within*
899 a class that allows you to write `S::S'. We must distinguish
900 amongst these. */
901 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
902 TYPE_NAME (type) = decl;
903 TYPE_STUB_DECL (type) = decl;
905 return decl;
908 /* Remember a local name for name-mangling purposes. */
910 static void
911 push_local_name (tree decl)
913 size_t i, nelts;
914 tree t, name;
916 timevar_start (TV_NAME_LOOKUP);
918 name = DECL_NAME (decl);
920 nelts = vec_safe_length (local_names);
921 for (i = 0; i < nelts; i++)
923 t = (*local_names)[i];
924 if (DECL_NAME (t) == name)
926 if (!DECL_LANG_SPECIFIC (decl))
927 retrofit_lang_decl (decl);
928 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
929 if (DECL_DISCRIMINATOR_SET_P (t))
930 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
931 else
932 DECL_DISCRIMINATOR (decl) = 1;
934 (*local_names)[i] = decl;
935 timevar_stop (TV_NAME_LOOKUP);
936 return;
940 vec_safe_push (local_names, decl);
941 timevar_stop (TV_NAME_LOOKUP);
944 /* Subroutine of duplicate_decls: return truthvalue of whether
945 or not types of these decls match.
947 For C++, we must compare the parameter list so that `int' can match
948 `int&' in a parameter position, but `int&' is not confused with
949 `const int&'. */
952 decls_match (tree newdecl, tree olddecl)
954 int types_match;
956 if (newdecl == olddecl)
957 return 1;
959 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
960 /* If the two DECLs are not even the same kind of thing, we're not
961 interested in their types. */
962 return 0;
964 gcc_assert (DECL_P (newdecl));
966 if (TREE_CODE (newdecl) == FUNCTION_DECL)
968 tree f1 = TREE_TYPE (newdecl);
969 tree f2 = TREE_TYPE (olddecl);
970 tree p1 = TYPE_ARG_TYPES (f1);
971 tree p2 = TYPE_ARG_TYPES (f2);
972 tree r2;
974 /* Specializations of different templates are different functions
975 even if they have the same type. */
976 tree t1 = (DECL_USE_TEMPLATE (newdecl)
977 ? DECL_TI_TEMPLATE (newdecl)
978 : NULL_TREE);
979 tree t2 = (DECL_USE_TEMPLATE (olddecl)
980 ? DECL_TI_TEMPLATE (olddecl)
981 : NULL_TREE);
982 if (t1 != t2)
983 return 0;
985 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
986 && ! (DECL_EXTERN_C_P (newdecl)
987 && DECL_EXTERN_C_P (olddecl)))
988 return 0;
990 /* A new declaration doesn't match a built-in one unless it
991 is also extern "C". */
992 if (DECL_IS_BUILTIN (olddecl)
993 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
994 return 0;
996 if (TREE_CODE (f1) != TREE_CODE (f2))
997 return 0;
999 /* A declaration with deduced return type should use its pre-deduction
1000 type for declaration matching. */
1001 r2 = fndecl_declared_return_type (olddecl);
1003 if (same_type_p (TREE_TYPE (f1), r2))
1005 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1006 && (DECL_BUILT_IN (olddecl)
1007 #ifndef NO_IMPLICIT_EXTERN_C
1008 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1009 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1010 #endif
1013 types_match = self_promoting_args_p (p1);
1014 if (p1 == void_list_node)
1015 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1017 #ifndef NO_IMPLICIT_EXTERN_C
1018 else if (!prototype_p (f1)
1019 && (DECL_EXTERN_C_P (olddecl)
1020 && DECL_IN_SYSTEM_HEADER (olddecl)
1021 && !DECL_CLASS_SCOPE_P (olddecl))
1022 && (DECL_EXTERN_C_P (newdecl)
1023 && DECL_IN_SYSTEM_HEADER (newdecl)
1024 && !DECL_CLASS_SCOPE_P (newdecl)))
1026 types_match = self_promoting_args_p (p2);
1027 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1029 #endif
1030 else
1031 types_match =
1032 compparms (p1, p2)
1033 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1034 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1035 || comp_type_attributes (TREE_TYPE (newdecl),
1036 TREE_TYPE (olddecl)) != 0);
1038 else
1039 types_match = 0;
1041 /* The decls dont match if they correspond to two different versions
1042 of the same function. Disallow extern "C" functions to be
1043 versions for now. */
1044 if (types_match
1045 && !DECL_EXTERN_C_P (newdecl)
1046 && !DECL_EXTERN_C_P (olddecl)
1047 && targetm.target_option.function_versions (newdecl, olddecl))
1049 /* Mark functions as versions if necessary. Modify the mangled decl
1050 name if necessary. */
1051 if (DECL_FUNCTION_VERSIONED (newdecl)
1052 && DECL_FUNCTION_VERSIONED (olddecl))
1053 return 0;
1054 if (!DECL_FUNCTION_VERSIONED (newdecl))
1056 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1057 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1058 mangle_decl (newdecl);
1060 if (!DECL_FUNCTION_VERSIONED (olddecl))
1062 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1063 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1064 mangle_decl (olddecl);
1066 record_function_versions (olddecl, newdecl);
1067 return 0;
1070 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1072 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1073 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1075 if (TREE_CODE (newres) != TREE_CODE (oldres))
1076 return 0;
1078 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1079 DECL_TEMPLATE_PARMS (olddecl)))
1080 return 0;
1082 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1083 types_match = same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres));
1084 else
1085 types_match = decls_match (oldres, newres);
1087 // If the types of the underlying templates match, compare
1088 // the template constraints. The declarations could differ there.
1089 if (types_match)
1090 types_match = equivalently_constrained (olddecl, newdecl);
1092 else
1094 /* Need to check scope for variable declaration (VAR_DECL).
1095 For typedef (TYPE_DECL), scope is ignored. */
1096 if (VAR_P (newdecl)
1097 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1098 /* [dcl.link]
1099 Two declarations for an object with C language linkage
1100 with the same name (ignoring the namespace that qualify
1101 it) that appear in different namespace scopes refer to
1102 the same object. */
1103 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1104 return 0;
1106 if (TREE_TYPE (newdecl) == error_mark_node)
1107 types_match = TREE_TYPE (olddecl) == error_mark_node;
1108 else if (TREE_TYPE (olddecl) == NULL_TREE)
1109 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1110 else if (TREE_TYPE (newdecl) == NULL_TREE)
1111 types_match = 0;
1112 else
1113 types_match = comptypes (TREE_TYPE (newdecl),
1114 TREE_TYPE (olddecl),
1115 COMPARE_REDECLARATION);
1119 return types_match;
1122 /* If NEWDECL is `static' and an `extern' was seen previously,
1123 warn about it. OLDDECL is the previous declaration.
1125 Note that this does not apply to the C++ case of declaring
1126 a variable `extern const' and then later `const'.
1128 Don't complain about built-in functions, since they are beyond
1129 the user's control. */
1131 void
1132 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1134 if (TREE_CODE (newdecl) == TYPE_DECL
1135 || TREE_CODE (newdecl) == TEMPLATE_DECL
1136 || TREE_CODE (newdecl) == CONST_DECL
1137 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1138 return;
1140 /* Don't get confused by static member functions; that's a different
1141 use of `static'. */
1142 if (TREE_CODE (newdecl) == FUNCTION_DECL
1143 && DECL_STATIC_FUNCTION_P (newdecl))
1144 return;
1146 /* If the old declaration was `static', or the new one isn't, then
1147 everything is OK. */
1148 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1149 return;
1151 /* It's OK to declare a builtin function as `static'. */
1152 if (TREE_CODE (olddecl) == FUNCTION_DECL
1153 && DECL_ARTIFICIAL (olddecl))
1154 return;
1156 if (permerror (input_location,
1157 "%qD was declared %<extern%> and later %<static%>", newdecl))
1158 inform (input_location, "previous declaration of %q+D", olddecl);
1161 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1162 function templates. If their exception specifications do not
1163 match, issue a diagnostic. */
1165 static void
1166 check_redeclaration_exception_specification (tree new_decl,
1167 tree old_decl)
1169 tree new_type;
1170 tree old_type;
1171 tree new_exceptions;
1172 tree old_exceptions;
1174 new_type = TREE_TYPE (new_decl);
1175 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1176 old_type = TREE_TYPE (old_decl);
1177 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1179 /* [except.spec]
1181 If any declaration of a function has an exception-specification,
1182 all declarations, including the definition and an explicit
1183 specialization, of that function shall have an
1184 exception-specification with the same set of type-ids. */
1185 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1186 && ! DECL_IS_BUILTIN (old_decl)
1187 && flag_exceptions
1188 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1190 error ("declaration of %qF has a different exception specifier",
1191 new_decl);
1192 error ("from previous declaration %q+F", old_decl);
1196 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1197 Otherwise issue diagnostics. */
1199 static bool
1200 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1202 old_decl = STRIP_TEMPLATE (old_decl);
1203 new_decl = STRIP_TEMPLATE (new_decl);
1204 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1205 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1206 return true;
1207 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1208 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1209 return true;
1210 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1212 if (DECL_BUILT_IN (old_decl))
1214 /* Hide a built-in declaration. */
1215 DECL_DECLARED_CONSTEXPR_P (old_decl)
1216 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1217 return true;
1219 /* 7.1.5 [dcl.constexpr]
1220 Note: An explicit specialization can differ from the template
1221 declaration with respect to the constexpr specifier. */
1222 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1223 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1224 return true;
1226 error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1227 error ("from previous declaration %q+D", old_decl);
1228 return false;
1230 return true;
1233 // If OLDDECL and NEWDECL are concept declarations with the same type
1234 // (i.e., and template parameters), but different requirements,
1235 // emit diagnostics and return true. Otherwise, return false.
1236 static inline bool
1237 check_concept_refinement (tree olddecl, tree newdecl)
1239 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1240 return false;
1242 // TODO: This isn't currently possible, but it will almost certainly
1243 // change with variable templates.
1244 tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1245 tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1246 if (TREE_CODE (d1) != TREE_CODE (d2))
1247 return false;
1249 tree t1 = TREE_TYPE (d1);
1250 tree t2 = TREE_TYPE (d2);
1251 if (TREE_CODE (d1) == FUNCTION_DECL)
1253 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1254 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1255 DECL_TEMPLATE_PARMS (newdecl))
1256 && !equivalently_constrained (olddecl, newdecl))
1258 error ("cannot specialize concept %q#D", olddecl);
1259 return true;
1262 return false;
1266 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1267 && lookup_attribute ("gnu_inline", \
1268 DECL_ATTRIBUTES (fn)))
1270 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1271 If the redeclaration is invalid, a diagnostic is issued, and the
1272 error_mark_node is returned. Otherwise, OLDDECL is returned.
1274 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1275 returned.
1277 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1279 tree
1280 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1282 unsigned olddecl_uid = DECL_UID (olddecl);
1283 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1284 int new_defines_function = 0;
1285 tree new_template_info;
1287 if (newdecl == olddecl)
1288 return olddecl;
1290 types_match = decls_match (newdecl, olddecl);
1292 /* If either the type of the new decl or the type of the old decl is an
1293 error_mark_node, then that implies that we have already issued an
1294 error (earlier) for some bogus type specification, and in that case,
1295 it is rather pointless to harass the user with yet more error message
1296 about the same declaration, so just pretend the types match here. */
1297 if (TREE_TYPE (newdecl) == error_mark_node
1298 || TREE_TYPE (olddecl) == error_mark_node)
1299 return error_mark_node;
1301 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1302 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1304 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1305 && TREE_CODE (olddecl) != TEMPLATE_DECL
1306 && check_raw_literal_operator (olddecl))
1307 error ("literal operator template %q+D conflicts with"
1308 " raw literal operator %qD", newdecl, olddecl);
1309 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1310 && TREE_CODE (olddecl) == TEMPLATE_DECL
1311 && check_raw_literal_operator (newdecl))
1312 error ("raw literal operator %q+D conflicts with"
1313 " literal operator template %qD", newdecl, olddecl);
1316 if (DECL_P (olddecl)
1317 && TREE_CODE (newdecl) == FUNCTION_DECL
1318 && TREE_CODE (olddecl) == FUNCTION_DECL
1319 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1321 if (DECL_DECLARED_INLINE_P (newdecl)
1322 && DECL_UNINLINABLE (newdecl)
1323 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1324 /* Already warned elsewhere. */;
1325 else if (DECL_DECLARED_INLINE_P (olddecl)
1326 && DECL_UNINLINABLE (olddecl)
1327 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1328 /* Already warned. */;
1329 else if (DECL_DECLARED_INLINE_P (newdecl)
1330 && DECL_UNINLINABLE (olddecl)
1331 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1333 if (warning (OPT_Wattributes, "function %q+D redeclared as inline",
1334 newdecl))
1335 inform (input_location, "previous declaration of %q+D "
1336 "with attribute noinline", olddecl);
1338 else if (DECL_DECLARED_INLINE_P (olddecl)
1339 && DECL_UNINLINABLE (newdecl)
1340 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1342 if (warning (OPT_Wattributes, "function %q+D redeclared with "
1343 "attribute noinline", newdecl))
1344 inform (input_location, "previous declaration of %q+D was inline",
1345 olddecl);
1349 /* Check for redeclaration and other discrepancies. */
1350 if (TREE_CODE (olddecl) == FUNCTION_DECL
1351 && DECL_ARTIFICIAL (olddecl))
1353 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1354 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1356 /* Avoid warnings redeclaring built-ins which have not been
1357 explicitly declared. */
1358 if (DECL_ANTICIPATED (olddecl))
1359 return NULL_TREE;
1361 /* If you declare a built-in or predefined function name as static,
1362 the old definition is overridden, but optionally warn this was a
1363 bad choice of name. */
1364 if (! TREE_PUBLIC (newdecl))
1366 warning (OPT_Wshadow,
1367 DECL_BUILT_IN (olddecl)
1368 ? G_("shadowing built-in function %q#D")
1369 : G_("shadowing library function %q#D"), olddecl);
1370 /* Discard the old built-in function. */
1371 return NULL_TREE;
1373 /* If the built-in is not ansi, then programs can override
1374 it even globally without an error. */
1375 else if (! DECL_BUILT_IN (olddecl))
1376 warning (0, "library function %q#D redeclared as non-function %q#D",
1377 olddecl, newdecl);
1378 else
1380 error ("declaration of %q#D", newdecl);
1381 error ("conflicts with built-in declaration %q#D",
1382 olddecl);
1384 return NULL_TREE;
1386 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1388 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1389 error_at (DECL_SOURCE_LOCATION (newdecl),
1390 "redeclaration of %<pragma omp declare reduction%>");
1391 error_at (DECL_SOURCE_LOCATION (olddecl),
1392 "previous %<pragma omp declare reduction%> declaration");
1393 return error_mark_node;
1395 else if (!types_match)
1397 /* Avoid warnings redeclaring built-ins which have not been
1398 explicitly declared. */
1399 if (DECL_ANTICIPATED (olddecl))
1401 /* Deal with fileptr_type_node. FILE type is not known
1402 at the time we create the builtins. */
1403 tree t1, t2;
1405 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1406 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1407 t1 || t2;
1408 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1409 if (!t1 || !t2)
1410 break;
1411 else if (TREE_VALUE (t2) == fileptr_type_node)
1413 tree t = TREE_VALUE (t1);
1415 if (TYPE_PTR_P (t)
1416 && TYPE_NAME (TREE_TYPE (t))
1417 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1418 == get_identifier ("FILE")
1419 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1421 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1423 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1424 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1425 types_match = decls_match (newdecl, olddecl);
1426 if (types_match)
1427 return duplicate_decls (newdecl, olddecl,
1428 newdecl_is_friend);
1429 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1432 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1433 break;
1435 else if ((DECL_EXTERN_C_P (newdecl)
1436 && DECL_EXTERN_C_P (olddecl))
1437 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1438 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1440 /* A near match; override the builtin. */
1442 if (TREE_PUBLIC (newdecl))
1444 warning (0, "new declaration %q#D", newdecl);
1445 warning (0, "ambiguates built-in declaration %q#D",
1446 olddecl);
1448 else
1449 warning (OPT_Wshadow,
1450 DECL_BUILT_IN (olddecl)
1451 ? G_("shadowing built-in function %q#D")
1452 : G_("shadowing library function %q#D"), olddecl);
1454 else
1455 /* Discard the old built-in function. */
1456 return NULL_TREE;
1458 /* Replace the old RTL to avoid problems with inlining. */
1459 COPY_DECL_RTL (newdecl, olddecl);
1461 /* Even if the types match, prefer the new declarations type for
1462 built-ins which have not been explicitly declared, for
1463 exception lists, etc... */
1464 else if (DECL_IS_BUILTIN (olddecl))
1466 tree type = TREE_TYPE (newdecl);
1467 tree attribs = (*targetm.merge_type_attributes)
1468 (TREE_TYPE (olddecl), type);
1470 type = cp_build_type_attribute_variant (type, attribs);
1471 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1474 /* If a function is explicitly declared "throw ()", propagate that to
1475 the corresponding builtin. */
1476 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1477 && DECL_ANTICIPATED (olddecl)
1478 && TREE_NOTHROW (newdecl)
1479 && !TREE_NOTHROW (olddecl))
1481 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1482 tree tmpdecl = builtin_decl_explicit (fncode);
1483 if (tmpdecl && tmpdecl != olddecl && types_match)
1484 TREE_NOTHROW (tmpdecl) = 1;
1487 /* Whether or not the builtin can throw exceptions has no
1488 bearing on this declarator. */
1489 TREE_NOTHROW (olddecl) = 0;
1491 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1493 /* If a builtin function is redeclared as `static', merge
1494 the declarations, but make the original one static. */
1495 DECL_THIS_STATIC (olddecl) = 1;
1496 TREE_PUBLIC (olddecl) = 0;
1498 /* Make the old declaration consistent with the new one so
1499 that all remnants of the builtin-ness of this function
1500 will be banished. */
1501 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1502 COPY_DECL_RTL (newdecl, olddecl);
1505 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1507 /* C++ Standard, 3.3, clause 4:
1508 "[Note: a namespace name or a class template name must be unique
1509 in its declarative region (7.3.2, clause 14). ]" */
1510 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1511 && TREE_CODE (newdecl) != NAMESPACE_DECL
1512 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1513 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1514 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1515 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1517 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1518 && TREE_CODE (newdecl) != TYPE_DECL)
1519 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1520 && TREE_CODE (olddecl) != TYPE_DECL))
1522 /* We do nothing special here, because C++ does such nasty
1523 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1524 get shadowed, and know that if we need to find a TYPE_DECL
1525 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1526 slot of the identifier. */
1527 return NULL_TREE;
1530 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1531 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1532 || (TREE_CODE (olddecl) == FUNCTION_DECL
1533 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1534 return NULL_TREE;
1537 error ("%q#D redeclared as different kind of symbol", newdecl);
1538 if (TREE_CODE (olddecl) == TREE_LIST)
1539 olddecl = TREE_VALUE (olddecl);
1540 inform (input_location, "previous declaration of %q+#D", olddecl);
1542 return error_mark_node;
1544 else if (!types_match)
1546 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1547 /* These are certainly not duplicate declarations; they're
1548 from different scopes. */
1549 return NULL_TREE;
1551 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1553 /* The name of a class template may not be declared to refer to
1554 any other template, class, function, object, namespace, value,
1555 or type in the same scope. */
1556 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1557 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1559 error ("declaration of template %q#D", newdecl);
1560 error ("conflicts with previous declaration %q+#D", olddecl);
1561 return error_mark_node;
1563 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1564 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1565 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1566 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1567 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1568 DECL_TEMPLATE_PARMS (olddecl))
1569 /* Template functions can be disambiguated by
1570 return type. */
1571 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1572 TREE_TYPE (TREE_TYPE (olddecl)))
1573 // Template functions can also be disambiguated by
1574 // constraints.
1575 && equivalently_constrained (olddecl, newdecl))
1577 error ("new declaration %q#D", newdecl);
1578 error ("ambiguates old declaration %q+#D", olddecl);
1580 else if (check_concept_refinement (olddecl, newdecl))
1582 return error_mark_node;
1584 return NULL_TREE;
1586 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1588 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1590 error ("declaration of C function %q#D conflicts with",
1591 newdecl);
1592 error ("previous declaration %q+#D here", olddecl);
1593 return NULL_TREE;
1595 /* For function versions, params and types match, but they
1596 are not ambiguous. */
1597 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1598 && !DECL_FUNCTION_VERSIONED (olddecl))
1599 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1600 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1602 error ("new declaration %q#D", newdecl);
1603 error ("ambiguates old declaration %q+#D", olddecl);
1604 return error_mark_node;
1606 else
1607 return NULL_TREE;
1609 else
1611 error ("conflicting declaration %q#D", newdecl);
1612 inform (input_location,
1613 "%q+D has a previous declaration as %q#D", olddecl, olddecl);
1614 return error_mark_node;
1617 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1618 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1619 && (!DECL_TEMPLATE_INFO (newdecl)
1620 || (DECL_TI_TEMPLATE (newdecl)
1621 != DECL_TI_TEMPLATE (olddecl))))
1622 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1623 && (!DECL_TEMPLATE_INFO (olddecl)
1624 || (DECL_TI_TEMPLATE (olddecl)
1625 != DECL_TI_TEMPLATE (newdecl))))))
1626 /* It's OK to have a template specialization and a non-template
1627 with the same type, or to have specializations of two
1628 different templates with the same type. Note that if one is a
1629 specialization, and the other is an instantiation of the same
1630 template, that we do not exit at this point. That situation
1631 can occur if we instantiate a template class, and then
1632 specialize one of its methods. This situation is valid, but
1633 the declarations must be merged in the usual way. */
1634 return NULL_TREE;
1635 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1636 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1637 && !DECL_USE_TEMPLATE (newdecl))
1638 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1639 && !DECL_USE_TEMPLATE (olddecl))))
1640 /* One of the declarations is a template instantiation, and the
1641 other is not a template at all. That's OK. */
1642 return NULL_TREE;
1643 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1645 /* In [namespace.alias] we have:
1647 In a declarative region, a namespace-alias-definition can be
1648 used to redefine a namespace-alias declared in that declarative
1649 region to refer only to the namespace to which it already
1650 refers.
1652 Therefore, if we encounter a second alias directive for the same
1653 alias, we can just ignore the second directive. */
1654 if (DECL_NAMESPACE_ALIAS (newdecl)
1655 && (DECL_NAMESPACE_ALIAS (newdecl)
1656 == DECL_NAMESPACE_ALIAS (olddecl)))
1657 return olddecl;
1658 /* [namespace.alias]
1660 A namespace-name or namespace-alias shall not be declared as
1661 the name of any other entity in the same declarative region.
1662 A namespace-name defined at global scope shall not be
1663 declared as the name of any other entity in any global scope
1664 of the program. */
1665 error ("declaration of namespace %qD conflicts with", newdecl);
1666 error ("previous declaration of namespace %q+D here", olddecl);
1667 return error_mark_node;
1669 else
1671 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1672 if (errmsg)
1674 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1675 if (DECL_NAME (olddecl) != NULL_TREE)
1676 inform (input_location,
1677 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1678 ? G_("%q+#D previously defined here")
1679 : G_("%q+#D previously declared here"), olddecl);
1680 return error_mark_node;
1682 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1683 && DECL_INITIAL (olddecl) != NULL_TREE
1684 && !prototype_p (TREE_TYPE (olddecl))
1685 && prototype_p (TREE_TYPE (newdecl)))
1687 /* Prototype decl follows defn w/o prototype. */
1688 warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1689 warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1690 "follows non-prototype definition here");
1692 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1693 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1695 /* [dcl.link]
1696 If two declarations of the same function or object
1697 specify different linkage-specifications ..., the program
1698 is ill-formed.... Except for functions with C++ linkage,
1699 a function declaration without a linkage specification
1700 shall not precede the first linkage specification for
1701 that function. A function can be declared without a
1702 linkage specification after an explicit linkage
1703 specification has been seen; the linkage explicitly
1704 specified in the earlier declaration is not affected by
1705 such a function declaration.
1707 DR 563 raises the question why the restrictions on
1708 functions should not also apply to objects. Older
1709 versions of G++ silently ignore the linkage-specification
1710 for this example:
1712 namespace N {
1713 extern int i;
1714 extern "C" int i;
1717 which is clearly wrong. Therefore, we now treat objects
1718 like functions. */
1719 if (current_lang_depth () == 0)
1721 /* There is no explicit linkage-specification, so we use
1722 the linkage from the previous declaration. */
1723 if (!DECL_LANG_SPECIFIC (newdecl))
1724 retrofit_lang_decl (newdecl);
1725 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1727 else
1729 error ("previous declaration of %q+#D with %qL linkage",
1730 olddecl, DECL_LANGUAGE (olddecl));
1731 error ("conflicts with new declaration with %qL linkage",
1732 DECL_LANGUAGE (newdecl));
1736 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1738 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1740 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1741 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1742 int i = 1;
1744 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1745 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1747 for (; t1 && t1 != void_list_node;
1748 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1749 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1751 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1752 TREE_PURPOSE (t2)))
1754 permerror (input_location, "default argument given for parameter %d of %q#D",
1755 i, newdecl);
1756 permerror (input_location, "after previous specification in %q+#D", olddecl);
1758 else
1760 error ("default argument given for parameter %d of %q#D",
1761 i, newdecl);
1762 error ("after previous specification in %q+#D",
1763 olddecl);
1769 /* Do not merge an implicit typedef with an explicit one. In:
1771 class A;
1773 typedef class A A __attribute__ ((foo));
1775 the attribute should apply only to the typedef. */
1776 if (TREE_CODE (olddecl) == TYPE_DECL
1777 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1778 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1779 return NULL_TREE;
1781 /* If new decl is `static' and an `extern' was seen previously,
1782 warn about it. */
1783 warn_extern_redeclared_static (newdecl, olddecl);
1785 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1786 return error_mark_node;
1788 /* We have committed to returning 1 at this point. */
1789 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1791 /* Now that functions must hold information normally held
1792 by field decls, there is extra work to do so that
1793 declaration information does not get destroyed during
1794 definition. */
1795 if (DECL_VINDEX (olddecl))
1796 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1797 if (DECL_CONTEXT (olddecl))
1798 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1799 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1800 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1801 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1802 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1803 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1804 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1805 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1806 SET_OVERLOADED_OPERATOR_CODE
1807 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1808 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1810 /* Optionally warn about more than one declaration for the same
1811 name, but don't warn about a function declaration followed by a
1812 definition. */
1813 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1814 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1815 /* Don't warn about extern decl followed by definition. */
1816 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1817 /* Don't warn about friends, let add_friend take care of it. */
1818 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1819 /* Don't warn about declaration followed by specialization. */
1820 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1821 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1823 if (warning (OPT_Wredundant_decls,
1824 "redundant redeclaration of %qD in same scope",
1825 newdecl))
1826 inform (input_location, "previous declaration of %q+D", olddecl);
1829 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1830 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1832 if (DECL_DELETED_FN (newdecl))
1834 error ("deleted definition of %qD", newdecl);
1835 error ("after previous declaration %q+D", olddecl);
1837 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1841 /* Deal with C++: must preserve virtual function table size. */
1842 if (TREE_CODE (olddecl) == TYPE_DECL)
1844 tree newtype = TREE_TYPE (newdecl);
1845 tree oldtype = TREE_TYPE (olddecl);
1847 if (newtype != error_mark_node && oldtype != error_mark_node
1848 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1849 CLASSTYPE_FRIEND_CLASSES (newtype)
1850 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1852 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1855 /* Copy all the DECL_... slots specified in the new decl
1856 except for any that we copy here from the old type. */
1857 DECL_ATTRIBUTES (newdecl)
1858 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1860 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1862 tree old_result;
1863 tree new_result;
1864 old_result = DECL_TEMPLATE_RESULT (olddecl);
1865 new_result = DECL_TEMPLATE_RESULT (newdecl);
1866 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1867 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1868 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1869 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1871 DECL_ATTRIBUTES (old_result)
1872 = (*targetm.merge_decl_attributes) (old_result, new_result);
1874 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1876 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1877 && DECL_INITIAL (new_result))
1879 if (DECL_INITIAL (old_result))
1880 DECL_UNINLINABLE (old_result) = 1;
1881 else
1882 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1883 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1884 DECL_NOT_REALLY_EXTERN (old_result)
1885 = DECL_NOT_REALLY_EXTERN (new_result);
1886 DECL_INTERFACE_KNOWN (old_result)
1887 = DECL_INTERFACE_KNOWN (new_result);
1888 DECL_DECLARED_INLINE_P (old_result)
1889 = DECL_DECLARED_INLINE_P (new_result);
1890 DECL_DISREGARD_INLINE_LIMITS (old_result)
1891 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1894 else
1896 DECL_DECLARED_INLINE_P (old_result)
1897 |= DECL_DECLARED_INLINE_P (new_result);
1898 DECL_DISREGARD_INLINE_LIMITS (old_result)
1899 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1900 check_redeclaration_exception_specification (newdecl, olddecl);
1904 /* If the new declaration is a definition, update the file and
1905 line information on the declaration, and also make
1906 the old declaration the same definition. */
1907 if (DECL_INITIAL (new_result) != NULL_TREE)
1909 DECL_SOURCE_LOCATION (olddecl)
1910 = DECL_SOURCE_LOCATION (old_result)
1911 = DECL_SOURCE_LOCATION (newdecl);
1912 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1913 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1915 tree parm;
1916 DECL_ARGUMENTS (old_result)
1917 = DECL_ARGUMENTS (new_result);
1918 for (parm = DECL_ARGUMENTS (old_result); parm;
1919 parm = DECL_CHAIN (parm))
1920 DECL_CONTEXT (parm) = old_result;
1924 return olddecl;
1927 if (types_match)
1929 /* Automatically handles default parameters. */
1930 tree oldtype = TREE_TYPE (olddecl);
1931 tree newtype;
1933 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1934 maybe_instantiate_noexcept (olddecl);
1936 /* Merge the data types specified in the two decls. */
1937 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1939 /* If merge_types produces a non-typedef type, just use the old type. */
1940 if (TREE_CODE (newdecl) == TYPE_DECL
1941 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1942 newtype = oldtype;
1944 if (VAR_P (newdecl))
1946 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1947 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1948 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1949 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1950 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1951 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1953 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1954 if (DECL_LANG_SPECIFIC (olddecl)
1955 && CP_DECL_THREADPRIVATE_P (olddecl))
1957 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1958 if (!DECL_LANG_SPECIFIC (newdecl))
1959 retrofit_lang_decl (newdecl);
1961 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1962 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1966 /* Do this after calling `merge_types' so that default
1967 parameters don't confuse us. */
1968 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1969 check_redeclaration_exception_specification (newdecl, olddecl);
1970 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1972 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1973 check_default_args (newdecl);
1975 /* Lay the type out, unless already done. */
1976 if (! same_type_p (newtype, oldtype)
1977 && TREE_TYPE (newdecl) != error_mark_node
1978 && !(processing_template_decl && uses_template_parms (newdecl)))
1979 layout_type (TREE_TYPE (newdecl));
1981 if ((VAR_P (newdecl)
1982 || TREE_CODE (newdecl) == PARM_DECL
1983 || TREE_CODE (newdecl) == RESULT_DECL
1984 || TREE_CODE (newdecl) == FIELD_DECL
1985 || TREE_CODE (newdecl) == TYPE_DECL)
1986 && !(processing_template_decl && uses_template_parms (newdecl)))
1987 layout_decl (newdecl, 0);
1989 /* Merge the type qualifiers. */
1990 if (TREE_READONLY (newdecl))
1991 TREE_READONLY (olddecl) = 1;
1992 if (TREE_THIS_VOLATILE (newdecl))
1993 TREE_THIS_VOLATILE (olddecl) = 1;
1994 if (TREE_NOTHROW (newdecl))
1995 TREE_NOTHROW (olddecl) = 1;
1997 /* Merge deprecatedness. */
1998 if (TREE_DEPRECATED (newdecl))
1999 TREE_DEPRECATED (olddecl) = 1;
2001 /* Preserve function specific target and optimization options */
2002 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2004 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2005 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2006 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2007 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2009 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2010 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2011 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2012 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2015 /* Merge the initialization information. */
2016 if (DECL_INITIAL (newdecl) == NULL_TREE
2017 && DECL_INITIAL (olddecl) != NULL_TREE)
2019 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2020 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2021 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2023 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2024 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2028 /* Merge the section attribute.
2029 We want to issue an error if the sections conflict but that must be
2030 done later in decl_attributes since we are called before attributes
2031 are assigned. */
2032 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
2033 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
2035 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2037 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2038 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2039 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2040 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2041 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2042 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2043 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2044 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2045 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2046 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2047 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2048 /* Keep the old RTL. */
2049 COPY_DECL_RTL (olddecl, newdecl);
2051 else if (VAR_P (newdecl)
2052 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2054 /* Keep the old RTL. We cannot keep the old RTL if the old
2055 declaration was for an incomplete object and the new
2056 declaration is not since many attributes of the RTL will
2057 change. */
2058 COPY_DECL_RTL (olddecl, newdecl);
2061 /* If cannot merge, then use the new type and qualifiers,
2062 and don't preserve the old rtl. */
2063 else
2065 /* Clean out any memory we had of the old declaration. */
2066 tree oldstatic = value_member (olddecl, static_aggregates);
2067 if (oldstatic)
2068 TREE_VALUE (oldstatic) = error_mark_node;
2070 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2071 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2072 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2073 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2076 /* Merge the storage class information. */
2077 merge_weak (newdecl, olddecl);
2079 if (DECL_ONE_ONLY (olddecl))
2080 DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
2082 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2083 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2084 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2085 if (! DECL_EXTERNAL (olddecl))
2086 DECL_EXTERNAL (newdecl) = 0;
2088 new_template_info = NULL_TREE;
2089 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2091 bool new_redefines_gnu_inline = false;
2093 if (new_defines_function
2094 && ((DECL_INTERFACE_KNOWN (olddecl)
2095 && TREE_CODE (olddecl) == FUNCTION_DECL)
2096 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2097 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2098 == FUNCTION_DECL))))
2100 tree fn = olddecl;
2102 if (TREE_CODE (fn) == TEMPLATE_DECL)
2103 fn = DECL_TEMPLATE_RESULT (olddecl);
2105 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2108 if (!new_redefines_gnu_inline)
2110 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2111 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2112 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2114 DECL_TEMPLATE_INSTANTIATED (newdecl)
2115 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2116 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2118 /* If the OLDDECL is an instantiation and/or specialization,
2119 then the NEWDECL must be too. But, it may not yet be marked
2120 as such if the caller has created NEWDECL, but has not yet
2121 figured out that it is a redeclaration. */
2122 if (!DECL_USE_TEMPLATE (newdecl))
2123 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2125 /* Don't really know how much of the language-specific
2126 values we should copy from old to new. */
2127 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2128 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2129 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2130 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2132 if (LANG_DECL_HAS_MIN (newdecl))
2134 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2135 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2136 if (DECL_TEMPLATE_INFO (newdecl))
2137 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2138 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2140 /* Only functions have these fields. */
2141 if (DECL_DECLARES_FUNCTION_P (newdecl))
2143 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2144 olddecl_friend = DECL_FRIEND_P (olddecl);
2145 hidden_friend = (DECL_ANTICIPATED (olddecl)
2146 && DECL_HIDDEN_FRIEND_P (olddecl)
2147 && newdecl_is_friend);
2148 DECL_BEFRIENDING_CLASSES (newdecl)
2149 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2150 DECL_BEFRIENDING_CLASSES (olddecl));
2151 /* DECL_THUNKS is only valid for virtual functions,
2152 otherwise it is a DECL_FRIEND_CONTEXT. */
2153 if (DECL_VIRTUAL_P (newdecl))
2154 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2156 /* Only variables have this field. */
2157 else if (VAR_P (newdecl)
2158 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2159 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2162 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2164 tree parm;
2166 /* Merge parameter attributes. */
2167 tree oldarg, newarg;
2168 for (oldarg = DECL_ARGUMENTS(olddecl),
2169 newarg = DECL_ARGUMENTS(newdecl);
2170 oldarg && newarg;
2171 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2172 DECL_ATTRIBUTES (newarg)
2173 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2174 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2177 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2178 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2180 /* If newdecl is not a specialization, then it is not a
2181 template-related function at all. And that means that we
2182 should have exited above, returning 0. */
2183 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2185 if (DECL_ODR_USED (olddecl))
2186 /* From [temp.expl.spec]:
2188 If a template, a member template or the member of a class
2189 template is explicitly specialized then that
2190 specialization shall be declared before the first use of
2191 that specialization that would cause an implicit
2192 instantiation to take place, in every translation unit in
2193 which such a use occurs. */
2194 error ("explicit specialization of %qD after first use",
2195 olddecl);
2197 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2199 /* Don't propagate visibility from the template to the
2200 specialization here. We'll do that in determine_visibility if
2201 appropriate. */
2202 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2204 /* [temp.expl.spec/14] We don't inline explicit specialization
2205 just because the primary template says so. */
2207 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2208 the always_inline attribute. */
2209 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2210 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2212 if (DECL_DECLARED_INLINE_P (newdecl))
2213 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2214 else
2215 DECL_ATTRIBUTES (newdecl)
2216 = remove_attribute ("always_inline",
2217 DECL_ATTRIBUTES (newdecl));
2220 else if (new_defines_function && DECL_INITIAL (olddecl))
2222 /* Never inline re-defined extern inline functions.
2223 FIXME: this could be better handled by keeping both
2224 function as separate declarations. */
2225 DECL_UNINLINABLE (newdecl) = 1;
2227 else
2229 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2230 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2232 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2234 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2235 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2237 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2238 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2239 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2240 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2243 /* Preserve abstractness on cloned [cd]tors. */
2244 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2246 /* Update newdecl's parms to point at olddecl. */
2247 for (parm = DECL_ARGUMENTS (newdecl); parm;
2248 parm = DECL_CHAIN (parm))
2249 DECL_CONTEXT (parm) = olddecl;
2251 if (! types_match)
2253 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2254 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2255 COPY_DECL_RTL (newdecl, olddecl);
2257 if (! types_match || new_defines_function)
2259 /* These need to be copied so that the names are available.
2260 Note that if the types do match, we'll preserve inline
2261 info and other bits, but if not, we won't. */
2262 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2263 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2265 /* If redeclaring a builtin function, it stays built in
2266 if newdecl is a gnu_inline definition, or if newdecl is just
2267 a declaration. */
2268 if (DECL_BUILT_IN (olddecl)
2269 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2271 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2272 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2273 /* If we're keeping the built-in definition, keep the rtl,
2274 regardless of declaration matches. */
2275 COPY_DECL_RTL (olddecl, newdecl);
2276 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2278 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2279 switch (fncode)
2281 /* If a compatible prototype of these builtin functions
2282 is seen, assume the runtime implements it with the
2283 expected semantics. */
2284 case BUILT_IN_STPCPY:
2285 if (builtin_decl_explicit_p (fncode))
2286 set_builtin_decl_implicit_p (fncode, true);
2287 break;
2288 default:
2289 break;
2293 if (new_defines_function)
2294 /* If defining a function declared with other language
2295 linkage, use the previously declared language linkage. */
2296 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2297 else if (types_match)
2299 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2300 /* Don't clear out the arguments if we're just redeclaring a
2301 function. */
2302 if (DECL_ARGUMENTS (olddecl))
2303 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2306 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2307 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2309 /* Now preserve various other info from the definition. */
2310 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2311 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2312 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2313 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2315 /* Warn about conflicting visibility specifications. */
2316 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2317 && DECL_VISIBILITY_SPECIFIED (newdecl)
2318 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2320 warning_at (input_location, OPT_Wattributes,
2321 "%q+D: visibility attribute ignored because it", newdecl);
2322 warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2323 "conflicts with previous declaration here");
2325 /* Choose the declaration which specified visibility. */
2326 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2328 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2329 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2331 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2332 so keep this behavior. */
2333 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2335 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2336 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2338 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2339 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2341 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2342 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2344 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2345 if (TREE_CODE (newdecl) == FIELD_DECL)
2346 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2348 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2349 with that from NEWDECL below. */
2350 if (DECL_LANG_SPECIFIC (olddecl))
2352 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2353 != DECL_LANG_SPECIFIC (newdecl));
2354 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2357 /* Merge the USED information. */
2358 if (TREE_USED (olddecl))
2359 TREE_USED (newdecl) = 1;
2360 else if (TREE_USED (newdecl))
2361 TREE_USED (olddecl) = 1;
2362 if (VAR_P (newdecl))
2364 if (DECL_READ_P (olddecl))
2365 DECL_READ_P (newdecl) = 1;
2366 else if (DECL_READ_P (newdecl))
2367 DECL_READ_P (olddecl) = 1;
2369 if (DECL_PRESERVE_P (olddecl))
2370 DECL_PRESERVE_P (newdecl) = 1;
2371 else if (DECL_PRESERVE_P (newdecl))
2372 DECL_PRESERVE_P (olddecl) = 1;
2374 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2375 to olddecl and deleted. */
2376 if (TREE_CODE (newdecl) == FUNCTION_DECL
2377 && DECL_FUNCTION_VERSIONED (olddecl))
2379 /* Set the flag for newdecl so that it gets copied to olddecl. */
2380 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2381 /* newdecl will be purged after copying to olddecl and is no longer
2382 a version. */
2383 delete_function_version (newdecl);
2386 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2388 int function_size;
2390 function_size = sizeof (struct tree_decl_common);
2392 memcpy ((char *) olddecl + sizeof (struct tree_common),
2393 (char *) newdecl + sizeof (struct tree_common),
2394 function_size - sizeof (struct tree_common));
2396 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2397 (char *) newdecl + sizeof (struct tree_decl_common),
2398 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2399 if (new_template_info)
2400 /* If newdecl is a template instantiation, it is possible that
2401 the following sequence of events has occurred:
2403 o A friend function was declared in a class template. The
2404 class template was instantiated.
2406 o The instantiation of the friend declaration was
2407 recorded on the instantiation list, and is newdecl.
2409 o Later, however, instantiate_class_template called pushdecl
2410 on the newdecl to perform name injection. But, pushdecl in
2411 turn called duplicate_decls when it discovered that another
2412 declaration of a global function with the same name already
2413 existed.
2415 o Here, in duplicate_decls, we decided to clobber newdecl.
2417 If we're going to do that, we'd better make sure that
2418 olddecl, and not newdecl, is on the list of
2419 instantiations so that if we try to do the instantiation
2420 again we won't get the clobbered declaration. */
2421 reregister_specialization (newdecl,
2422 new_template_info,
2423 olddecl);
2425 else
2427 size_t size = tree_code_size (TREE_CODE (olddecl));
2428 memcpy ((char *) olddecl + sizeof (struct tree_common),
2429 (char *) newdecl + sizeof (struct tree_common),
2430 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2431 switch (TREE_CODE (olddecl))
2433 case LABEL_DECL:
2434 case VAR_DECL:
2435 case RESULT_DECL:
2436 case PARM_DECL:
2437 case FIELD_DECL:
2438 case TYPE_DECL:
2439 case CONST_DECL:
2441 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2442 (char *) newdecl + sizeof (struct tree_decl_common),
2443 size - sizeof (struct tree_decl_common)
2444 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2446 break;
2447 default:
2448 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2449 (char *) newdecl + sizeof (struct tree_decl_common),
2450 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2451 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2452 break;
2455 DECL_UID (olddecl) = olddecl_uid;
2456 if (olddecl_friend)
2457 DECL_FRIEND_P (olddecl) = 1;
2458 if (hidden_friend)
2460 DECL_ANTICIPATED (olddecl) = 1;
2461 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2464 /* NEWDECL contains the merged attribute lists.
2465 Update OLDDECL to be the same. */
2466 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2468 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2469 so that encode_section_info has a chance to look at the new decl
2470 flags and attributes. */
2471 if (DECL_RTL_SET_P (olddecl)
2472 && (TREE_CODE (olddecl) == FUNCTION_DECL
2473 || (VAR_P (olddecl)
2474 && TREE_STATIC (olddecl))))
2475 make_decl_rtl (olddecl);
2477 /* The NEWDECL will no longer be needed. Because every out-of-class
2478 declaration of a member results in a call to duplicate_decls,
2479 freeing these nodes represents in a significant savings. */
2480 ggc_free (newdecl);
2482 return olddecl;
2485 /* Return zero if the declaration NEWDECL is valid
2486 when the declaration OLDDECL (assumed to be for the same name)
2487 has already been seen.
2488 Otherwise return an error message format string with a %s
2489 where the identifier should go. */
2491 static const char *
2492 redeclaration_error_message (tree newdecl, tree olddecl)
2494 if (TREE_CODE (newdecl) == TYPE_DECL)
2496 /* Because C++ can put things into name space for free,
2497 constructs like "typedef struct foo { ... } foo"
2498 would look like an erroneous redeclaration. */
2499 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2500 return NULL;
2501 else
2502 return G_("redefinition of %q#D");
2504 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2506 /* If this is a pure function, its olddecl will actually be
2507 the original initialization to `0' (which we force to call
2508 abort()). Don't complain about redefinition in this case. */
2509 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2510 && DECL_INITIAL (olddecl) == NULL_TREE)
2511 return NULL;
2513 /* If both functions come from different namespaces, this is not
2514 a redeclaration - this is a conflict with a used function. */
2515 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2516 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2517 && ! decls_match (olddecl, newdecl))
2518 return G_("%qD conflicts with used function");
2520 /* We'll complain about linkage mismatches in
2521 warn_extern_redeclared_static. */
2523 /* Defining the same name twice is no good. */
2524 if (DECL_INITIAL (olddecl) != NULL_TREE
2525 && DECL_INITIAL (newdecl) != NULL_TREE)
2527 if (DECL_NAME (olddecl) == NULL_TREE)
2528 return G_("%q#D not declared in class");
2529 else if (!GNU_INLINE_P (olddecl)
2530 || GNU_INLINE_P (newdecl))
2531 return G_("redefinition of %q#D");
2534 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2536 bool olda = GNU_INLINE_P (olddecl);
2537 bool newa = GNU_INLINE_P (newdecl);
2539 if (olda != newa)
2541 if (newa)
2542 return G_("%q+D redeclared inline with "
2543 "%<gnu_inline%> attribute");
2544 else
2545 return G_("%q+D redeclared inline without "
2546 "%<gnu_inline%> attribute");
2550 check_abi_tag_redeclaration
2551 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2552 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2554 return NULL;
2556 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2558 tree nt, ot;
2560 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2562 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2563 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2564 return G_("redefinition of %q#D");
2565 return NULL;
2568 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2569 || (DECL_TEMPLATE_RESULT (newdecl)
2570 == DECL_TEMPLATE_RESULT (olddecl)))
2571 return NULL;
2573 nt = DECL_TEMPLATE_RESULT (newdecl);
2574 if (DECL_TEMPLATE_INFO (nt))
2575 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2576 ot = DECL_TEMPLATE_RESULT (olddecl);
2577 if (DECL_TEMPLATE_INFO (ot))
2578 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2579 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2580 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2581 return G_("redefinition of %q#D");
2583 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2585 bool olda = GNU_INLINE_P (ot);
2586 bool newa = GNU_INLINE_P (nt);
2588 if (olda != newa)
2590 if (newa)
2591 return G_("%q+D redeclared inline with "
2592 "%<gnu_inline%> attribute");
2593 else
2594 return G_("%q+D redeclared inline without "
2595 "%<gnu_inline%> attribute");
2599 /* Core issue #226 (C++0x):
2601 If a friend function template declaration specifies a
2602 default template-argument, that declaration shall be a
2603 definition and shall be the only declaration of the
2604 function template in the translation unit. */
2605 if ((cxx_dialect != cxx98)
2606 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2607 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2608 /*is_primary=*/true,
2609 /*is_partial=*/false,
2610 /*is_friend_decl=*/2))
2611 return G_("redeclaration of friend %q#D "
2612 "may not have default template arguments");
2614 return NULL;
2616 else if (VAR_P (newdecl)
2617 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2618 && (! DECL_LANG_SPECIFIC (olddecl)
2619 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2620 || DECL_THREAD_LOCAL_P (newdecl)))
2622 /* Only variables can be thread-local, and all declarations must
2623 agree on this property. */
2624 if (DECL_THREAD_LOCAL_P (newdecl))
2625 return G_("thread-local declaration of %q#D follows "
2626 "non-thread-local declaration");
2627 else
2628 return G_("non-thread-local declaration of %q#D follows "
2629 "thread-local declaration");
2631 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2633 /* The objects have been declared at namespace scope. If either
2634 is a member of an anonymous union, then this is an invalid
2635 redeclaration. For example:
2637 int i;
2638 union { int i; };
2640 is invalid. */
2641 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2642 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2643 return G_("redeclaration of %q#D");
2644 /* If at least one declaration is a reference, there is no
2645 conflict. For example:
2647 int i = 3;
2648 extern int i;
2650 is valid. */
2651 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2652 return NULL;
2653 /* Reject two definitions. */
2654 return G_("redefinition of %q#D");
2656 else
2658 /* Objects declared with block scope: */
2659 /* Reject two definitions, and reject a definition
2660 together with an external reference. */
2661 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2662 return G_("redeclaration of %q#D");
2663 return NULL;
2667 /* Hash and equality functions for the named_label table. */
2669 static hashval_t
2670 named_label_entry_hash (const void *data)
2672 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2673 return DECL_UID (ent->label_decl);
2676 static int
2677 named_label_entry_eq (const void *a, const void *b)
2679 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2680 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2681 return ent_a->label_decl == ent_b->label_decl;
2684 /* Create a new label, named ID. */
2686 static tree
2687 make_label_decl (tree id, int local_p)
2689 struct named_label_entry *ent;
2690 void **slot;
2691 tree decl;
2693 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2695 DECL_CONTEXT (decl) = current_function_decl;
2696 DECL_MODE (decl) = VOIDmode;
2697 C_DECLARED_LABEL_FLAG (decl) = local_p;
2699 /* Say where one reference is to the label, for the sake of the
2700 error if it is not defined. */
2701 DECL_SOURCE_LOCATION (decl) = input_location;
2703 /* Record the fact that this identifier is bound to this label. */
2704 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2706 /* Create the label htab for the function on demand. */
2707 if (!named_labels)
2708 named_labels = htab_create_ggc (13, named_label_entry_hash,
2709 named_label_entry_eq, NULL);
2711 /* Record this label on the list of labels used in this function.
2712 We do this before calling make_label_decl so that we get the
2713 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2714 ent = ggc_alloc_cleared_named_label_entry ();
2715 ent->label_decl = decl;
2717 slot = htab_find_slot (named_labels, ent, INSERT);
2718 gcc_assert (*slot == NULL);
2719 *slot = ent;
2721 return decl;
2724 /* Look for a label named ID in the current function. If one cannot
2725 be found, create one. (We keep track of used, but undefined,
2726 labels, and complain about them at the end of a function.) */
2728 static tree
2729 lookup_label_1 (tree id)
2731 tree decl;
2733 /* You can't use labels at global scope. */
2734 if (current_function_decl == NULL_TREE)
2736 error ("label %qE referenced outside of any function", id);
2737 return NULL_TREE;
2740 /* See if we've already got this label. */
2741 decl = IDENTIFIER_LABEL_VALUE (id);
2742 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2743 return decl;
2745 decl = make_label_decl (id, /*local_p=*/0);
2746 return decl;
2749 /* Wrapper for lookup_label_1. */
2751 tree
2752 lookup_label (tree id)
2754 tree ret;
2755 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2756 ret = lookup_label_1 (id);
2757 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2758 return ret;
2761 /* Declare a local label named ID. */
2763 tree
2764 declare_local_label (tree id)
2766 tree decl;
2767 cp_label_binding bind;
2769 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2770 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2771 bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
2773 decl = make_label_decl (id, /*local_p=*/1);
2774 bind.label = decl;
2775 vec_safe_push (current_binding_level->shadowed_labels, bind);
2777 return decl;
2780 /* Returns nonzero if it is ill-formed to jump past the declaration of
2781 DECL. Returns 2 if it's also a real problem. */
2783 static int
2784 decl_jump_unsafe (tree decl)
2786 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2787 with automatic storage duration is not in scope to a point where it is
2788 in scope is ill-formed unless the variable has scalar type, class type
2789 with a trivial default constructor and a trivial destructor, a
2790 cv-qualified version of one of these types, or an array of one of the
2791 preceding types and is declared without an initializer (8.5). */
2792 tree type = TREE_TYPE (decl);
2794 if (!VAR_P (decl) || TREE_STATIC (decl)
2795 || type == error_mark_node)
2796 return 0;
2798 type = strip_array_types (type);
2800 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2801 return 2;
2803 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2804 return 1;
2806 return 0;
2809 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2811 static void
2812 identify_goto (tree decl, const location_t *locus)
2814 if (decl)
2815 permerror (input_location, "jump to label %qD", decl);
2816 else
2817 permerror (input_location, "jump to case label");
2818 if (locus)
2819 permerror (*locus, " from here");
2822 /* Check that a single previously seen jump to a newly defined label
2823 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2824 the jump context; NAMES are the names in scope in LEVEL at the jump
2825 context; LOCUS is the source position of the jump or 0. Returns
2826 true if all is well. */
2828 static bool
2829 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2830 bool exited_omp, const location_t *locus)
2832 cp_binding_level *b;
2833 bool identified = false, saw_eh = false, saw_omp = false;
2835 if (exited_omp)
2837 identify_goto (decl, locus);
2838 error (" exits OpenMP structured block");
2839 identified = saw_omp = true;
2842 for (b = current_binding_level; b ; b = b->level_chain)
2844 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2846 for (new_decls = b->names; new_decls != old_decls;
2847 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2848 : TREE_CHAIN (new_decls)))
2850 int problem = decl_jump_unsafe (new_decls);
2851 if (! problem)
2852 continue;
2854 if (!identified)
2856 identify_goto (decl, locus);
2857 identified = true;
2859 if (problem > 1)
2860 error (" crosses initialization of %q+#D", new_decls);
2861 else
2862 permerror (input_location, " enters scope of %q+#D which has "
2863 "non-trivial destructor", new_decls);
2866 if (b == level)
2867 break;
2868 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2870 if (!identified)
2872 identify_goto (decl, locus);
2873 identified = true;
2875 if (b->kind == sk_try)
2876 error (" enters try block");
2877 else
2878 error (" enters catch block");
2879 saw_eh = true;
2881 if (b->kind == sk_omp && !saw_omp)
2883 if (!identified)
2885 identify_goto (decl, locus);
2886 identified = true;
2888 error (" enters OpenMP structured block");
2889 saw_omp = true;
2893 return !identified;
2896 static void
2897 check_previous_goto (tree decl, struct named_label_use_entry *use)
2899 check_previous_goto_1 (decl, use->binding_level,
2900 use->names_in_scope, use->in_omp_scope,
2901 &use->o_goto_locus);
2904 static bool
2905 check_switch_goto (cp_binding_level* level)
2907 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2910 /* Check that a new jump to a label DECL is OK. Called by
2911 finish_goto_stmt. */
2913 void
2914 check_goto (tree decl)
2916 struct named_label_entry *ent, dummy;
2917 bool saw_catch = false, identified = false;
2918 tree bad;
2919 unsigned ix;
2921 /* We can't know where a computed goto is jumping.
2922 So we assume that it's OK. */
2923 if (TREE_CODE (decl) != LABEL_DECL)
2924 return;
2926 /* We didn't record any information about this label when we created it,
2927 and there's not much point since it's trivial to analyze as a return. */
2928 if (decl == cdtor_label)
2929 return;
2931 dummy.label_decl = decl;
2932 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2933 gcc_assert (ent != NULL);
2935 /* If the label hasn't been defined yet, defer checking. */
2936 if (! DECL_INITIAL (decl))
2938 struct named_label_use_entry *new_use;
2940 /* Don't bother creating another use if the last goto had the
2941 same data, and will therefore create the same set of errors. */
2942 if (ent->uses
2943 && ent->uses->names_in_scope == current_binding_level->names)
2944 return;
2946 new_use = ggc_alloc_named_label_use_entry ();
2947 new_use->binding_level = current_binding_level;
2948 new_use->names_in_scope = current_binding_level->names;
2949 new_use->o_goto_locus = input_location;
2950 new_use->in_omp_scope = false;
2952 new_use->next = ent->uses;
2953 ent->uses = new_use;
2954 return;
2957 if (ent->in_try_scope || ent->in_catch_scope
2958 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
2960 permerror (input_location, "jump to label %q+D", decl);
2961 permerror (input_location, " from here");
2962 identified = true;
2965 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
2967 int u = decl_jump_unsafe (bad);
2969 if (u > 1 && DECL_ARTIFICIAL (bad))
2971 /* Can't skip init of __exception_info. */
2972 error_at (DECL_SOURCE_LOCATION (bad), " enters catch block");
2973 saw_catch = true;
2975 else if (u > 1)
2976 error (" skips initialization of %q+#D", bad);
2977 else
2978 permerror (input_location, " enters scope of %q+#D which has "
2979 "non-trivial destructor", bad);
2982 if (ent->in_try_scope)
2983 error (" enters try block");
2984 else if (ent->in_catch_scope && !saw_catch)
2985 error (" enters catch block");
2987 if (ent->in_omp_scope)
2988 error (" enters OpenMP structured block");
2989 else if (flag_openmp)
2991 cp_binding_level *b;
2992 for (b = current_binding_level; b ; b = b->level_chain)
2994 if (b == ent->binding_level)
2995 break;
2996 if (b->kind == sk_omp)
2998 if (!identified)
3000 permerror (input_location, "jump to label %q+D", decl);
3001 permerror (input_location, " from here");
3002 identified = true;
3004 error (" exits OpenMP structured block");
3005 break;
3011 /* Check that a return is ok wrt OpenMP structured blocks.
3012 Called by finish_return_stmt. Returns true if all is well. */
3014 bool
3015 check_omp_return (void)
3017 cp_binding_level *b;
3018 for (b = current_binding_level; b ; b = b->level_chain)
3019 if (b->kind == sk_omp)
3021 error ("invalid exit from OpenMP structured block");
3022 return false;
3024 else if (b->kind == sk_function_parms)
3025 break;
3026 return true;
3029 /* Define a label, specifying the location in the source file.
3030 Return the LABEL_DECL node for the label. */
3032 static tree
3033 define_label_1 (location_t location, tree name)
3035 struct named_label_entry *ent, dummy;
3036 cp_binding_level *p;
3037 tree decl;
3039 decl = lookup_label (name);
3041 dummy.label_decl = decl;
3042 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
3043 gcc_assert (ent != NULL);
3045 /* After labels, make any new cleanups in the function go into their
3046 own new (temporary) binding contour. */
3047 for (p = current_binding_level;
3048 p->kind != sk_function_parms;
3049 p = p->level_chain)
3050 p->more_cleanups_ok = 0;
3052 if (name == get_identifier ("wchar_t"))
3053 permerror (input_location, "label named wchar_t");
3055 if (DECL_INITIAL (decl) != NULL_TREE)
3057 error ("duplicate label %qD", decl);
3058 return error_mark_node;
3060 else
3062 struct named_label_use_entry *use;
3064 /* Mark label as having been defined. */
3065 DECL_INITIAL (decl) = error_mark_node;
3066 /* Say where in the source. */
3067 DECL_SOURCE_LOCATION (decl) = location;
3069 ent->binding_level = current_binding_level;
3070 ent->names_in_scope = current_binding_level->names;
3072 for (use = ent->uses; use ; use = use->next)
3073 check_previous_goto (decl, use);
3074 ent->uses = NULL;
3077 return decl;
3080 /* Wrapper for define_label_1. */
3082 tree
3083 define_label (location_t location, tree name)
3085 tree ret;
3086 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3087 ret = define_label_1 (location, name);
3088 timevar_cond_stop (TV_NAME_LOOKUP, running);
3089 return ret;
3093 struct cp_switch
3095 cp_binding_level *level;
3096 struct cp_switch *next;
3097 /* The SWITCH_STMT being built. */
3098 tree switch_stmt;
3099 /* A splay-tree mapping the low element of a case range to the high
3100 element, or NULL_TREE if there is no high element. Used to
3101 determine whether or not a new case label duplicates an old case
3102 label. We need a tree, rather than simply a hash table, because
3103 of the GNU case range extension. */
3104 splay_tree cases;
3107 /* A stack of the currently active switch statements. The innermost
3108 switch statement is on the top of the stack. There is no need to
3109 mark the stack for garbage collection because it is only active
3110 during the processing of the body of a function, and we never
3111 collect at that point. */
3113 static struct cp_switch *switch_stack;
3115 /* Called right after a switch-statement condition is parsed.
3116 SWITCH_STMT is the switch statement being parsed. */
3118 void
3119 push_switch (tree switch_stmt)
3121 struct cp_switch *p = XNEW (struct cp_switch);
3122 p->level = current_binding_level;
3123 p->next = switch_stack;
3124 p->switch_stmt = switch_stmt;
3125 p->cases = splay_tree_new (case_compare, NULL, NULL);
3126 switch_stack = p;
3129 void
3130 pop_switch (void)
3132 struct cp_switch *cs = switch_stack;
3133 location_t switch_location;
3135 /* Emit warnings as needed. */
3136 switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
3137 if (!processing_template_decl)
3138 c_do_switch_warnings (cs->cases, switch_location,
3139 SWITCH_STMT_TYPE (cs->switch_stmt),
3140 SWITCH_STMT_COND (cs->switch_stmt));
3142 splay_tree_delete (cs->cases);
3143 switch_stack = switch_stack->next;
3144 free (cs);
3147 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3148 condition. Note that if TYPE and VALUE are already integral we don't
3149 really do the conversion because the language-independent
3150 warning/optimization code will work better that way. */
3152 static tree
3153 case_conversion (tree type, tree value)
3155 if (value == NULL_TREE)
3156 return value;
3158 if (cxx_dialect >= cxx11
3159 && (SCOPED_ENUM_P (type)
3160 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3162 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3163 type = type_promotes_to (type);
3164 value = (perform_implicit_conversion_flags
3165 (type, value, tf_warning_or_error,
3166 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3168 return cxx_constant_value (value);
3171 /* Note that we've seen a definition of a case label, and complain if this
3172 is a bad place for one. */
3174 tree
3175 finish_case_label (location_t loc, tree low_value, tree high_value)
3177 tree cond, r;
3178 cp_binding_level *p;
3179 tree type;
3181 if (processing_template_decl)
3183 tree label;
3185 /* For templates, just add the case label; we'll do semantic
3186 analysis at instantiation-time. */
3187 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3188 return add_stmt (build_case_label (low_value, high_value, label));
3191 /* Find the condition on which this switch statement depends. */
3192 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3193 if (cond && TREE_CODE (cond) == TREE_LIST)
3194 cond = TREE_VALUE (cond);
3196 if (!check_switch_goto (switch_stack->level))
3197 return error_mark_node;
3199 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3201 low_value = case_conversion (type, low_value);
3202 high_value = case_conversion (type, high_value);
3204 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3205 low_value, high_value);
3207 /* After labels, make any new cleanups in the function go into their
3208 own new (temporary) binding contour. */
3209 for (p = current_binding_level;
3210 p->kind != sk_function_parms;
3211 p = p->level_chain)
3212 p->more_cleanups_ok = 0;
3214 return r;
3217 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
3219 static hashval_t
3220 typename_hash (const void* k)
3222 hashval_t hash;
3223 const_tree const t = (const_tree) k;
3225 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3226 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3228 return hash;
3231 typedef struct typename_info {
3232 tree scope;
3233 tree name;
3234 tree template_id;
3235 bool enum_p;
3236 bool class_p;
3237 } typename_info;
3239 /* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
3240 really of type `typename_info*' */
3242 static int
3243 typename_compare (const void * k1, const void * k2)
3245 const_tree const t1 = (const_tree) k1;
3246 const typename_info *const t2 = (const typename_info *) k2;
3248 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3249 && TYPE_CONTEXT (t1) == t2->scope
3250 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3251 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3252 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3255 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3256 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3258 Returns the new TYPENAME_TYPE. */
3260 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3262 static tree
3263 build_typename_type (tree context, tree name, tree fullname,
3264 enum tag_types tag_type)
3266 tree t;
3267 tree d;
3268 typename_info ti;
3269 void **e;
3270 hashval_t hash;
3272 if (typename_htab == NULL)
3273 typename_htab = htab_create_ggc (61, &typename_hash,
3274 &typename_compare, NULL);
3276 ti.scope = FROB_CONTEXT (context);
3277 ti.name = name;
3278 ti.template_id = fullname;
3279 ti.enum_p = tag_type == enum_type;
3280 ti.class_p = (tag_type == class_type
3281 || tag_type == record_type
3282 || tag_type == union_type);
3283 hash = (htab_hash_pointer (ti.scope)
3284 ^ htab_hash_pointer (ti.name));
3286 /* See if we already have this type. */
3287 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3288 if (*e)
3289 t = (tree) *e;
3290 else
3292 /* Build the TYPENAME_TYPE. */
3293 t = cxx_make_type (TYPENAME_TYPE);
3294 TYPE_CONTEXT (t) = ti.scope;
3295 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3296 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3297 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3299 /* Build the corresponding TYPE_DECL. */
3300 d = build_decl (input_location, TYPE_DECL, name, t);
3301 TYPE_NAME (TREE_TYPE (d)) = d;
3302 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3303 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3304 DECL_ARTIFICIAL (d) = 1;
3306 /* Store it in the hash table. */
3307 *e = t;
3309 /* TYPENAME_TYPEs must always be compared structurally, because
3310 they may or may not resolve down to another type depending on
3311 the currently open classes. */
3312 SET_TYPE_STRUCTURAL_EQUALITY (t);
3315 return t;
3318 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3319 provided to name the type. Returns an appropriate type, unless an
3320 error occurs, in which case error_mark_node is returned. If we
3321 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3322 return that, rather than the _TYPE it corresponds to, in other
3323 cases we look through the type decl. If TF_ERROR is set, complain
3324 about errors, otherwise be quiet. */
3326 tree
3327 make_typename_type (tree context, tree name, enum tag_types tag_type,
3328 tsubst_flags_t complain)
3330 tree fullname;
3331 tree t;
3332 bool want_template;
3334 if (name == error_mark_node
3335 || context == NULL_TREE
3336 || context == error_mark_node)
3337 return error_mark_node;
3339 if (TYPE_P (name))
3341 if (!(TYPE_LANG_SPECIFIC (name)
3342 && (CLASSTYPE_IS_TEMPLATE (name)
3343 || CLASSTYPE_USE_TEMPLATE (name))))
3344 name = TYPE_IDENTIFIER (name);
3345 else
3346 /* Create a TEMPLATE_ID_EXPR for the type. */
3347 name = build_nt (TEMPLATE_ID_EXPR,
3348 CLASSTYPE_TI_TEMPLATE (name),
3349 CLASSTYPE_TI_ARGS (name));
3351 else if (TREE_CODE (name) == TYPE_DECL)
3352 name = DECL_NAME (name);
3354 fullname = name;
3356 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3358 name = TREE_OPERAND (name, 0);
3359 if (TREE_CODE (name) == TEMPLATE_DECL)
3360 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3361 else if (TREE_CODE (name) == OVERLOAD)
3363 if (complain & tf_error)
3364 error ("%qD is not a type", name);
3365 return error_mark_node;
3368 if (TREE_CODE (name) == TEMPLATE_DECL)
3370 if (complain & tf_error)
3371 error ("%qD used without template parameters", name);
3372 return error_mark_node;
3374 gcc_assert (identifier_p (name));
3375 gcc_assert (TYPE_P (context));
3377 if (!MAYBE_CLASS_TYPE_P (context))
3379 if (complain & tf_error)
3380 error ("%q#T is not a class", context);
3381 return error_mark_node;
3384 /* When the CONTEXT is a dependent type, NAME could refer to a
3385 dependent base class of CONTEXT. But look inside it anyway
3386 if CONTEXT is a currently open scope, in case it refers to a
3387 member of the current instantiation or a non-dependent base;
3388 lookup will stop when we hit a dependent base. */
3389 if (!dependent_scope_p (context))
3390 /* We should only set WANT_TYPE when we're a nested typename type.
3391 Then we can give better diagnostics if we find a non-type. */
3392 t = lookup_field (context, name, 2, /*want_type=*/true);
3393 else
3394 t = NULL_TREE;
3396 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3397 return build_typename_type (context, name, fullname, tag_type);
3399 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3401 if (!t)
3403 if (complain & tf_error)
3404 error (want_template ? G_("no class template named %q#T in %q#T")
3405 : G_("no type named %q#T in %q#T"), name, context);
3406 return error_mark_node;
3409 /* Pull out the template from an injected-class-name (or multiple). */
3410 if (want_template)
3411 t = maybe_get_template_decl_from_type_decl (t);
3413 if (TREE_CODE (t) == TREE_LIST)
3415 if (complain & tf_error)
3417 error ("lookup of %qT in %qT is ambiguous", name, context);
3418 print_candidates (t);
3420 return error_mark_node;
3423 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3425 if (complain & tf_error)
3426 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3427 context, name, t);
3428 return error_mark_node;
3430 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3432 if (complain & tf_error)
3433 error ("%<typename %T::%D%> names %q#T, which is not a type",
3434 context, name, t);
3435 return error_mark_node;
3438 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3439 return error_mark_node;
3441 /* If we are currently parsing a template and if T is a typedef accessed
3442 through CONTEXT then we need to remember and check access of T at
3443 template instantiation time. */
3444 add_typedef_to_current_template_for_access_check (t, context, input_location);
3446 if (want_template)
3447 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3448 NULL_TREE, context,
3449 /*entering_scope=*/0,
3450 tf_warning_or_error | tf_user);
3452 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3453 t = TREE_TYPE (t);
3455 maybe_record_typedef_use (t);
3457 return t;
3460 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3461 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3462 in which case error_mark_node is returned.
3464 If PARM_LIST is non-NULL, also make sure that the template parameter
3465 list of TEMPLATE_DECL matches.
3467 If COMPLAIN zero, don't complain about any errors that occur. */
3469 tree
3470 make_unbound_class_template (tree context, tree name, tree parm_list,
3471 tsubst_flags_t complain)
3473 tree t;
3474 tree d;
3476 if (TYPE_P (name))
3477 name = TYPE_IDENTIFIER (name);
3478 else if (DECL_P (name))
3479 name = DECL_NAME (name);
3480 gcc_assert (identifier_p (name));
3482 if (!dependent_type_p (context)
3483 || currently_open_class (context))
3485 tree tmpl = NULL_TREE;
3487 if (MAYBE_CLASS_TYPE_P (context))
3488 tmpl = lookup_field (context, name, 0, false);
3490 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3491 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3493 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3495 if (complain & tf_error)
3496 error ("no class template named %q#T in %q#T", name, context);
3497 return error_mark_node;
3500 if (parm_list
3501 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3503 if (complain & tf_error)
3505 error ("template parameters do not match template");
3506 error ("%q+D declared here", tmpl);
3508 return error_mark_node;
3511 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3512 complain))
3513 return error_mark_node;
3515 return tmpl;
3518 /* Build the UNBOUND_CLASS_TEMPLATE. */
3519 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3520 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3521 TREE_TYPE (t) = NULL_TREE;
3522 SET_TYPE_STRUCTURAL_EQUALITY (t);
3524 /* Build the corresponding TEMPLATE_DECL. */
3525 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3526 TYPE_NAME (TREE_TYPE (d)) = d;
3527 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3528 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3529 DECL_ARTIFICIAL (d) = 1;
3530 DECL_TEMPLATE_PARMS (d) = parm_list;
3532 return t;
3537 /* Push the declarations of builtin types into the namespace.
3538 RID_INDEX is the index of the builtin type in the array
3539 RID_POINTERS. NAME is the name used when looking up the builtin
3540 type. TYPE is the _TYPE node for the builtin type. */
3542 void
3543 record_builtin_type (enum rid rid_index,
3544 const char* name,
3545 tree type)
3547 tree rname = NULL_TREE, tname = NULL_TREE;
3548 tree tdecl = NULL_TREE;
3550 if ((int) rid_index < (int) RID_MAX)
3551 rname = ridpointers[(int) rid_index];
3552 if (name)
3553 tname = get_identifier (name);
3555 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3556 eliminated. Built-in types should not be looked up name; their
3557 names are keywords that the parser can recognize. However, there
3558 is code in c-common.c that uses identifier_global_value to look
3559 up built-in types by name. */
3560 if (tname)
3562 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3563 DECL_ARTIFICIAL (tdecl) = 1;
3564 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3566 if (rname)
3568 if (!tdecl)
3570 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3571 DECL_ARTIFICIAL (tdecl) = 1;
3573 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3576 if (!TYPE_NAME (type))
3577 TYPE_NAME (type) = tdecl;
3579 if (tdecl)
3580 debug_hooks->type_decl (tdecl, 0);
3583 /* Record one of the standard Java types.
3584 * Declare it as having the given NAME.
3585 * If SIZE > 0, it is the size of one of the integral types;
3586 * otherwise it is the negative of the size of one of the other types. */
3588 static tree
3589 record_builtin_java_type (const char* name, int size)
3591 tree type, decl;
3592 if (size > 0)
3594 type = build_nonstandard_integer_type (size, 0);
3595 type = build_distinct_type_copy (type);
3597 else if (size > -32)
3599 tree stype;
3600 /* "__java_char" or ""__java_boolean". */
3601 type = build_nonstandard_integer_type (-size, 1);
3602 type = build_distinct_type_copy (type);
3603 /* Get the signed type cached and attached to the unsigned type,
3604 so it doesn't get garbage-collected at "random" times,
3605 causing potential codegen differences out of different UIDs
3606 and different alias set numbers. */
3607 stype = build_nonstandard_integer_type (-size, 0);
3608 stype = build_distinct_type_copy (stype);
3609 TREE_CHAIN (type) = stype;
3610 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3612 else
3613 { /* "__java_float" or ""__java_double". */
3614 type = make_node (REAL_TYPE);
3615 TYPE_PRECISION (type) = - size;
3616 layout_type (type);
3618 record_builtin_type (RID_MAX, name, type);
3619 decl = TYPE_NAME (type);
3621 /* Suppress generate debug symbol entries for these types,
3622 since for normal C++ they are just clutter.
3623 However, push_lang_context undoes this if extern "Java" is seen. */
3624 DECL_IGNORED_P (decl) = 1;
3626 TYPE_FOR_JAVA (type) = 1;
3627 return type;
3630 /* Push a type into the namespace so that the back ends ignore it. */
3632 static void
3633 record_unknown_type (tree type, const char* name)
3635 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3636 TYPE_DECL, get_identifier (name), type));
3637 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3638 DECL_IGNORED_P (decl) = 1;
3639 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3640 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3641 TYPE_ALIGN (type) = 1;
3642 TYPE_USER_ALIGN (type) = 0;
3643 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3646 /* A string for which we should create an IDENTIFIER_NODE at
3647 startup. */
3649 typedef struct predefined_identifier
3651 /* The name of the identifier. */
3652 const char *const name;
3653 /* The place where the IDENTIFIER_NODE should be stored. */
3654 tree *const node;
3655 /* Nonzero if this is the name of a constructor or destructor. */
3656 const int ctor_or_dtor_p;
3657 } predefined_identifier;
3659 /* Create all the predefined identifiers. */
3661 static void
3662 initialize_predefined_identifiers (void)
3664 const predefined_identifier *pid;
3666 /* A table of identifiers to create at startup. */
3667 static const predefined_identifier predefined_identifiers[] = {
3668 { "C++", &lang_name_cplusplus, 0 },
3669 { "C", &lang_name_c, 0 },
3670 { "Java", &lang_name_java, 0 },
3671 /* Some of these names have a trailing space so that it is
3672 impossible for them to conflict with names written by users. */
3673 { "__ct ", &ctor_identifier, 1 },
3674 { "__base_ctor ", &base_ctor_identifier, 1 },
3675 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3676 { "__dt ", &dtor_identifier, 1 },
3677 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3678 { "__base_dtor ", &base_dtor_identifier, 1 },
3679 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3680 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3681 { "nelts", &nelts_identifier, 0 },
3682 { THIS_NAME, &this_identifier, 0 },
3683 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3684 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3685 { "_vptr", &vptr_identifier, 0 },
3686 { "__vtt_parm", &vtt_parm_identifier, 0 },
3687 { "::", &global_scope_name, 0 },
3688 { "std", &std_identifier, 0 },
3689 { NULL, NULL, 0 }
3692 for (pid = predefined_identifiers; pid->name; ++pid)
3694 *pid->node = get_identifier (pid->name);
3695 if (pid->ctor_or_dtor_p)
3696 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3700 /* Create the predefined scalar types of C,
3701 and some nodes representing standard constants (0, 1, (void *)0).
3702 Initialize the global binding level.
3703 Make definitions for built-in primitive functions. */
3705 void
3706 cxx_init_decl_processing (void)
3708 tree void_ftype;
3709 tree void_ftype_ptr;
3711 /* Create all the identifiers we need. */
3712 initialize_predefined_identifiers ();
3714 /* Create the global variables. */
3715 push_to_top_level ();
3717 current_function_decl = NULL_TREE;
3718 current_binding_level = NULL;
3719 /* Enter the global namespace. */
3720 gcc_assert (global_namespace == NULL_TREE);
3721 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3722 void_type_node);
3723 DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3724 TREE_PUBLIC (global_namespace) = 1;
3725 begin_scope (sk_namespace, global_namespace);
3727 if (flag_visibility_ms_compat)
3728 default_visibility = VISIBILITY_HIDDEN;
3730 /* Initially, C. */
3731 current_lang_name = lang_name_c;
3733 /* Create the `std' namespace. */
3734 push_namespace (std_identifier);
3735 std_node = current_namespace;
3736 pop_namespace ();
3738 c_common_nodes_and_builtins ();
3740 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3741 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3742 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3743 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3744 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3745 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3746 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3747 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3749 integer_two_node = build_int_cst (NULL_TREE, 2);
3751 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3752 truthvalue_type_node = boolean_type_node;
3753 truthvalue_false_node = boolean_false_node;
3754 truthvalue_true_node = boolean_true_node;
3756 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3757 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3758 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3760 #if 0
3761 record_builtin_type (RID_MAX, NULL, string_type_node);
3762 #endif
3764 delta_type_node = ptrdiff_type_node;
3765 vtable_index_type = ptrdiff_type_node;
3767 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3768 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3769 void_ftype_ptr = build_function_type_list (void_type_node,
3770 ptr_type_node, NULL_TREE);
3771 void_ftype_ptr
3772 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3774 /* C++ extensions */
3776 unknown_type_node = make_node (LANG_TYPE);
3777 record_unknown_type (unknown_type_node, "unknown type");
3779 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3780 TREE_TYPE (unknown_type_node) = unknown_type_node;
3782 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3783 result. */
3784 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3785 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3787 init_list_type_node = make_node (LANG_TYPE);
3788 record_unknown_type (init_list_type_node, "init list");
3791 /* Make sure we get a unique function type, so we can give
3792 its pointer type a name. (This wins for gdb.) */
3793 tree vfunc_type = make_node (FUNCTION_TYPE);
3794 TREE_TYPE (vfunc_type) = integer_type_node;
3795 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3796 layout_type (vfunc_type);
3798 vtable_entry_type = build_pointer_type (vfunc_type);
3800 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3802 vtbl_type_node
3803 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3804 layout_type (vtbl_type_node);
3805 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3806 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3807 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3808 layout_type (vtbl_ptr_type_node);
3809 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3811 push_namespace (get_identifier ("__cxxabiv1"));
3812 abi_node = current_namespace;
3813 pop_namespace ();
3815 global_type_node = make_node (LANG_TYPE);
3816 record_unknown_type (global_type_node, "global type");
3818 /* Now, C++. */
3819 current_lang_name = lang_name_cplusplus;
3822 tree newattrs, extvisattr;
3823 tree newtype, deltype;
3824 tree ptr_ftype_sizetype;
3825 tree new_eh_spec;
3827 ptr_ftype_sizetype
3828 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3829 if (cxx_dialect == cxx98)
3831 tree bad_alloc_id;
3832 tree bad_alloc_type_node;
3833 tree bad_alloc_decl;
3835 push_namespace (std_identifier);
3836 bad_alloc_id = get_identifier ("bad_alloc");
3837 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3838 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3839 bad_alloc_decl
3840 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3841 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3842 pop_namespace ();
3844 new_eh_spec
3845 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3847 else
3848 new_eh_spec = noexcept_false_spec;
3850 /* Ensure attribs.c is initialized. */
3851 init_attributes ();
3852 extvisattr = build_tree_list (get_identifier ("externally_visible"),
3853 NULL_TREE);
3854 newattrs = tree_cons (get_identifier ("alloc_size"),
3855 build_tree_list (NULL_TREE, integer_one_node),
3856 extvisattr);
3857 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3858 newtype = build_exception_variant (newtype, new_eh_spec);
3859 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3860 deltype = build_exception_variant (deltype, empty_except_spec);
3861 DECL_IS_OPERATOR_NEW (push_cp_library_fn (NEW_EXPR, newtype, 0)) = 1;
3862 DECL_IS_OPERATOR_NEW (push_cp_library_fn (VEC_NEW_EXPR, newtype, 0)) = 1;
3863 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
3864 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
3866 nullptr_type_node = make_node (NULLPTR_TYPE);
3867 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3868 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3869 TYPE_UNSIGNED (nullptr_type_node) = 1;
3870 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3871 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3872 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3873 nullptr_node = build_int_cst (nullptr_type_node, 0);
3876 abort_fndecl
3877 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
3878 ECF_NORETURN | ECF_NOTHROW);
3880 /* Perform other language dependent initializations. */
3881 init_class_processing ();
3882 init_rtti_processing ();
3883 init_template_processing ();
3885 if (flag_exceptions)
3886 init_exception_processing ();
3888 if (! supports_one_only ())
3889 flag_weak = 0;
3891 make_fname_decl = cp_make_fname_decl;
3892 start_fname_decls ();
3894 /* Show we use EH for cleanups. */
3895 if (flag_exceptions)
3896 using_eh_for_cleanups ();
3899 /* Generate an initializer for a function naming variable from
3900 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3901 filled in with the type of the init. */
3903 tree
3904 cp_fname_init (const char* name, tree *type_p)
3906 tree domain = NULL_TREE;
3907 tree type;
3908 tree init = NULL_TREE;
3909 size_t length = 0;
3911 if (name)
3913 length = strlen (name);
3914 domain = build_index_type (size_int (length));
3915 init = build_string (length + 1, name);
3918 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3919 type = build_cplus_array_type (type, domain);
3921 *type_p = type;
3923 if (init)
3924 TREE_TYPE (init) = type;
3925 else
3926 init = error_mark_node;
3928 return init;
3931 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3932 the decl, LOC is the location to give the decl, NAME is the
3933 initialization string and TYPE_DEP indicates whether NAME depended
3934 on the type of the function. We make use of that to detect
3935 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3936 at the point of first use, so we mustn't push the decl now. */
3938 static tree
3939 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3941 const char *const name = (type_dep && processing_template_decl
3942 ? NULL : fname_as_string (type_dep));
3943 tree type;
3944 tree init = cp_fname_init (name, &type);
3945 tree decl = build_decl (loc, VAR_DECL, id, type);
3947 if (name)
3948 free (CONST_CAST (char *, name));
3950 /* As we're using pushdecl_with_scope, we must set the context. */
3951 DECL_CONTEXT (decl) = current_function_decl;
3953 TREE_STATIC (decl) = 1;
3954 TREE_READONLY (decl) = 1;
3955 DECL_ARTIFICIAL (decl) = 1;
3957 TREE_USED (decl) = 1;
3959 if (current_function_decl)
3961 cp_binding_level *b = current_binding_level;
3962 if (b->kind == sk_function_parms)
3963 return error_mark_node;
3964 while (b->level_chain->kind != sk_function_parms)
3965 b = b->level_chain;
3966 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3967 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3968 LOOKUP_ONLYCONVERTING);
3970 else
3972 DECL_THIS_STATIC (decl) = true;
3973 pushdecl_top_level_and_finish (decl, init);
3976 return decl;
3979 static tree
3980 builtin_function_1 (tree decl, tree context, bool is_global)
3982 tree id = DECL_NAME (decl);
3983 const char *name = IDENTIFIER_POINTER (id);
3985 retrofit_lang_decl (decl);
3987 DECL_ARTIFICIAL (decl) = 1;
3988 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3989 SET_DECL_LANGUAGE (decl, lang_c);
3990 /* Runtime library routines are, by definition, available in an
3991 external shared object. */
3992 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3993 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3995 DECL_CONTEXT (decl) = context;
3997 if (is_global)
3998 pushdecl_top_level (decl);
3999 else
4000 pushdecl (decl);
4002 /* A function in the user's namespace should have an explicit
4003 declaration before it is used. Mark the built-in function as
4004 anticipated but not actually declared. */
4005 if (name[0] != '_' || name[1] != '_')
4006 DECL_ANTICIPATED (decl) = 1;
4007 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4009 size_t len = strlen (name);
4011 /* Treat __*_chk fortification functions as anticipated as well,
4012 unless they are __builtin_*. */
4013 if (len > strlen ("___chk")
4014 && memcmp (name + len - strlen ("_chk"),
4015 "_chk", strlen ("_chk") + 1) == 0)
4016 DECL_ANTICIPATED (decl) = 1;
4019 return decl;
4022 tree
4023 cxx_builtin_function (tree decl)
4025 tree id = DECL_NAME (decl);
4026 const char *name = IDENTIFIER_POINTER (id);
4027 /* All builtins that don't begin with an '_' should additionally
4028 go in the 'std' namespace. */
4029 if (name[0] != '_')
4031 tree decl2 = copy_node(decl);
4032 push_namespace (std_identifier);
4033 builtin_function_1 (decl2, std_node, false);
4034 pop_namespace ();
4037 return builtin_function_1 (decl, NULL_TREE, false);
4040 /* Like cxx_builtin_function, but guarantee the function is added to the global
4041 scope. This is to allow function specific options to add new machine
4042 dependent builtins when the target ISA changes via attribute((target(...)))
4043 which saves space on program startup if the program does not use non-generic
4044 ISAs. */
4046 tree
4047 cxx_builtin_function_ext_scope (tree decl)
4050 tree id = DECL_NAME (decl);
4051 const char *name = IDENTIFIER_POINTER (id);
4052 /* All builtins that don't begin with an '_' should additionally
4053 go in the 'std' namespace. */
4054 if (name[0] != '_')
4056 tree decl2 = copy_node(decl);
4057 push_namespace (std_identifier);
4058 builtin_function_1 (decl2, std_node, true);
4059 pop_namespace ();
4062 return builtin_function_1 (decl, NULL_TREE, true);
4065 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4066 function. Not called directly. */
4068 static tree
4069 build_library_fn (tree name, enum tree_code operator_code, tree type,
4070 int ecf_flags)
4072 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4073 DECL_EXTERNAL (fn) = 1;
4074 TREE_PUBLIC (fn) = 1;
4075 DECL_ARTIFICIAL (fn) = 1;
4076 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4077 SET_DECL_LANGUAGE (fn, lang_c);
4078 /* Runtime library routines are, by definition, available in an
4079 external shared object. */
4080 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4081 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4082 set_call_expr_flags (fn, ecf_flags);
4083 return fn;
4086 /* Returns the _DECL for a library function with C++ linkage. */
4088 static tree
4089 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4090 int ecf_flags)
4092 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4093 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4094 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4095 return fn;
4098 /* Like build_library_fn, but takes a C string instead of an
4099 IDENTIFIER_NODE. */
4101 tree
4102 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4104 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4107 /* Like build_cp_library_fn, but takes a C string instead of an
4108 IDENTIFIER_NODE. */
4110 tree
4111 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4113 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4114 ecf_flags);
4117 /* Like build_library_fn, but also pushes the function so that we will
4118 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
4119 may throw exceptions listed in RAISES. */
4121 tree
4122 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4124 tree fn;
4126 if (raises)
4127 type = build_exception_variant (type, raises);
4129 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4130 pushdecl_top_level (fn);
4131 return fn;
4134 /* Like build_cp_library_fn, but also pushes the function so that it
4135 will be found by normal lookup. */
4137 static tree
4138 push_cp_library_fn (enum tree_code operator_code, tree type,
4139 int ecf_flags)
4141 tree fn = build_cp_library_fn (ansi_opname (operator_code),
4142 operator_code,
4143 type, ecf_flags);
4144 pushdecl (fn);
4145 if (flag_tm)
4146 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4147 return fn;
4150 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4151 a FUNCTION_TYPE. */
4153 tree
4154 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4156 tree type = build_function_type (void_type_node, parmtypes);
4157 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4160 /* Like push_library_fn, but also note that this function throws
4161 and does not return. Used for __throw_foo and the like. */
4163 tree
4164 push_throw_library_fn (tree name, tree type)
4166 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4167 return fn;
4170 /* When we call finish_struct for an anonymous union, we create
4171 default copy constructors and such. But, an anonymous union
4172 shouldn't have such things; this function undoes the damage to the
4173 anonymous union type T.
4175 (The reason that we create the synthesized methods is that we don't
4176 distinguish `union { int i; }' from `typedef union { int i; } U'.
4177 The first is an anonymous union; the second is just an ordinary
4178 union type.) */
4180 void
4181 fixup_anonymous_aggr (tree t)
4183 tree *q;
4185 /* Wipe out memory of synthesized methods. */
4186 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4187 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4188 TYPE_HAS_COPY_CTOR (t) = 0;
4189 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4190 TYPE_HAS_COPY_ASSIGN (t) = 0;
4191 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4193 /* Splice the implicitly generated functions out of the TYPE_METHODS
4194 list. */
4195 q = &TYPE_METHODS (t);
4196 while (*q)
4198 if (DECL_ARTIFICIAL (*q))
4199 *q = TREE_CHAIN (*q);
4200 else
4201 q = &DECL_CHAIN (*q);
4204 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
4205 if (TYPE_METHODS (t))
4207 tree decl = TYPE_MAIN_DECL (t);
4209 if (TREE_CODE (t) != UNION_TYPE)
4210 error_at (DECL_SOURCE_LOCATION (decl),
4211 "an anonymous struct cannot have function members");
4212 else
4213 error_at (DECL_SOURCE_LOCATION (decl),
4214 "an anonymous union cannot have function members");
4217 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4218 assignment operators (because they cannot have these methods themselves).
4219 For anonymous unions this is already checked because they are not allowed
4220 in any union, otherwise we have to check it. */
4221 if (TREE_CODE (t) != UNION_TYPE)
4223 tree field, type;
4225 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4226 if (TREE_CODE (field) == FIELD_DECL)
4228 type = TREE_TYPE (field);
4229 if (CLASS_TYPE_P (type))
4231 if (TYPE_NEEDS_CONSTRUCTING (type))
4232 error ("member %q+#D with constructor not allowed "
4233 "in anonymous aggregate", field);
4234 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4235 error ("member %q+#D with destructor not allowed "
4236 "in anonymous aggregate", field);
4237 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4238 error ("member %q+#D with copy assignment operator "
4239 "not allowed in anonymous aggregate", field);
4245 /* Warn for an attribute located at LOCATION that appertains to the
4246 class type CLASS_TYPE that has not been properly placed after its
4247 class-key, in it class-specifier. */
4249 void
4250 warn_misplaced_attr_for_class_type (source_location location,
4251 tree class_type)
4253 gcc_assert (OVERLOAD_TYPE_P (class_type));
4255 warning_at (location, OPT_Wattributes,
4256 "attribute ignored in declaration "
4257 "of %q#T", class_type);
4258 inform (location,
4259 "attribute for %q#T must follow the %qs keyword",
4260 class_type, class_key_or_enum_as_string (class_type));
4263 /* Make sure that a declaration with no declarator is well-formed, i.e.
4264 just declares a tagged type or anonymous union.
4266 Returns the type declared; or NULL_TREE if none. */
4268 tree
4269 check_tag_decl (cp_decl_specifier_seq *declspecs,
4270 bool explicit_type_instantiation_p)
4272 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4273 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4274 /* If a class, struct, or enum type is declared by the DECLSPECS
4275 (i.e, if a class-specifier, enum-specifier, or non-typename
4276 elaborated-type-specifier appears in the DECLSPECS),
4277 DECLARED_TYPE is set to the corresponding type. */
4278 tree declared_type = NULL_TREE;
4279 bool error_p = false;
4281 if (declspecs->multiple_types_p)
4282 error ("multiple types in one declaration");
4283 else if (declspecs->redefined_builtin_type)
4285 if (!in_system_header)
4286 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4287 "redeclaration of C++ built-in type %qT",
4288 declspecs->redefined_builtin_type);
4289 return NULL_TREE;
4292 if (declspecs->type
4293 && TYPE_P (declspecs->type)
4294 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4295 && MAYBE_CLASS_TYPE_P (declspecs->type))
4296 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4297 declared_type = declspecs->type;
4298 else if (declspecs->type == error_mark_node)
4299 error_p = true;
4300 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4301 permerror (input_location, "declaration does not declare anything");
4302 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4304 error ("%<auto%> can only be specified for variables "
4305 "or function declarations");
4306 return error_mark_node;
4308 /* Check for an anonymous union. */
4309 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4310 && TYPE_ANONYMOUS_P (declared_type))
4312 /* 7/3 In a simple-declaration, the optional init-declarator-list
4313 can be omitted only when declaring a class (clause 9) or
4314 enumeration (7.2), that is, when the decl-specifier-seq contains
4315 either a class-specifier, an elaborated-type-specifier with
4316 a class-key (9.1), or an enum-specifier. In these cases and
4317 whenever a class-specifier or enum-specifier is present in the
4318 decl-specifier-seq, the identifiers in these specifiers are among
4319 the names being declared by the declaration (as class-name,
4320 enum-names, or enumerators, depending on the syntax). In such
4321 cases, and except for the declaration of an unnamed bit-field (9.6),
4322 the decl-specifier-seq shall introduce one or more names into the
4323 program, or shall redeclare a name introduced by a previous
4324 declaration. [Example:
4325 enum { }; // ill-formed
4326 typedef class { }; // ill-formed
4327 --end example] */
4328 if (saw_typedef)
4330 error ("missing type-name in typedef-declaration");
4331 return NULL_TREE;
4333 /* Anonymous unions are objects, so they can have specifiers. */;
4334 SET_ANON_AGGR_TYPE_P (declared_type);
4336 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4337 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4340 else
4342 if (decl_spec_seq_has_spec_p (declspecs, ds_inline)
4343 || decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4344 error ("%qs can only be specified for functions",
4345 decl_spec_seq_has_spec_p (declspecs, ds_inline)
4346 ? "inline" : "virtual");
4347 else if (saw_friend
4348 && (!current_class_type
4349 || current_scope () != current_class_type))
4350 error ("%<friend%> can only be specified inside a class");
4351 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4352 error ("%<explicit%> can only be specified for constructors");
4353 else if (declspecs->storage_class)
4354 error ("a storage class can only be specified for objects "
4355 "and functions");
4356 else if (decl_spec_seq_has_spec_p (declspecs, ds_const)
4357 || decl_spec_seq_has_spec_p (declspecs, ds_volatile)
4358 || decl_spec_seq_has_spec_p (declspecs, ds_restrict)
4359 || decl_spec_seq_has_spec_p (declspecs, ds_thread))
4360 error ("qualifiers can only be specified for objects "
4361 "and functions");
4362 else if (saw_typedef)
4363 warning (0, "%<typedef%> was ignored in this declaration");
4364 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4365 error ("%<constexpr%> cannot be used for type declarations");
4368 if (declspecs->attributes && warn_attributes && declared_type)
4370 location_t loc;
4371 if (!CLASS_TYPE_P (declared_type)
4372 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4373 /* For a non-template class, use the name location. */
4374 loc = location_of (declared_type);
4375 else
4376 /* For a template class (an explicit instantiation), use the
4377 current location. */
4378 loc = input_location;
4380 if (explicit_type_instantiation_p)
4381 /* [dcl.attr.grammar]/4:
4383 No attribute-specifier-seq shall appertain to an explicit
4384 instantiation. */
4386 warning_at (loc, OPT_Wattributes,
4387 "attribute ignored in explicit instantiation %q#T",
4388 declared_type);
4389 inform (loc,
4390 "no attribute can be applied to "
4391 "an explicit instantiation");
4393 else
4394 warn_misplaced_attr_for_class_type (loc, declared_type);
4397 return declared_type;
4400 /* Called when a declaration is seen that contains no names to declare.
4401 If its type is a reference to a structure, union or enum inherited
4402 from a containing scope, shadow that tag name for the current scope
4403 with a forward reference.
4404 If its type defines a new named structure or union
4405 or defines an enum, it is valid but we need not do anything here.
4406 Otherwise, it is an error.
4408 C++: may have to grok the declspecs to learn about static,
4409 complain for anonymous unions.
4411 Returns the TYPE declared -- or NULL_TREE if none. */
4413 tree
4414 shadow_tag (cp_decl_specifier_seq *declspecs)
4416 tree t = check_tag_decl (declspecs,
4417 /*explicit_type_instantiation_p=*/false);
4419 if (!t)
4420 return NULL_TREE;
4422 if (maybe_process_partial_specialization (t) == error_mark_node)
4423 return NULL_TREE;
4425 /* This is where the variables in an anonymous union are
4426 declared. An anonymous union declaration looks like:
4427 union { ... } ;
4428 because there is no declarator after the union, the parser
4429 sends that declaration here. */
4430 if (ANON_AGGR_TYPE_P (t))
4432 fixup_anonymous_aggr (t);
4434 if (TYPE_FIELDS (t))
4436 tree decl = grokdeclarator (/*declarator=*/NULL,
4437 declspecs, NORMAL, 0, NULL);
4438 finish_anon_union (decl);
4442 return t;
4445 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4447 tree
4448 groktypename (cp_decl_specifier_seq *type_specifiers,
4449 const cp_declarator *declarator,
4450 bool is_template_arg)
4452 tree attrs;
4453 tree type;
4454 enum decl_context context
4455 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4456 attrs = type_specifiers->attributes;
4457 type_specifiers->attributes = NULL_TREE;
4458 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4459 if (attrs && type != error_mark_node)
4461 if (CLASS_TYPE_P (type))
4462 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4463 "outside of definition", type);
4464 else if (MAYBE_CLASS_TYPE_P (type))
4465 /* A template type parameter or other dependent type. */
4466 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4467 "type %qT without an associated declaration", type);
4468 else
4469 cplus_decl_attributes (&type, attrs, 0);
4471 return type;
4474 /* Process a DECLARATOR for a function-scope variable declaration,
4475 namespace-scope variable declaration, or function declaration.
4476 (Function definitions go through start_function; class member
4477 declarations appearing in the body of the class go through
4478 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4479 If an error occurs, the error_mark_node is returned instead.
4481 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4482 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4483 for an explicitly defaulted function, or SD_DELETED for an explicitly
4484 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4485 implicitly initialized via a default constructor. ATTRIBUTES and
4486 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4488 The scope represented by the context of the returned DECL is pushed
4489 (if it is not the global namespace) and is assigned to
4490 *PUSHED_SCOPE_P. The caller is then responsible for calling
4491 pop_scope on *PUSHED_SCOPE_P if it is set. */
4493 tree
4494 start_decl (const cp_declarator *declarator,
4495 cp_decl_specifier_seq *declspecs,
4496 int initialized,
4497 tree attributes,
4498 tree prefix_attributes,
4499 tree *pushed_scope_p)
4501 tree decl;
4502 tree context;
4503 bool was_public;
4504 int flags;
4505 bool alias;
4507 *pushed_scope_p = NULL_TREE;
4509 /* An object declared as __attribute__((deprecated)) suppresses
4510 warnings of uses of other deprecated items. */
4511 if (lookup_attribute ("deprecated", attributes))
4512 deprecated_state = DEPRECATED_SUPPRESS;
4514 attributes = chainon (attributes, prefix_attributes);
4516 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4517 &attributes);
4519 deprecated_state = DEPRECATED_NORMAL;
4521 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4522 || decl == error_mark_node)
4523 return error_mark_node;
4525 context = CP_DECL_CONTEXT (decl);
4526 if (context != global_namespace)
4527 *pushed_scope_p = push_scope (context);
4529 if (initialized)
4530 /* Is it valid for this decl to have an initializer at all?
4531 If not, set INITIALIZED to zero, which will indirectly
4532 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4533 switch (TREE_CODE (decl))
4535 case TYPE_DECL:
4536 error ("typedef %qD is initialized (use decltype instead)", decl);
4537 return error_mark_node;
4539 case FUNCTION_DECL:
4540 if (initialized == SD_DELETED)
4541 /* We'll handle the rest of the semantics later, but we need to
4542 set this now so it's visible to duplicate_decls. */
4543 DECL_DELETED_FN (decl) = 1;
4544 break;
4546 default:
4547 break;
4550 if (initialized)
4552 if (! toplevel_bindings_p ()
4553 && DECL_EXTERNAL (decl))
4554 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4555 decl);
4556 DECL_EXTERNAL (decl) = 0;
4557 if (toplevel_bindings_p ())
4558 TREE_STATIC (decl) = 1;
4560 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4562 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4563 record_key_method_defined (decl);
4565 /* If this is a typedef that names the class for linkage purposes
4566 (7.1.3p8), apply any attributes directly to the type. */
4567 if (TREE_CODE (decl) == TYPE_DECL
4568 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4569 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4570 flags = ATTR_FLAG_TYPE_IN_PLACE;
4571 else
4572 flags = 0;
4574 /* Set attributes here so if duplicate decl, will have proper attributes. */
4575 cplus_decl_attributes (&decl, attributes, flags);
4577 /* Dllimported symbols cannot be defined. Static data members (which
4578 can be initialized in-class and dllimported) go through grokfield,
4579 not here, so we don't need to exclude those decls when checking for
4580 a definition. */
4581 if (initialized && DECL_DLLIMPORT_P (decl))
4583 error ("definition of %q#D is marked %<dllimport%>", decl);
4584 DECL_DLLIMPORT_P (decl) = 0;
4587 /* If #pragma weak was used, mark the decl weak now. */
4588 if (!processing_template_decl)
4589 maybe_apply_pragma_weak (decl);
4591 if (TREE_CODE (decl) == FUNCTION_DECL
4592 && DECL_DECLARED_INLINE_P (decl)
4593 && DECL_UNINLINABLE (decl)
4594 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4595 warning (0, "inline function %q+D given attribute noinline", decl);
4597 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4599 if (VAR_P (decl))
4601 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4602 if (field == NULL_TREE || !VAR_P (field))
4603 error ("%q#D is not a static member of %q#T", decl, context);
4604 else
4606 if (DECL_CONTEXT (field) != context)
4608 if (!same_type_p (DECL_CONTEXT (field), context))
4609 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4610 "to be defined as %<%T::%D%>",
4611 DECL_CONTEXT (field), DECL_NAME (decl),
4612 context, DECL_NAME (decl));
4613 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4615 /* Static data member are tricky; an in-class initialization
4616 still doesn't provide a definition, so the in-class
4617 declaration will have DECL_EXTERNAL set, but will have an
4618 initialization. Thus, duplicate_decls won't warn
4619 about this situation, and so we check here. */
4620 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4621 error ("duplicate initialization of %qD", decl);
4622 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4623 decl = field;
4624 if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4625 && !DECL_DECLARED_CONSTEXPR_P (field))
4626 error ("%qD declared %<constexpr%> outside its class", field);
4629 else
4631 tree field = check_classfn (context, decl,
4632 (processing_template_decl
4633 > template_class_depth (context))
4634 ? current_template_parms
4635 : NULL_TREE);
4636 if (field && field != error_mark_node
4637 && duplicate_decls (decl, field,
4638 /*newdecl_is_friend=*/false))
4639 decl = field;
4642 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4643 DECL_IN_AGGR_P (decl) = 0;
4644 /* Do not mark DECL as an explicit specialization if it was not
4645 already marked as an instantiation; a declaration should
4646 never be marked as a specialization unless we know what
4647 template is being specialized. */
4648 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4650 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4652 /* [temp.expl.spec] An explicit specialization of a static data
4653 member of a template is a definition if the declaration
4654 includes an initializer; otherwise, it is a declaration.
4656 We check for processing_specialization so this only applies
4657 to the new specialization syntax. */
4658 if (!initialized && processing_specialization)
4659 DECL_EXTERNAL (decl) = 1;
4662 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4663 /* Aliases are definitions. */
4664 && !alias)
4665 permerror (input_location, "declaration of %q#D outside of class is not definition",
4666 decl);
4669 was_public = TREE_PUBLIC (decl);
4671 /* Enter this declaration into the symbol table. */
4672 decl = maybe_push_decl (decl);
4674 if (processing_template_decl)
4675 decl = push_template_decl (decl);
4676 if (decl == error_mark_node)
4677 return error_mark_node;
4679 if (VAR_P (decl)
4680 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4681 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4683 /* This is a const variable with implicit 'static'. Set
4684 DECL_THIS_STATIC so we can tell it from variables that are
4685 !TREE_PUBLIC because of the anonymous namespace. */
4686 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4687 DECL_THIS_STATIC (decl) = 1;
4690 if (!processing_template_decl && VAR_P (decl))
4691 start_decl_1 (decl, initialized);
4693 return decl;
4696 /* Process the declaration of a variable DECL. INITIALIZED is true
4697 iff DECL is explicitly initialized. (INITIALIZED is false if the
4698 variable is initialized via an implicitly-called constructor.)
4699 This function must be called for ordinary variables (including, for
4700 example, implicit instantiations of templates), but must not be
4701 called for template declarations. */
4703 void
4704 start_decl_1 (tree decl, bool initialized)
4706 tree type;
4707 bool complete_p;
4708 bool aggregate_definition_p;
4710 gcc_assert (!processing_template_decl);
4712 if (error_operand_p (decl))
4713 return;
4715 gcc_assert (VAR_P (decl));
4717 type = TREE_TYPE (decl);
4718 complete_p = COMPLETE_TYPE_P (type);
4719 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4721 /* If an explicit initializer is present, or if this is a definition
4722 of an aggregate, then we need a complete type at this point.
4723 (Scalars are always complete types, so there is nothing to
4724 check.) This code just sets COMPLETE_P; errors (if necessary)
4725 are issued below. */
4726 if ((initialized || aggregate_definition_p)
4727 && !complete_p
4728 && COMPLETE_TYPE_P (complete_type (type)))
4730 complete_p = true;
4731 /* We will not yet have set TREE_READONLY on DECL if the type
4732 was "const", but incomplete, before this point. But, now, we
4733 have a complete type, so we can try again. */
4734 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4737 if (initialized)
4738 /* Is it valid for this decl to have an initializer at all? */
4740 /* Don't allow initializations for incomplete types except for
4741 arrays which might be completed by the initialization. */
4742 if (complete_p)
4743 ; /* A complete type is ok. */
4744 else if (type_uses_auto (type))
4745 ; /* An auto type is ok. */
4746 else if (TREE_CODE (type) != ARRAY_TYPE)
4748 error ("variable %q#D has initializer but incomplete type", decl);
4749 type = TREE_TYPE (decl) = error_mark_node;
4751 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4753 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4754 error ("elements of array %q#D have incomplete type", decl);
4755 /* else we already gave an error in start_decl. */
4758 else if (aggregate_definition_p && !complete_p)
4760 if (type_uses_auto (type))
4761 error ("declaration of %q#D has no initializer", decl);
4762 else
4763 error ("aggregate %q#D has incomplete type and cannot be defined",
4764 decl);
4765 /* Change the type so that assemble_variable will give
4766 DECL an rtl we can live with: (mem (const_int 0)). */
4767 type = TREE_TYPE (decl) = error_mark_node;
4770 /* Create a new scope to hold this declaration if necessary.
4771 Whether or not a new scope is necessary cannot be determined
4772 until after the type has been completed; if the type is a
4773 specialization of a class template it is not until after
4774 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4775 will be set correctly. */
4776 maybe_push_cleanup_level (type);
4779 /* Handle initialization of references. DECL, TYPE, and INIT have the
4780 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4781 but will be set to a new CLEANUP_STMT if a temporary is created
4782 that must be destroyed subsequently.
4784 Returns an initializer expression to use to initialize DECL, or
4785 NULL if the initialization can be performed statically.
4787 Quotes on semantics can be found in ARM 8.4.3. */
4789 static tree
4790 grok_reference_init (tree decl, tree type, tree init, int flags)
4792 if (init == NULL_TREE)
4794 if ((DECL_LANG_SPECIFIC (decl) == 0
4795 || DECL_IN_AGGR_P (decl) == 0)
4796 && ! DECL_THIS_EXTERN (decl))
4797 error ("%qD declared as reference but not initialized", decl);
4798 return NULL_TREE;
4801 if (TREE_CODE (init) == TREE_LIST)
4802 init = build_x_compound_expr_from_list (init, ELK_INIT,
4803 tf_warning_or_error);
4805 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4806 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4807 /* Note: default conversion is only called in very special cases. */
4808 init = decay_conversion (init, tf_warning_or_error);
4810 /* Convert INIT to the reference type TYPE. This may involve the
4811 creation of a temporary, whose lifetime must be the same as that
4812 of the reference. If so, a DECL_EXPR for the temporary will be
4813 added just after the DECL_EXPR for DECL. That's why we don't set
4814 DECL_INITIAL for local references (instead assigning to them
4815 explicitly); we need to allow the temporary to be initialized
4816 first. */
4817 return initialize_reference (type, init, flags,
4818 tf_warning_or_error);
4821 /* Designated initializers in arrays are not supported in GNU C++.
4822 The parser cannot detect this error since it does not know whether
4823 a given brace-enclosed initializer is for a class type or for an
4824 array. This function checks that CE does not use a designated
4825 initializer. If it does, an error is issued. Returns true if CE
4826 is valid, i.e., does not have a designated initializer. */
4828 static bool
4829 check_array_designated_initializer (constructor_elt *ce,
4830 unsigned HOST_WIDE_INT index)
4832 /* Designated initializers for array elements are not supported. */
4833 if (ce->index)
4835 /* The parser only allows identifiers as designated
4836 initializers. */
4837 if (ce->index == error_mark_node)
4839 error ("name used in a GNU-style designated "
4840 "initializer for an array");
4841 return false;
4843 else if (identifier_p (ce->index))
4845 error ("name %qD used in a GNU-style designated "
4846 "initializer for an array", ce->index);
4847 return false;
4850 ce->index = cxx_constant_value (ce->index);
4852 if (TREE_CODE (ce->index) == INTEGER_CST)
4854 /* A C99 designator is OK if it matches the current index. */
4855 if (TREE_INT_CST_LOW (ce->index) == index)
4856 return true;
4857 else
4858 sorry ("non-trivial designated initializers not supported");
4860 else
4861 gcc_unreachable ();
4863 return false;
4866 return true;
4869 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4870 array until we finish parsing the initializer. If that's the
4871 situation we're in, update DECL accordingly. */
4873 static void
4874 maybe_deduce_size_from_array_init (tree decl, tree init)
4876 tree type = TREE_TYPE (decl);
4878 if (TREE_CODE (type) == ARRAY_TYPE
4879 && TYPE_DOMAIN (type) == NULL_TREE
4880 && TREE_CODE (decl) != TYPE_DECL)
4882 /* do_default is really a C-ism to deal with tentative definitions.
4883 But let's leave it here to ease the eventual merge. */
4884 int do_default = !DECL_EXTERNAL (decl);
4885 tree initializer = init ? init : DECL_INITIAL (decl);
4886 int failure = 0;
4888 /* Check that there are no designated initializers in INIT, as
4889 those are not supported in GNU C++, and as the middle-end
4890 will crash if presented with a non-numeric designated
4891 initializer. */
4892 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4894 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
4895 constructor_elt *ce;
4896 HOST_WIDE_INT i;
4897 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
4898 if (!check_array_designated_initializer (ce, i))
4899 failure = 1;
4902 if (!failure)
4904 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4905 do_default);
4906 if (failure == 1)
4908 error ("initializer fails to determine size of %qD", decl);
4910 else if (failure == 2)
4912 if (do_default)
4914 error ("array size missing in %qD", decl);
4916 /* If a `static' var's size isn't known, make it extern as
4917 well as static, so it does not get allocated. If it's not
4918 `static', then don't mark it extern; finish_incomplete_decl
4919 will give it a default size and it will get allocated. */
4920 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4921 DECL_EXTERNAL (decl) = 1;
4923 else if (failure == 3)
4925 error ("zero-size array %qD", decl);
4929 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4931 relayout_decl (decl);
4935 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4936 any appropriate error messages regarding the layout. */
4938 static void
4939 layout_var_decl (tree decl)
4941 tree type;
4943 type = TREE_TYPE (decl);
4944 if (type == error_mark_node)
4945 return;
4947 /* If we haven't already laid out this declaration, do so now.
4948 Note that we must not call complete type for an external object
4949 because it's type might involve templates that we are not
4950 supposed to instantiate yet. (And it's perfectly valid to say
4951 `extern X x' for some incomplete type `X'.) */
4952 if (!DECL_EXTERNAL (decl))
4953 complete_type (type);
4954 if (!DECL_SIZE (decl)
4955 && TREE_TYPE (decl) != error_mark_node
4956 && (COMPLETE_TYPE_P (type)
4957 || (TREE_CODE (type) == ARRAY_TYPE
4958 && !TYPE_DOMAIN (type)
4959 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4960 layout_decl (decl, 0);
4962 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4964 /* An automatic variable with an incomplete type: that is an error.
4965 Don't talk about array types here, since we took care of that
4966 message in grokdeclarator. */
4967 error ("storage size of %qD isn%'t known", decl);
4968 TREE_TYPE (decl) = error_mark_node;
4970 #if 0
4971 /* Keep this code around in case we later want to control debug info
4972 based on whether a type is "used". (jason 1999-11-11) */
4974 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4975 /* Let debugger know it should output info for this type. */
4976 note_debug_info_needed (ttype);
4978 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4979 note_debug_info_needed (DECL_CONTEXT (decl));
4980 #endif
4982 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4983 && DECL_SIZE (decl) != NULL_TREE
4984 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4986 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4987 constant_expression_warning (DECL_SIZE (decl));
4988 else
4990 error ("storage size of %qD isn%'t constant", decl);
4991 TREE_TYPE (decl) = error_mark_node;
4996 /* If a local static variable is declared in an inline function, or if
4997 we have a weak definition, we must endeavor to create only one
4998 instance of the variable at link-time. */
5000 void
5001 maybe_commonize_var (tree decl)
5003 /* Static data in a function with comdat linkage also has comdat
5004 linkage. */
5005 if (TREE_STATIC (decl)
5006 /* Don't mess with __FUNCTION__. */
5007 && ! DECL_ARTIFICIAL (decl)
5008 && DECL_FUNCTION_SCOPE_P (decl)
5009 && vague_linkage_p (DECL_CONTEXT (decl)))
5011 if (flag_weak)
5013 /* With weak symbols, we simply make the variable COMDAT;
5014 that will cause copies in multiple translations units to
5015 be merged. */
5016 comdat_linkage (decl);
5018 else
5020 if (DECL_INITIAL (decl) == NULL_TREE
5021 || DECL_INITIAL (decl) == error_mark_node)
5023 /* Without weak symbols, we can use COMMON to merge
5024 uninitialized variables. */
5025 TREE_PUBLIC (decl) = 1;
5026 DECL_COMMON (decl) = 1;
5028 else
5030 /* While for initialized variables, we must use internal
5031 linkage -- which means that multiple copies will not
5032 be merged. */
5033 TREE_PUBLIC (decl) = 0;
5034 DECL_COMMON (decl) = 0;
5035 warning_at (input_location, 0,
5036 "sorry: semantics of inline function static "
5037 "data %q+#D are wrong (you%'ll wind up "
5038 "with multiple copies)", decl);
5039 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5040 " you can work around this by removing "
5041 "the initializer");
5045 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
5046 /* Set it up again; we might have set DECL_INITIAL since the last
5047 time. */
5048 comdat_linkage (decl);
5051 /* Issue an error message if DECL is an uninitialized const variable. */
5053 static void
5054 check_for_uninitialized_const_var (tree decl)
5056 tree type = strip_array_types (TREE_TYPE (decl));
5058 /* ``Unless explicitly declared extern, a const object does not have
5059 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5060 7.1.6 */
5061 if (VAR_P (decl)
5062 && TREE_CODE (type) != REFERENCE_TYPE
5063 && CP_TYPE_CONST_P (type)
5064 && !DECL_INITIAL (decl))
5066 tree field = default_init_uninitialized_part (type);
5067 if (!field)
5068 return;
5070 permerror (DECL_SOURCE_LOCATION (decl),
5071 "uninitialized const %qD", decl);
5073 if (CLASS_TYPE_P (type))
5075 tree defaulted_ctor;
5077 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5078 "%q#T has no user-provided default constructor", type);
5079 defaulted_ctor = in_class_defaulted_default_constructor (type);
5080 if (defaulted_ctor)
5081 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5082 "constructor is not user-provided because it is "
5083 "explicitly defaulted in the class body");
5084 inform (0, "and the implicitly-defined constructor does not "
5085 "initialize %q+#D", field);
5090 /* Structure holding the current initializer being processed by reshape_init.
5091 CUR is a pointer to the current element being processed, END is a pointer
5092 after the last element present in the initializer. */
5093 typedef struct reshape_iterator_t
5095 constructor_elt *cur;
5096 constructor_elt *end;
5097 } reshape_iter;
5099 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5101 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5102 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5103 initialized. If there are no more such fields, the return value
5104 will be NULL. */
5106 tree
5107 next_initializable_field (tree field)
5109 while (field
5110 && (TREE_CODE (field) != FIELD_DECL
5111 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5112 || DECL_ARTIFICIAL (field)))
5113 field = DECL_CHAIN (field);
5115 return field;
5118 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5119 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5120 INTEGER_CST representing the size of the array minus one (the maximum index),
5121 or NULL_TREE if the array was declared without specifying the size. D is
5122 the iterator within the constructor. */
5124 static tree
5125 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5126 tsubst_flags_t complain)
5128 tree new_init;
5129 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5130 unsigned HOST_WIDE_INT max_index_cst = 0;
5131 unsigned HOST_WIDE_INT index;
5133 /* The initializer for an array is always a CONSTRUCTOR. */
5134 new_init = build_constructor (init_list_type_node, NULL);
5136 if (sized_array_p)
5138 /* Minus 1 is used for zero sized arrays. */
5139 if (integer_all_onesp (max_index))
5140 return new_init;
5142 if (host_integerp (max_index, 1))
5143 max_index_cst = tree_low_cst (max_index, 1);
5144 /* sizetype is sign extended, not zero extended. */
5145 else
5146 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
5150 /* Loop until there are no more initializers. */
5151 for (index = 0;
5152 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5153 ++index)
5155 tree elt_init;
5156 constructor_elt *old_cur = d->cur;
5158 check_array_designated_initializer (d->cur, index);
5159 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5160 complain);
5161 if (elt_init == error_mark_node)
5162 return error_mark_node;
5163 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5164 size_int (index), elt_init);
5165 if (!TREE_CONSTANT (elt_init))
5166 TREE_CONSTANT (new_init) = false;
5168 /* This can happen with an invalid initializer (c++/54501). */
5169 if (d->cur == old_cur && !sized_array_p)
5170 break;
5173 return new_init;
5176 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5177 Parameters are the same of reshape_init_r. */
5179 static tree
5180 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5182 tree max_index = NULL_TREE;
5184 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5186 if (TYPE_DOMAIN (type))
5187 max_index = array_type_nelts (type);
5189 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5192 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5193 Parameters are the same of reshape_init_r. */
5195 static tree
5196 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5198 tree max_index = NULL_TREE;
5200 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5202 if (COMPOUND_LITERAL_P (d->cur->value))
5204 tree value = d->cur->value;
5205 if (!same_type_p (TREE_TYPE (value), type))
5207 if (complain & tf_error)
5208 error ("invalid type %qT as initializer for a vector of type %qT",
5209 TREE_TYPE (d->cur->value), type);
5210 value = error_mark_node;
5212 ++d->cur;
5213 return value;
5216 /* For a vector, we initialize it as an array of the appropriate size. */
5217 if (TREE_CODE (type) == VECTOR_TYPE)
5218 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5220 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5223 /* Subroutine of reshape_init_r, processes the initializers for classes
5224 or union. Parameters are the same of reshape_init_r. */
5226 static tree
5227 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5228 tsubst_flags_t complain)
5230 tree field;
5231 tree new_init;
5233 gcc_assert (CLASS_TYPE_P (type));
5235 /* The initializer for a class is always a CONSTRUCTOR. */
5236 new_init = build_constructor (init_list_type_node, NULL);
5237 field = next_initializable_field (TYPE_FIELDS (type));
5239 if (!field)
5241 /* [dcl.init.aggr]
5243 An initializer for an aggregate member that is an
5244 empty class shall have the form of an empty
5245 initializer-list {}. */
5246 if (!first_initializer_p)
5248 if (complain & tf_error)
5249 error ("initializer for %qT must be brace-enclosed", type);
5250 return error_mark_node;
5252 return new_init;
5255 /* Loop through the initializable fields, gathering initializers. */
5256 while (d->cur != d->end)
5258 tree field_init;
5259 constructor_elt *old_cur = d->cur;
5261 /* Handle designated initializers, as an extension. */
5262 if (d->cur->index)
5264 if (d->cur->index == error_mark_node)
5265 return error_mark_node;
5267 if (TREE_CODE (d->cur->index) == INTEGER_CST)
5269 if (complain & tf_error)
5270 error ("%<[%E] =%> used in a GNU-style designated initializer"
5271 " for class %qT", d->cur->index, type);
5272 return error_mark_node;
5275 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5276 /* We already reshaped this. */
5277 gcc_assert (d->cur->index == field);
5278 else
5279 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5281 if (!field || TREE_CODE (field) != FIELD_DECL)
5283 if (complain & tf_error)
5284 error ("%qT has no non-static data member named %qD", type,
5285 d->cur->index);
5286 return error_mark_node;
5290 /* If we processed all the member of the class, we are done. */
5291 if (!field)
5292 break;
5294 field_init = reshape_init_r (TREE_TYPE (field), d,
5295 /*first_initializer_p=*/false, complain);
5296 if (field_init == error_mark_node)
5297 return error_mark_node;
5299 if (d->cur == old_cur && d->cur->index)
5301 /* This can happen with an invalid initializer for a flexible
5302 array member (c++/54441). */
5303 if (complain & tf_error)
5304 error ("invalid initializer for %q#D", field);
5305 return error_mark_node;
5308 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5310 /* [dcl.init.aggr]
5312 When a union is initialized with a brace-enclosed
5313 initializer, the braces shall only contain an
5314 initializer for the first member of the union. */
5315 if (TREE_CODE (type) == UNION_TYPE)
5316 break;
5318 field = next_initializable_field (DECL_CHAIN (field));
5321 return new_init;
5324 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5325 designators are not valid; either complain or return true to indicate
5326 that reshape_init_r should return error_mark_node. */
5328 static bool
5329 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5331 if (d->cur->index)
5333 if (complain & tf_error)
5334 error ("C99 designator %qE outside aggregate initializer",
5335 d->cur->index);
5336 else
5337 return true;
5339 return false;
5342 /* Subroutine of reshape_init, which processes a single initializer (part of
5343 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5344 iterator within the CONSTRUCTOR which points to the initializer to process.
5345 FIRST_INITIALIZER_P is true if this is the first initializer of the
5346 outermost CONSTRUCTOR node. */
5348 static tree
5349 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5350 tsubst_flags_t complain)
5352 tree init = d->cur->value;
5354 if (error_operand_p (init))
5355 return error_mark_node;
5357 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5358 && has_designator_problem (d, complain))
5359 return error_mark_node;
5361 if (TREE_CODE (type) == COMPLEX_TYPE)
5363 /* A complex type can be initialized from one or two initializers,
5364 but braces are not elided. */
5365 d->cur++;
5366 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5368 if (CONSTRUCTOR_NELTS (init) > 2)
5370 if (complain & tf_error)
5371 error ("too many initializers for %qT", type);
5372 else
5373 return error_mark_node;
5376 else if (first_initializer_p && d->cur != d->end)
5378 vec<constructor_elt, va_gc> *v = 0;
5379 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5380 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5381 if (has_designator_problem (d, complain))
5382 return error_mark_node;
5383 d->cur++;
5384 init = build_constructor (init_list_type_node, v);
5386 return init;
5389 /* A non-aggregate type is always initialized with a single
5390 initializer. */
5391 if (!CP_AGGREGATE_TYPE_P (type))
5393 /* It is invalid to initialize a non-aggregate type with a
5394 brace-enclosed initializer before C++0x.
5395 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5396 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5397 a CONSTRUCTOR (with a record type). */
5398 if (TREE_CODE (init) == CONSTRUCTOR
5399 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5401 if (SCALAR_TYPE_P (type))
5403 if (complain & tf_error)
5404 error ("braces around scalar initializer for type %qT", type);
5405 init = error_mark_node;
5407 else
5408 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5411 d->cur++;
5412 return init;
5415 /* [dcl.init.aggr]
5417 All implicit type conversions (clause _conv_) are considered when
5418 initializing the aggregate member with an initializer from an
5419 initializer-list. If the initializer can initialize a member,
5420 the member is initialized. Otherwise, if the member is itself a
5421 non-empty subaggregate, brace elision is assumed and the
5422 initializer is considered for the initialization of the first
5423 member of the subaggregate. */
5424 if (TREE_CODE (init) != CONSTRUCTOR
5425 /* But don't try this for the first initializer, since that would be
5426 looking through the outermost braces; A a2 = { a1 }; is not a
5427 valid aggregate initialization. */
5428 && !first_initializer_p
5429 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5430 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5431 complain)))
5433 d->cur++;
5434 return init;
5437 /* [dcl.init.string]
5439 A char array (whether plain char, signed char, or unsigned char)
5440 can be initialized by a string-literal (optionally enclosed in
5441 braces); a wchar_t array can be initialized by a wide
5442 string-literal (optionally enclosed in braces). */
5443 if (TREE_CODE (type) == ARRAY_TYPE
5444 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5446 tree str_init = init;
5448 /* Strip one level of braces if and only if they enclose a single
5449 element (as allowed by [dcl.init.string]). */
5450 if (!first_initializer_p
5451 && TREE_CODE (str_init) == CONSTRUCTOR
5452 && vec_safe_length (CONSTRUCTOR_ELTS (str_init)) == 1)
5454 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5457 /* If it's a string literal, then it's the initializer for the array
5458 as a whole. Otherwise, continue with normal initialization for
5459 array types (one value per array element). */
5460 if (TREE_CODE (str_init) == STRING_CST)
5462 if (has_designator_problem (d, complain))
5463 return error_mark_node;
5464 d->cur++;
5465 return str_init;
5469 /* The following cases are about aggregates. If we are not within a full
5470 initializer already, and there is not a CONSTRUCTOR, it means that there
5471 is a missing set of braces (that is, we are processing the case for
5472 which reshape_init exists). */
5473 if (!first_initializer_p)
5475 if (TREE_CODE (init) == CONSTRUCTOR)
5477 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5478 /* There is no need to reshape pointer-to-member function
5479 initializers, as they are always constructed correctly
5480 by the front end. */
5482 else if (COMPOUND_LITERAL_P (init))
5483 /* For a nested compound literal, there is no need to reshape since
5484 brace elision is not allowed. Even if we decided to allow it,
5485 we should add a call to reshape_init in finish_compound_literal,
5486 before calling digest_init, so changing this code would still
5487 not be necessary. */
5488 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5489 else
5491 ++d->cur;
5492 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5493 return reshape_init (type, init, complain);
5497 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5498 type);
5501 /* Dispatch to specialized routines. */
5502 if (CLASS_TYPE_P (type))
5503 return reshape_init_class (type, d, first_initializer_p, complain);
5504 else if (TREE_CODE (type) == ARRAY_TYPE)
5505 return reshape_init_array (type, d, complain);
5506 else if (TREE_CODE (type) == VECTOR_TYPE)
5507 return reshape_init_vector (type, d, complain);
5508 else
5509 gcc_unreachable();
5512 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5513 brace-enclosed aggregate initializer.
5515 INIT is the CONSTRUCTOR containing the list of initializers describing
5516 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5517 It may not presently match the shape of the TYPE; for example:
5519 struct S { int a; int b; };
5520 struct S a[] = { 1, 2, 3, 4 };
5522 Here INIT will hold a vector of four elements, rather than a
5523 vector of two elements, each itself a vector of two elements. This
5524 routine transforms INIT from the former form into the latter. The
5525 revised CONSTRUCTOR node is returned. */
5527 tree
5528 reshape_init (tree type, tree init, tsubst_flags_t complain)
5530 vec<constructor_elt, va_gc> *v;
5531 reshape_iter d;
5532 tree new_init;
5534 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5536 v = CONSTRUCTOR_ELTS (init);
5538 /* An empty constructor does not need reshaping, and it is always a valid
5539 initializer. */
5540 if (vec_safe_is_empty (v))
5541 return init;
5543 /* Recurse on this CONSTRUCTOR. */
5544 d.cur = &(*v)[0];
5545 d.end = d.cur + v->length ();
5547 new_init = reshape_init_r (type, &d, true, complain);
5548 if (new_init == error_mark_node)
5549 return error_mark_node;
5551 /* Make sure all the element of the constructor were used. Otherwise,
5552 issue an error about exceeding initializers. */
5553 if (d.cur != d.end)
5555 if (complain & tf_error)
5556 error ("too many initializers for %qT", type);
5557 else
5558 return error_mark_node;
5561 return new_init;
5564 /* Verify array initializer. Returns true if errors have been reported. */
5566 bool
5567 check_array_initializer (tree decl, tree type, tree init)
5569 tree element_type = TREE_TYPE (type);
5571 /* The array type itself need not be complete, because the
5572 initializer may tell us how many elements are in the array.
5573 But, the elements of the array must be complete. */
5574 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5576 if (decl)
5577 error ("elements of array %q#D have incomplete type", decl);
5578 else
5579 error ("elements of array %q#T have incomplete type", type);
5580 return true;
5582 /* A compound literal can't have variable size. */
5583 if (init && !decl
5584 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5585 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5587 error ("variable-sized compound literal");
5588 return true;
5590 return false;
5593 /* Subroutine of check_initializer; args are passed down from that function.
5594 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5596 static tree
5597 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5600 gcc_assert (stmts_are_full_exprs_p ());
5601 return build_aggr_init (decl, init, flags, tf_warning_or_error);
5604 /* Verify INIT (the initializer for DECL), and record the
5605 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5606 grok_reference_init.
5608 If the return value is non-NULL, it is an expression that must be
5609 evaluated dynamically to initialize DECL. */
5611 static tree
5612 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
5614 tree type = TREE_TYPE (decl);
5615 tree init_code = NULL;
5616 tree extra_init = NULL_TREE;
5617 tree core_type;
5619 /* Things that are going to be initialized need to have complete
5620 type. */
5621 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5623 if (DECL_HAS_VALUE_EXPR_P (decl))
5625 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5626 it doesn't have storage to be initialized. */
5627 gcc_assert (init == NULL_TREE);
5628 return NULL_TREE;
5631 if (type == error_mark_node)
5632 /* We will have already complained. */
5633 return NULL_TREE;
5635 if (TREE_CODE (type) == ARRAY_TYPE)
5637 if (check_array_initializer (decl, type, init))
5638 return NULL_TREE;
5640 else if (!COMPLETE_TYPE_P (type))
5642 error ("%q#D has incomplete type", decl);
5643 TREE_TYPE (decl) = error_mark_node;
5644 return NULL_TREE;
5646 else
5647 /* There is no way to make a variable-sized class type in GNU C++. */
5648 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5650 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5652 int init_len = vec_safe_length (CONSTRUCTOR_ELTS (init));
5653 if (SCALAR_TYPE_P (type))
5655 if (init_len == 0)
5657 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5658 init = build_zero_init (type, NULL_TREE, false);
5660 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5662 error ("scalar object %qD requires one element in initializer",
5663 decl);
5664 TREE_TYPE (decl) = error_mark_node;
5665 return NULL_TREE;
5670 if (TREE_CODE (decl) == CONST_DECL)
5672 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5674 DECL_INITIAL (decl) = init;
5676 gcc_assert (init != NULL_TREE);
5677 init = NULL_TREE;
5679 else if (!init && DECL_REALLY_EXTERN (decl))
5681 else if (init || type_build_ctor_call (type)
5682 || TREE_CODE (type) == REFERENCE_TYPE)
5684 if (TREE_CODE (type) == REFERENCE_TYPE)
5686 init = grok_reference_init (decl, type, init, flags);
5687 flags |= LOOKUP_ALREADY_DIGESTED;
5689 else if (!init)
5690 check_for_uninitialized_const_var (decl);
5691 /* Do not reshape constructors of vectors (they don't need to be
5692 reshaped. */
5693 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5695 if (is_std_init_list (type))
5697 init = perform_implicit_conversion (type, init,
5698 tf_warning_or_error);
5699 flags |= LOOKUP_ALREADY_DIGESTED;
5701 else if (TYPE_NON_AGGREGATE_CLASS (type))
5703 /* Don't reshape if the class has constructors. */
5704 if (cxx_dialect == cxx98)
5705 error ("in C++98 %qD must be initialized by constructor, "
5706 "not by %<{...}%>",
5707 decl);
5709 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5711 error ("opaque vector types cannot be initialized");
5712 init = error_mark_node;
5714 else
5716 init = reshape_init (type, init, tf_warning_or_error);
5717 if (SCALAR_TYPE_P (type))
5718 check_narrowing (type, init);
5722 /* If DECL has an array type without a specific bound, deduce the
5723 array size from the initializer. */
5724 maybe_deduce_size_from_array_init (decl, init);
5725 type = TREE_TYPE (decl);
5726 if (type == error_mark_node)
5727 return NULL_TREE;
5729 if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5730 && !(flags & LOOKUP_ALREADY_DIGESTED)
5731 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5732 && CP_AGGREGATE_TYPE_P (type)
5733 && (CLASS_TYPE_P (type)
5734 || !TYPE_NEEDS_CONSTRUCTING (type)
5735 || type_has_extended_temps (type))))
5737 init_code = build_aggr_init_full_exprs (decl, init, flags);
5739 /* A constructor call is a non-trivial initializer even if
5740 it isn't explicitly written. */
5741 if (TREE_SIDE_EFFECTS (init_code))
5742 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
5744 /* If this is a constexpr initializer, expand_default_init will
5745 have returned an INIT_EXPR rather than a CALL_EXPR. In that
5746 case, pull the initializer back out and pass it down into
5747 store_init_value. */
5748 while (TREE_CODE (init_code) == EXPR_STMT
5749 || TREE_CODE (init_code) == CONVERT_EXPR)
5750 init_code = TREE_OPERAND (init_code, 0);
5751 if (TREE_CODE (init_code) == INIT_EXPR)
5753 init = TREE_OPERAND (init_code, 1);
5754 init_code = NULL_TREE;
5755 /* Don't call digest_init; it's unnecessary and will complain
5756 about aggregate initialization of non-aggregate classes. */
5757 flags |= LOOKUP_ALREADY_DIGESTED;
5759 else if (DECL_DECLARED_CONSTEXPR_P (decl))
5761 /* Declared constexpr, but no suitable initializer; massage
5762 init appropriately so we can pass it into store_init_value
5763 for the error. */
5764 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5765 init = finish_compound_literal (type, init,
5766 tf_warning_or_error);
5767 else if (CLASS_TYPE_P (type)
5768 && (!init || TREE_CODE (init) == TREE_LIST))
5770 init = build_functional_cast (type, init, tf_none);
5771 if (TREE_CODE (init) == TARGET_EXPR)
5772 TARGET_EXPR_DIRECT_INIT_P (init) = true;
5774 init_code = NULL_TREE;
5776 else
5777 init = NULL_TREE;
5780 if (init && TREE_CODE (init) != TREE_VEC)
5782 /* In aggregate initialization of a variable, each element
5783 initialization is a full-expression because there is no
5784 enclosing expression. */
5785 gcc_assert (stmts_are_full_exprs_p ());
5787 init_code = store_init_value (decl, init, cleanups, flags);
5789 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5790 && DECL_INITIAL (decl)
5791 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5792 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5793 warning (0, "array %qD initialized by parenthesized string literal %qE",
5794 decl, DECL_INITIAL (decl));
5795 init = NULL;
5798 else
5800 if (CLASS_TYPE_P (core_type = strip_array_types (type))
5801 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5802 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5803 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5804 /*complain=*/true);
5806 check_for_uninitialized_const_var (decl);
5809 if (init && init != error_mark_node)
5810 init_code = build2 (INIT_EXPR, type, decl, init);
5812 if (extra_init)
5813 init_code = add_stmt_to_compound (extra_init, init_code);
5815 if (init_code && DECL_IN_AGGR_P (decl))
5817 static int explained = 0;
5819 if (cxx_dialect < cxx11)
5820 error ("initializer invalid for static member with constructor");
5821 else
5822 error ("non-constant in-class initialization invalid for static "
5823 "member %qD", decl);
5824 if (!explained)
5826 error ("(an out of class initialization is required)");
5827 explained = 1;
5831 return init_code;
5834 /* If DECL is not a local variable, give it RTL. */
5836 static void
5837 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5839 int toplev = toplevel_bindings_p ();
5840 int defer_p;
5841 const char *filename;
5843 /* Set the DECL_ASSEMBLER_NAME for the object. */
5844 if (asmspec)
5846 /* The `register' keyword, when used together with an
5847 asm-specification, indicates that the variable should be
5848 placed in a particular register. */
5849 if (VAR_P (decl) && DECL_REGISTER (decl))
5851 set_user_assembler_name (decl, asmspec);
5852 DECL_HARD_REGISTER (decl) = 1;
5854 else
5856 if (TREE_CODE (decl) == FUNCTION_DECL
5857 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5858 set_builtin_user_assembler_name (decl, asmspec);
5859 set_user_assembler_name (decl, asmspec);
5863 /* Handle non-variables up front. */
5864 if (!VAR_P (decl))
5866 rest_of_decl_compilation (decl, toplev, at_eof);
5867 return;
5870 /* If we see a class member here, it should be a static data
5871 member. */
5872 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5874 gcc_assert (TREE_STATIC (decl));
5875 /* An in-class declaration of a static data member should be
5876 external; it is only a declaration, and not a definition. */
5877 if (init == NULL_TREE)
5878 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5881 /* We don't create any RTL for local variables. */
5882 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5883 return;
5885 /* We defer emission of local statics until the corresponding
5886 DECL_EXPR is expanded. */
5887 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5889 /* We try to defer namespace-scope static constants so that they are
5890 not emitted into the object file unnecessarily. */
5891 filename = input_filename;
5892 if (!DECL_VIRTUAL_P (decl)
5893 && TREE_READONLY (decl)
5894 && DECL_INITIAL (decl) != NULL_TREE
5895 && DECL_INITIAL (decl) != error_mark_node
5896 && filename != NULL
5897 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5898 && toplev
5899 && !TREE_PUBLIC (decl))
5901 /* Fool with the linkage of static consts according to #pragma
5902 interface. */
5903 struct c_fileinfo *finfo = get_fileinfo (filename);
5904 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5906 TREE_PUBLIC (decl) = 1;
5907 DECL_EXTERNAL (decl) = finfo->interface_only;
5910 defer_p = 1;
5912 /* Likewise for template instantiations. */
5913 else if (DECL_LANG_SPECIFIC (decl)
5914 && DECL_IMPLICIT_INSTANTIATION (decl))
5915 defer_p = 1;
5917 /* If we're not deferring, go ahead and assemble the variable. */
5918 if (!defer_p)
5919 rest_of_decl_compilation (decl, toplev, at_eof);
5922 /* walk_tree helper for wrap_temporary_cleanups, below. */
5924 static tree
5925 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5927 /* Stop at types or full-expression boundaries. */
5928 if (TYPE_P (*stmt_p)
5929 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5931 *walk_subtrees = 0;
5932 return NULL_TREE;
5935 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5937 tree guard = (tree)data;
5938 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5940 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5941 /* Tell honor_protect_cleanup_actions to handle this as a separate
5942 cleanup. */
5943 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5945 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5948 return NULL_TREE;
5951 /* We're initializing a local variable which has a cleanup GUARD. If there
5952 are any temporaries used in the initializer INIT of this variable, we
5953 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5954 variable will be cleaned up properly if one of them throws.
5956 Unfortunately, there's no way to express this properly in terms of
5957 nesting, as the regions for the temporaries overlap the region for the
5958 variable itself; if there are two temporaries, the variable needs to be
5959 the first thing destroyed if either of them throws. However, we only
5960 want to run the variable's cleanup if it actually got constructed. So
5961 we need to guard the temporary cleanups with the variable's cleanup if
5962 they are run on the normal path, but not if they are run on the
5963 exceptional path. We implement this by telling
5964 honor_protect_cleanup_actions to strip the variable cleanup from the
5965 exceptional path. */
5967 static void
5968 wrap_temporary_cleanups (tree init, tree guard)
5970 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5973 /* Generate code to initialize DECL (a local variable). */
5975 static void
5976 initialize_local_var (tree decl, tree init)
5978 tree type = TREE_TYPE (decl);
5979 tree cleanup;
5980 int already_used;
5982 gcc_assert (VAR_P (decl)
5983 || TREE_CODE (decl) == RESULT_DECL);
5984 gcc_assert (!TREE_STATIC (decl));
5986 if (DECL_SIZE (decl) == NULL_TREE)
5988 /* If we used it already as memory, it must stay in memory. */
5989 DECL_INITIAL (decl) = NULL_TREE;
5990 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5991 return;
5994 if (type == error_mark_node)
5995 return;
5997 /* Compute and store the initial value. */
5998 already_used = TREE_USED (decl) || TREE_USED (type);
5999 if (TREE_USED (type))
6000 DECL_READ_P (decl) = 1;
6002 /* Generate a cleanup, if necessary. */
6003 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6005 /* Perform the initialization. */
6006 if (init)
6008 if (TREE_CODE (init) == INIT_EXPR
6009 && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
6011 /* Stick simple initializers in DECL_INITIAL so that
6012 -Wno-init-self works (c++/34772). */
6013 gcc_assert (TREE_OPERAND (init, 0) == decl);
6014 DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
6016 else
6018 int saved_stmts_are_full_exprs_p;
6020 /* If we're only initializing a single object, guard the
6021 destructors of any temporaries used in its initializer with
6022 its destructor. This isn't right for arrays because each
6023 element initialization is a full-expression. */
6024 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6025 wrap_temporary_cleanups (init, cleanup);
6027 gcc_assert (building_stmt_list_p ());
6028 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6029 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6030 finish_expr_stmt (init);
6031 current_stmt_tree ()->stmts_are_full_exprs_p =
6032 saved_stmts_are_full_exprs_p;
6036 /* Set this to 0 so we can tell whether an aggregate which was
6037 initialized was ever used. Don't do this if it has a
6038 destructor, so we don't complain about the 'resource
6039 allocation is initialization' idiom. Now set
6040 attribute((unused)) on types so decls of that type will be
6041 marked used. (see TREE_USED, above.) */
6042 if (TYPE_NEEDS_CONSTRUCTING (type)
6043 && ! already_used
6044 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6045 && DECL_NAME (decl))
6046 TREE_USED (decl) = 0;
6047 else if (already_used)
6048 TREE_USED (decl) = 1;
6050 if (cleanup)
6051 finish_decl_cleanup (decl, cleanup);
6054 /* DECL is a VAR_DECL for a compiler-generated variable with static
6055 storage duration (like a virtual table) whose initializer is a
6056 compile-time constant. Initialize the variable and provide it to the
6057 back end. */
6059 void
6060 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6062 tree init;
6063 gcc_assert (DECL_ARTIFICIAL (decl));
6064 init = build_constructor (TREE_TYPE (decl), v);
6065 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6066 DECL_INITIAL (decl) = init;
6067 DECL_INITIALIZED_P (decl) = 1;
6068 determine_visibility (decl);
6069 layout_var_decl (decl);
6070 maybe_commonize_var (decl);
6071 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6074 /* INIT is the initializer for a variable, as represented by the
6075 parser. Returns true iff INIT is type-dependent. */
6077 static bool
6078 type_dependent_init_p (tree init)
6080 if (TREE_CODE (init) == TREE_LIST)
6081 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6082 return any_type_dependent_elements_p (init);
6083 else if (TREE_CODE (init) == CONSTRUCTOR)
6084 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6086 vec<constructor_elt, va_gc> *elts;
6087 size_t nelts;
6088 size_t i;
6090 elts = CONSTRUCTOR_ELTS (init);
6091 nelts = vec_safe_length (elts);
6092 for (i = 0; i < nelts; ++i)
6093 if (type_dependent_init_p ((*elts)[i].value))
6094 return true;
6096 else
6097 /* It must be a simple expression, e.g., int i = 3; */
6098 return type_dependent_expression_p (init);
6100 return false;
6103 /* INIT is the initializer for a variable, as represented by the
6104 parser. Returns true iff INIT is value-dependent. */
6106 static bool
6107 value_dependent_init_p (tree init)
6109 if (TREE_CODE (init) == TREE_LIST)
6110 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6111 return any_value_dependent_elements_p (init);
6112 else if (TREE_CODE (init) == CONSTRUCTOR)
6113 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6115 vec<constructor_elt, va_gc> *elts;
6116 size_t nelts;
6117 size_t i;
6119 elts = CONSTRUCTOR_ELTS (init);
6120 nelts = vec_safe_length (elts);
6121 for (i = 0; i < nelts; ++i)
6122 if (value_dependent_init_p ((*elts)[i].value))
6123 return true;
6125 else
6126 /* It must be a simple expression, e.g., int i = 3; */
6127 return value_dependent_expression_p (init);
6129 return false;
6132 /* Finish processing of a declaration;
6133 install its line number and initial value.
6134 If the length of an array type is not known before,
6135 it must be determined now, from the initial value, or it is an error.
6137 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6138 true, then INIT is an integral constant expression.
6140 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6141 if the (init) syntax was used. */
6143 void
6144 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6145 tree asmspec_tree, int flags)
6147 tree type;
6148 vec<tree, va_gc> *cleanups = NULL;
6149 const char *asmspec = NULL;
6150 int was_readonly = 0;
6151 bool var_definition_p = false;
6152 tree auto_node;
6154 if (decl == error_mark_node)
6155 return;
6156 else if (! decl)
6158 if (init)
6159 error ("assignment (not initialization) in declaration");
6160 return;
6163 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6164 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6165 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6167 type = TREE_TYPE (decl);
6168 if (type == error_mark_node)
6169 return;
6171 /* If a name was specified, get the string. */
6172 if (at_namespace_scope_p ())
6173 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6174 if (asmspec_tree && asmspec_tree != error_mark_node)
6175 asmspec = TREE_STRING_POINTER (asmspec_tree);
6177 if (current_class_type
6178 && CP_DECL_CONTEXT (decl) == current_class_type
6179 && TYPE_BEING_DEFINED (current_class_type)
6180 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6181 && (DECL_INITIAL (decl) || init))
6182 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6184 if (TREE_CODE (decl) != FUNCTION_DECL
6185 && (auto_node = type_uses_auto (type)))
6187 tree d_init;
6188 if (init == NULL_TREE)
6190 if (DECL_LANG_SPECIFIC (decl)
6191 && DECL_TEMPLATE_INSTANTIATION (decl)
6192 && !DECL_TEMPLATE_INSTANTIATED (decl))
6194 /* init is null because we're deferring instantiating the
6195 initializer until we need it. Well, we need it now. */
6196 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6197 return;
6200 error ("declaration of %q#D has no initializer", decl);
6201 TREE_TYPE (decl) = error_mark_node;
6202 return;
6204 d_init = init;
6205 if (TREE_CODE (d_init) == TREE_LIST)
6206 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6207 tf_warning_or_error);
6208 d_init = resolve_nondeduced_context (d_init);
6209 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6210 auto_node);
6211 if (type == error_mark_node)
6212 return;
6213 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6216 if (!ensure_literal_type_for_constexpr_object (decl))
6217 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6219 if (VAR_P (decl)
6220 && DECL_CLASS_SCOPE_P (decl)
6221 && DECL_INITIALIZED_IN_CLASS_P (decl))
6222 check_static_variable_definition (decl, type);
6224 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6226 tree clone;
6227 if (init == ridpointers[(int)RID_DELETE])
6229 /* FIXME check this is 1st decl. */
6230 DECL_DELETED_FN (decl) = 1;
6231 DECL_DECLARED_INLINE_P (decl) = 1;
6232 DECL_INITIAL (decl) = error_mark_node;
6233 FOR_EACH_CLONE (clone, decl)
6235 DECL_DELETED_FN (clone) = 1;
6236 DECL_DECLARED_INLINE_P (clone) = 1;
6237 DECL_INITIAL (clone) = error_mark_node;
6239 init = NULL_TREE;
6241 else if (init == ridpointers[(int)RID_DEFAULT])
6243 if (defaultable_fn_check (decl))
6244 DECL_DEFAULTED_FN (decl) = 1;
6245 else
6246 DECL_INITIAL (decl) = NULL_TREE;
6250 if (init && VAR_P (decl))
6252 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6253 /* If DECL is a reference, then we want to know whether init is a
6254 reference constant; init_const_expr_p as passed tells us whether
6255 it's an rvalue constant. */
6256 if (TREE_CODE (type) == REFERENCE_TYPE)
6257 init_const_expr_p = potential_constant_expression (init);
6258 if (init_const_expr_p)
6260 /* Set these flags now for templates. We'll update the flags in
6261 store_init_value for instantiations. */
6262 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6263 if (decl_maybe_constant_var_p (decl))
6264 TREE_CONSTANT (decl) = 1;
6268 if (processing_template_decl)
6270 bool type_dependent_p;
6272 /* Add this declaration to the statement-tree. */
6273 if (at_function_scope_p ())
6274 add_decl_expr (decl);
6276 type_dependent_p = dependent_type_p (type);
6278 if (check_for_bare_parameter_packs (init))
6280 init = NULL_TREE;
6281 DECL_INITIAL (decl) = NULL_TREE;
6284 /* Generally, initializers in templates are expanded when the
6285 template is instantiated. But, if DECL is a variable constant
6286 then it can be used in future constant expressions, so its value
6287 must be available. */
6289 if (!VAR_P (decl) || dependent_type_p (type))
6290 /* We can't do anything if the decl has dependent type. */;
6291 else if (init
6292 && init_const_expr_p
6293 && !type_dependent_p
6294 && decl_maybe_constant_var_p (decl)
6295 && !type_dependent_init_p (init)
6296 && !value_dependent_init_p (init))
6298 /* This variable seems to be a non-dependent constant, so process
6299 its initializer. If check_initializer returns non-null the
6300 initialization wasn't constant after all. */
6301 tree init_code;
6302 cleanups = make_tree_vector ();
6303 init_code = check_initializer (decl, init, flags, &cleanups);
6304 if (init_code == NULL_TREE)
6305 init = NULL_TREE;
6306 release_tree_vector (cleanups);
6308 else if (!DECL_PRETTY_FUNCTION_P (decl))
6310 /* Deduce array size even if the initializer is dependent. */
6311 maybe_deduce_size_from_array_init (decl, init);
6312 /* And complain about multiple initializers. */
6313 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6314 && !MAYBE_CLASS_TYPE_P (type))
6315 init = build_x_compound_expr_from_list (init, ELK_INIT,
6316 tf_warning_or_error);
6319 if (init)
6320 DECL_INITIAL (decl) = init;
6321 return;
6324 /* Just store non-static data member initializers for later. */
6325 if (init && TREE_CODE (decl) == FIELD_DECL)
6326 DECL_INITIAL (decl) = init;
6328 /* Take care of TYPE_DECLs up front. */
6329 if (TREE_CODE (decl) == TYPE_DECL)
6331 if (type != error_mark_node
6332 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6334 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6335 warning (0, "shadowing previous type declaration of %q#D", decl);
6336 set_identifier_type_value (DECL_NAME (decl), decl);
6339 /* If we have installed this as the canonical typedef for this
6340 type, and that type has not been defined yet, delay emitting
6341 the debug information for it, as we will emit it later. */
6342 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6343 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6344 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6346 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6347 at_eof);
6348 return;
6351 /* A reference will be modified here, as it is initialized. */
6352 if (! DECL_EXTERNAL (decl)
6353 && TREE_READONLY (decl)
6354 && TREE_CODE (type) == REFERENCE_TYPE)
6356 was_readonly = 1;
6357 TREE_READONLY (decl) = 0;
6360 if (VAR_P (decl))
6362 /* If this is a local variable that will need a mangled name,
6363 register it now. We must do this before processing the
6364 initializer for the variable, since the initialization might
6365 require a guard variable, and since the mangled name of the
6366 guard variable will depend on the mangled name of this
6367 variable. */
6368 if (DECL_FUNCTION_SCOPE_P (decl)
6369 && TREE_STATIC (decl)
6370 && !DECL_ARTIFICIAL (decl))
6372 push_local_name (decl);
6373 if (DECL_CONSTRUCTOR_P (current_function_decl)
6374 || DECL_DESTRUCTOR_P (current_function_decl))
6375 /* Normally local_decls is populated during GIMPLE lowering,
6376 but [cd]tors are never actually compiled directly. We need
6377 to put statics on the list so we can deal with the label
6378 address extension. FIXME. */
6379 add_local_decl (cfun, decl);
6382 /* Convert the initializer to the type of DECL, if we have not
6383 already initialized DECL. */
6384 if (!DECL_INITIALIZED_P (decl)
6385 /* If !DECL_EXTERNAL then DECL is being defined. In the
6386 case of a static data member initialized inside the
6387 class-specifier, there can be an initializer even if DECL
6388 is *not* defined. */
6389 && (!DECL_EXTERNAL (decl) || init))
6391 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6393 tree jclass
6394 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6395 /* Allow libjava/prims.cc define primitive classes. */
6396 if (init != NULL_TREE
6397 || jclass == NULL_TREE
6398 || TREE_CODE (jclass) != TYPE_DECL
6399 || !POINTER_TYPE_P (TREE_TYPE (jclass))
6400 || !same_type_ignoring_top_level_qualifiers_p
6401 (type, TREE_TYPE (TREE_TYPE (jclass))))
6402 error ("Java object %qD not allocated with %<new%>", decl);
6403 init = NULL_TREE;
6405 cleanups = make_tree_vector ();
6406 init = check_initializer (decl, init, flags, &cleanups);
6408 /* Handle:
6410 [dcl.init]
6412 The memory occupied by any object of static storage
6413 duration is zero-initialized at program startup before
6414 any other initialization takes place.
6416 We cannot create an appropriate initializer until after
6417 the type of DECL is finalized. If DECL_INITIAL is set,
6418 then the DECL is statically initialized, and any
6419 necessary zero-initialization has already been performed. */
6420 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6421 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6422 /*nelts=*/NULL_TREE,
6423 /*static_storage_p=*/true);
6424 /* Remember that the initialization for this variable has
6425 taken place. */
6426 DECL_INITIALIZED_P (decl) = 1;
6427 /* This declaration is the definition of this variable,
6428 unless we are initializing a static data member within
6429 the class specifier. */
6430 if (!DECL_EXTERNAL (decl))
6431 var_definition_p = true;
6433 /* If the variable has an array type, lay out the type, even if
6434 there is no initializer. It is valid to index through the
6435 array, and we must get TYPE_ALIGN set correctly on the array
6436 type. */
6437 else if (TREE_CODE (type) == ARRAY_TYPE)
6438 layout_type (type);
6440 if (TREE_STATIC (decl)
6441 && !at_function_scope_p ()
6442 && current_function_decl == NULL)
6443 /* So decl is a global variable or a static member of a
6444 non local class. Record the types it uses
6445 so that we can decide later to emit debug info for them. */
6446 record_types_used_by_current_var_decl (decl);
6448 else if (TREE_CODE (decl) == FIELD_DECL
6449 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6450 error ("non-static data member %qD has Java class type", decl);
6452 /* Add this declaration to the statement-tree. This needs to happen
6453 after the call to check_initializer so that the DECL_EXPR for a
6454 reference temp is added before the DECL_EXPR for the reference itself. */
6455 if (DECL_FUNCTION_SCOPE_P (decl))
6456 add_decl_expr (decl);
6458 /* Let the middle end know about variables and functions -- but not
6459 static data members in uninstantiated class templates. */
6460 if (VAR_OR_FUNCTION_DECL_P (decl))
6462 if (VAR_P (decl))
6464 layout_var_decl (decl);
6465 maybe_commonize_var (decl);
6468 /* This needs to happen after the linkage is set. */
6469 determine_visibility (decl);
6471 if (var_definition_p && TREE_STATIC (decl))
6473 /* If a TREE_READONLY variable needs initialization
6474 at runtime, it is no longer readonly and we need to
6475 avoid MEM_READONLY_P being set on RTL created for it. */
6476 if (init)
6478 if (TREE_READONLY (decl))
6479 TREE_READONLY (decl) = 0;
6480 was_readonly = 0;
6482 else if (was_readonly)
6483 TREE_READONLY (decl) = 1;
6485 /* Likewise if it needs destruction. */
6486 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6487 TREE_READONLY (decl) = 0;
6490 make_rtl_for_nonlocal_decl (decl, init, asmspec);
6492 /* Check for abstractness of the type. Notice that there is no
6493 need to strip array types here since the check for those types
6494 is already done within create_array_type_for_decl. */
6495 abstract_virtuals_error (decl, type);
6497 if (TREE_TYPE (decl) == error_mark_node)
6498 /* No initialization required. */
6500 else if (TREE_CODE (decl) == FUNCTION_DECL)
6502 if (init)
6504 if (init == ridpointers[(int)RID_DEFAULT])
6506 /* An out-of-class default definition is defined at
6507 the point where it is explicitly defaulted. */
6508 if (DECL_DELETED_FN (decl))
6509 maybe_explain_implicit_delete (decl);
6510 else if (DECL_INITIAL (decl) == error_mark_node)
6511 synthesize_method (decl);
6513 else
6514 error ("function %q#D is initialized like a variable", decl);
6516 /* else no initialization required. */
6518 else if (DECL_EXTERNAL (decl)
6519 && ! (DECL_LANG_SPECIFIC (decl)
6520 && DECL_NOT_REALLY_EXTERN (decl)))
6522 if (init)
6523 DECL_INITIAL (decl) = init;
6525 /* A variable definition. */
6526 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6527 /* Initialize the local variable. */
6528 initialize_local_var (decl, init);
6530 /* If a variable is defined, and then a subsequent
6531 definition with external linkage is encountered, we will
6532 get here twice for the same variable. We want to avoid
6533 calling expand_static_init more than once. For variables
6534 that are not static data members, we can call
6535 expand_static_init only when we actually process the
6536 initializer. It is not legal to redeclare a static data
6537 member, so this issue does not arise in that case. */
6538 else if (var_definition_p && TREE_STATIC (decl))
6539 expand_static_init (decl, init);
6542 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6543 reference, insert it in the statement-tree now. */
6544 if (cleanups)
6546 unsigned i; tree t;
6547 FOR_EACH_VEC_ELT (*cleanups, i, t)
6548 push_cleanup (decl, t, false);
6549 release_tree_vector (cleanups);
6552 if (was_readonly)
6553 TREE_READONLY (decl) = 1;
6555 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6558 /* Returns a declaration for a VAR_DECL as if:
6560 extern "C" TYPE NAME;
6562 had been seen. Used to create compiler-generated global
6563 variables. */
6565 static tree
6566 declare_global_var (tree name, tree type)
6568 tree decl;
6570 push_to_top_level ();
6571 decl = build_decl (input_location, VAR_DECL, name, type);
6572 TREE_PUBLIC (decl) = 1;
6573 DECL_EXTERNAL (decl) = 1;
6574 DECL_ARTIFICIAL (decl) = 1;
6575 /* If the user has explicitly declared this variable (perhaps
6576 because the code we are compiling is part of a low-level runtime
6577 library), then it is possible that our declaration will be merged
6578 with theirs by pushdecl. */
6579 decl = pushdecl (decl);
6580 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6581 pop_from_top_level ();
6583 return decl;
6586 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6587 if "__cxa_atexit" is not being used) corresponding to the function
6588 to be called when the program exits. */
6590 static tree
6591 get_atexit_fn_ptr_type (void)
6593 tree fn_type;
6595 if (!atexit_fn_ptr_type_node)
6597 tree arg_type;
6598 if (flag_use_cxa_atexit
6599 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6600 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
6601 arg_type = ptr_type_node;
6602 else
6603 /* The parameter to "atexit" is "void (*)(void)". */
6604 arg_type = NULL_TREE;
6606 fn_type = build_function_type_list (void_type_node,
6607 arg_type, NULL_TREE);
6608 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6611 return atexit_fn_ptr_type_node;
6614 /* Returns a pointer to the `atexit' function. Note that if
6615 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6616 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6618 static tree
6619 get_atexit_node (void)
6621 tree atexit_fndecl;
6622 tree fn_type;
6623 tree fn_ptr_type;
6624 const char *name;
6625 bool use_aeabi_atexit;
6627 if (atexit_node)
6628 return atexit_node;
6630 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6632 /* The declaration for `__cxa_atexit' is:
6634 int __cxa_atexit (void (*)(void *), void *, void *)
6636 We build up the argument types and then the function type
6637 itself. */
6638 tree argtype0, argtype1, argtype2;
6640 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6641 /* First, build the pointer-to-function type for the first
6642 argument. */
6643 fn_ptr_type = get_atexit_fn_ptr_type ();
6644 /* Then, build the rest of the argument types. */
6645 argtype2 = ptr_type_node;
6646 if (use_aeabi_atexit)
6648 argtype1 = fn_ptr_type;
6649 argtype0 = ptr_type_node;
6651 else
6653 argtype1 = ptr_type_node;
6654 argtype0 = fn_ptr_type;
6656 /* And the final __cxa_atexit type. */
6657 fn_type = build_function_type_list (integer_type_node,
6658 argtype0, argtype1, argtype2,
6659 NULL_TREE);
6660 if (use_aeabi_atexit)
6661 name = "__aeabi_atexit";
6662 else
6663 name = "__cxa_atexit";
6665 else
6667 /* The declaration for `atexit' is:
6669 int atexit (void (*)());
6671 We build up the argument types and then the function type
6672 itself. */
6673 fn_ptr_type = get_atexit_fn_ptr_type ();
6674 /* Build the final atexit type. */
6675 fn_type = build_function_type_list (integer_type_node,
6676 fn_ptr_type, NULL_TREE);
6677 name = "atexit";
6680 /* Now, build the function declaration. */
6681 push_lang_context (lang_name_c);
6682 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
6683 mark_used (atexit_fndecl);
6684 pop_lang_context ();
6685 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
6687 return atexit_node;
6690 /* Like get_atexit_node, but for thread-local cleanups. */
6692 static tree
6693 get_thread_atexit_node (void)
6695 /* The declaration for `__cxa_thread_atexit' is:
6697 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
6698 tree fn_type = build_function_type_list (integer_type_node,
6699 get_atexit_fn_ptr_type (),
6700 ptr_type_node, ptr_type_node,
6701 NULL_TREE);
6703 /* Now, build the function declaration. */
6704 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
6705 ECF_LEAF | ECF_NOTHROW);
6706 return decay_conversion (atexit_fndecl, tf_warning_or_error);
6709 /* Returns the __dso_handle VAR_DECL. */
6711 static tree
6712 get_dso_handle_node (void)
6714 if (dso_handle_node)
6715 return dso_handle_node;
6717 /* Declare the variable. */
6718 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6719 ptr_type_node);
6721 #ifdef HAVE_GAS_HIDDEN
6722 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6723 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6724 #endif
6726 return dso_handle_node;
6729 /* Begin a new function with internal linkage whose job will be simply
6730 to destroy some particular variable. */
6732 static GTY(()) int start_cleanup_cnt;
6734 static tree
6735 start_cleanup_fn (void)
6737 char name[32];
6738 tree fntype;
6739 tree fndecl;
6740 bool use_cxa_atexit = flag_use_cxa_atexit
6741 && !targetm.cxx.use_atexit_for_cxa_atexit ();
6743 push_to_top_level ();
6745 /* No need to mangle this. */
6746 push_lang_context (lang_name_c);
6748 /* Build the name of the function. */
6749 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6750 /* Build the function declaration. */
6751 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6752 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6753 /* It's a function with internal linkage, generated by the
6754 compiler. */
6755 TREE_PUBLIC (fndecl) = 0;
6756 DECL_ARTIFICIAL (fndecl) = 1;
6757 /* Make the function `inline' so that it is only emitted if it is
6758 actually needed. It is unlikely that it will be inlined, since
6759 it is only called via a function pointer, but we avoid unnecessary
6760 emissions this way. */
6761 DECL_DECLARED_INLINE_P (fndecl) = 1;
6762 DECL_INTERFACE_KNOWN (fndecl) = 1;
6763 /* Build the parameter. */
6764 if (use_cxa_atexit)
6766 tree parmdecl;
6768 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6769 DECL_CONTEXT (parmdecl) = fndecl;
6770 TREE_USED (parmdecl) = 1;
6771 DECL_READ_P (parmdecl) = 1;
6772 DECL_ARGUMENTS (fndecl) = parmdecl;
6775 pushdecl (fndecl);
6776 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6778 pop_lang_context ();
6780 return current_function_decl;
6783 /* Finish the cleanup function begun by start_cleanup_fn. */
6785 static void
6786 end_cleanup_fn (void)
6788 expand_or_defer_fn (finish_function (0));
6790 pop_from_top_level ();
6793 /* Generate code to handle the destruction of DECL, an object with
6794 static storage duration. */
6796 tree
6797 register_dtor_fn (tree decl)
6799 tree cleanup;
6800 tree addr;
6801 tree compound_stmt;
6802 tree fcall;
6803 tree type;
6804 bool ob_parm, dso_parm, use_dtor;
6805 tree arg0, arg1, arg2;
6806 tree atex_node;
6808 type = TREE_TYPE (decl);
6809 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6810 return void_zero_node;
6812 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
6813 "__aeabi_atexit"), and DECL is a class object, we can just pass the
6814 destructor to "__cxa_atexit"; we don't have to build a temporary
6815 function to do the cleanup. */
6816 dso_parm = (flag_use_cxa_atexit
6817 && !targetm.cxx.use_atexit_for_cxa_atexit ());
6818 ob_parm = (DECL_THREAD_LOCAL_P (decl) || dso_parm);
6819 use_dtor = ob_parm && CLASS_TYPE_P (type);
6820 if (use_dtor)
6822 int idx;
6824 /* Find the destructor. */
6825 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6826 gcc_assert (idx >= 0);
6827 cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
6828 /* Make sure it is accessible. */
6829 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
6830 tf_warning_or_error);
6832 else
6834 /* Call build_cleanup before we enter the anonymous function so
6835 that any access checks will be done relative to the current
6836 scope, rather than the scope of the anonymous function. */
6837 build_cleanup (decl);
6839 /* Now start the function. */
6840 cleanup = start_cleanup_fn ();
6842 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6843 to the original function, rather than the anonymous one. That
6844 will make the back end think that nested functions are in use,
6845 which causes confusion. */
6846 push_deferring_access_checks (dk_no_check);
6847 fcall = build_cleanup (decl);
6848 pop_deferring_access_checks ();
6850 /* Create the body of the anonymous function. */
6851 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6852 finish_expr_stmt (fcall);
6853 finish_compound_stmt (compound_stmt);
6854 end_cleanup_fn ();
6857 /* Call atexit with the cleanup function. */
6858 mark_used (cleanup);
6859 cleanup = build_address (cleanup);
6861 if (DECL_THREAD_LOCAL_P (decl))
6862 atex_node = get_thread_atexit_node ();
6863 else
6864 atex_node = get_atexit_node ();
6866 if (use_dtor)
6868 /* We must convert CLEANUP to the type that "__cxa_atexit"
6869 expects. */
6870 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6871 /* "__cxa_atexit" will pass the address of DECL to the
6872 cleanup function. */
6873 mark_used (decl);
6874 addr = build_address (decl);
6875 /* The declared type of the parameter to "__cxa_atexit" is
6876 "void *". For plain "T*", we could just let the
6877 machinery in cp_build_function_call convert it -- but if the
6878 type is "cv-qualified T *", then we need to convert it
6879 before passing it in, to avoid spurious errors. */
6880 addr = build_nop (ptr_type_node, addr);
6882 else
6883 /* Since the cleanup functions we build ignore the address
6884 they're given, there's no reason to pass the actual address
6885 in, and, in general, it's cheaper to pass NULL than any
6886 other value. */
6887 addr = null_pointer_node;
6889 if (dso_parm)
6890 arg2 = cp_build_addr_expr (get_dso_handle_node (),
6891 tf_warning_or_error);
6892 else if (ob_parm)
6893 /* Just pass NULL to the dso handle parm if we don't actually
6894 have a DSO handle on this target. */
6895 arg2 = null_pointer_node;
6896 else
6897 arg2 = NULL_TREE;
6899 if (ob_parm)
6901 if (!DECL_THREAD_LOCAL_P (decl)
6902 && targetm.cxx.use_aeabi_atexit ())
6904 arg1 = cleanup;
6905 arg0 = addr;
6907 else
6909 arg1 = addr;
6910 arg0 = cleanup;
6913 else
6915 arg0 = cleanup;
6916 arg1 = NULL_TREE;
6918 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
6919 arg0, arg1, arg2, NULL_TREE);
6922 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
6923 is its initializer. Generate code to handle the construction
6924 and destruction of DECL. */
6926 static void
6927 expand_static_init (tree decl, tree init)
6929 gcc_assert (VAR_P (decl));
6930 gcc_assert (TREE_STATIC (decl));
6932 /* Some variables require no dynamic initialization. */
6933 if (!init
6934 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6936 /* Make sure the destructor is callable. */
6937 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6938 return;
6941 if (DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
6942 && !DECL_FUNCTION_SCOPE_P (decl))
6944 if (init)
6945 error ("non-local variable %qD declared %<__thread%> "
6946 "needs dynamic initialization", decl);
6947 else
6948 error ("non-local variable %qD declared %<__thread%> "
6949 "has a non-trivial destructor", decl);
6950 static bool informed;
6951 if (!informed)
6953 inform (DECL_SOURCE_LOCATION (decl),
6954 "C++11 %<thread_local%> allows dynamic initialization "
6955 "and destruction");
6956 informed = true;
6958 return;
6961 if (DECL_FUNCTION_SCOPE_P (decl))
6963 /* Emit code to perform this initialization but once. */
6964 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6965 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6966 tree guard, guard_addr;
6967 tree flag, begin;
6968 /* We don't need thread-safety code for thread-local vars. */
6969 bool thread_guard = (flag_threadsafe_statics
6970 && !DECL_THREAD_LOCAL_P (decl));
6972 /* Emit code to perform this initialization but once. This code
6973 looks like:
6975 static <type> guard;
6976 if (!guard.first_byte) {
6977 if (__cxa_guard_acquire (&guard)) {
6978 bool flag = false;
6979 try {
6980 // Do initialization.
6981 flag = true; __cxa_guard_release (&guard);
6982 // Register variable for destruction at end of program.
6983 } catch {
6984 if (!flag) __cxa_guard_abort (&guard);
6988 Note that the `flag' variable is only set to 1 *after* the
6989 initialization is complete. This ensures that an exception,
6990 thrown during the construction, will cause the variable to
6991 reinitialized when we pass through this code again, as per:
6993 [stmt.dcl]
6995 If the initialization exits by throwing an exception, the
6996 initialization is not complete, so it will be tried again
6997 the next time control enters the declaration.
6999 This process should be thread-safe, too; multiple threads
7000 should not be able to initialize the variable more than
7001 once. */
7003 /* Create the guard variable. */
7004 guard = get_guard (decl);
7006 /* This optimization isn't safe on targets with relaxed memory
7007 consistency. On such targets we force synchronization in
7008 __cxa_guard_acquire. */
7009 if (!targetm.relaxed_ordering || !thread_guard)
7011 /* Begin the conditional initialization. */
7012 if_stmt = begin_if_stmt ();
7013 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
7014 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7017 if (thread_guard)
7019 tree vfntype = NULL_TREE;
7020 tree acquire_name, release_name, abort_name;
7021 tree acquire_fn, release_fn, abort_fn;
7022 guard_addr = build_address (guard);
7024 acquire_name = get_identifier ("__cxa_guard_acquire");
7025 release_name = get_identifier ("__cxa_guard_release");
7026 abort_name = get_identifier ("__cxa_guard_abort");
7027 acquire_fn = identifier_global_value (acquire_name);
7028 release_fn = identifier_global_value (release_name);
7029 abort_fn = identifier_global_value (abort_name);
7030 if (!acquire_fn)
7031 acquire_fn = push_library_fn
7032 (acquire_name, build_function_type_list (integer_type_node,
7033 TREE_TYPE (guard_addr),
7034 NULL_TREE),
7035 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
7036 if (!release_fn || !abort_fn)
7037 vfntype = build_function_type_list (void_type_node,
7038 TREE_TYPE (guard_addr),
7039 NULL_TREE);
7040 if (!release_fn)
7041 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
7042 ECF_NOTHROW | ECF_LEAF);
7043 if (!abort_fn)
7044 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
7045 ECF_NOTHROW | ECF_LEAF);
7047 inner_if_stmt = begin_if_stmt ();
7048 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
7049 inner_if_stmt);
7051 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7052 begin = get_target_expr (boolean_false_node);
7053 flag = TARGET_EXPR_SLOT (begin);
7055 TARGET_EXPR_CLEANUP (begin)
7056 = build3 (COND_EXPR, void_type_node, flag,
7057 void_zero_node,
7058 build_call_n (abort_fn, 1, guard_addr));
7059 CLEANUP_EH_ONLY (begin) = 1;
7061 /* Do the initialization itself. */
7062 init = add_stmt_to_compound (begin, init);
7063 init = add_stmt_to_compound
7064 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7065 init = add_stmt_to_compound
7066 (init, build_call_n (release_fn, 1, guard_addr));
7068 else
7069 init = add_stmt_to_compound (init, set_guard (guard));
7071 /* Use atexit to register a function for destroying this static
7072 variable. */
7073 init = add_stmt_to_compound (init, register_dtor_fn (decl));
7075 finish_expr_stmt (init);
7077 if (thread_guard)
7079 finish_compound_stmt (inner_then_clause);
7080 finish_then_clause (inner_if_stmt);
7081 finish_if_stmt (inner_if_stmt);
7084 if (!targetm.relaxed_ordering || !thread_guard)
7086 finish_compound_stmt (then_clause);
7087 finish_then_clause (if_stmt);
7088 finish_if_stmt (if_stmt);
7091 else if (DECL_THREAD_LOCAL_P (decl))
7092 tls_aggregates = tree_cons (init, decl, tls_aggregates);
7093 else
7094 static_aggregates = tree_cons (init, decl, static_aggregates);
7098 /* Make TYPE a complete type based on INITIAL_VALUE.
7099 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7100 2 if there was no information (in which case assume 0 if DO_DEFAULT),
7101 3 if the initializer list is empty (in pedantic mode). */
7104 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7106 int failure;
7107 tree type, elt_type;
7109 if (initial_value)
7111 unsigned HOST_WIDE_INT i;
7112 tree value;
7114 /* An array of character type can be initialized from a
7115 brace-enclosed string constant.
7117 FIXME: this code is duplicated from reshape_init. Probably
7118 we should just call reshape_init here? */
7119 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7120 && TREE_CODE (initial_value) == CONSTRUCTOR
7121 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
7123 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
7124 tree value = (*v)[0].value;
7126 if (TREE_CODE (value) == STRING_CST
7127 && v->length () == 1)
7128 initial_value = value;
7131 /* If any of the elements are parameter packs, we can't actually
7132 complete this type now because the array size is dependent. */
7133 if (TREE_CODE (initial_value) == CONSTRUCTOR)
7135 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
7136 i, value)
7138 if (PACK_EXPANSION_P (value))
7139 return 0;
7144 failure = complete_array_type (ptype, initial_value, do_default);
7146 /* We can create the array before the element type is complete, which
7147 means that we didn't have these two bits set in the original type
7148 either. In completing the type, we are expected to propagate these
7149 bits. See also complete_type which does the same thing for arrays
7150 of fixed size. */
7151 type = *ptype;
7152 if (TYPE_DOMAIN (type))
7154 elt_type = TREE_TYPE (type);
7155 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7156 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7157 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7160 return failure;
7163 /* As above, but either give an error or reject zero-size arrays, depending
7164 on COMPLAIN. */
7167 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7168 bool do_default, tsubst_flags_t complain)
7170 int failure;
7171 bool sfinae = !(complain & tf_error);
7172 /* In SFINAE context we can't be lenient about zero-size arrays. */
7173 if (sfinae)
7174 ++pedantic;
7175 failure = cp_complete_array_type (ptype, initial_value, do_default);
7176 if (sfinae)
7177 --pedantic;
7178 if (failure)
7180 if (sfinae)
7181 /* Not an error. */;
7182 else if (failure == 1)
7183 error ("initializer fails to determine size of %qT", *ptype);
7184 else if (failure == 2)
7186 if (do_default)
7187 error ("array size missing in %qT", *ptype);
7189 else if (failure == 3)
7190 error ("zero-size array %qT", *ptype);
7191 *ptype = error_mark_node;
7193 return failure;
7196 /* Return zero if something is declared to be a member of type
7197 CTYPE when in the context of CUR_TYPE. STRING is the error
7198 message to print in that case. Otherwise, quietly return 1. */
7200 static int
7201 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7203 if (ctype && ctype != cur_type)
7205 if (flags == DTOR_FLAG)
7206 error ("destructor for alien class %qT cannot be a member", ctype);
7207 else
7208 error ("constructor for alien class %qT cannot be a member", ctype);
7209 return 0;
7211 return 1;
7214 /* Subroutine of `grokdeclarator'. */
7216 /* Generate errors possibly applicable for a given set of specifiers.
7217 This is for ARM $7.1.2. */
7219 static void
7220 bad_specifiers (tree object,
7221 enum bad_spec_place type,
7222 int virtualp,
7223 int quals,
7224 int inlinep,
7225 int friendp,
7226 int raises)
7228 switch (type)
7230 case BSP_VAR:
7231 if (virtualp)
7232 error ("%qD declared as a %<virtual%> variable", object);
7233 if (inlinep)
7234 error ("%qD declared as an %<inline%> variable", object);
7235 if (quals)
7236 error ("%<const%> and %<volatile%> function specifiers on "
7237 "%qD invalid in variable declaration", object);
7238 break;
7239 case BSP_PARM:
7240 if (virtualp)
7241 error ("%qD declared as a %<virtual%> parameter", object);
7242 if (inlinep)
7243 error ("%qD declared as an %<inline%> parameter", object);
7244 if (quals)
7245 error ("%<const%> and %<volatile%> function specifiers on "
7246 "%qD invalid in parameter declaration", object);
7247 break;
7248 case BSP_TYPE:
7249 if (virtualp)
7250 error ("%qD declared as a %<virtual%> type", object);
7251 if (inlinep)
7252 error ("%qD declared as an %<inline%> type", object);
7253 if (quals)
7254 error ("%<const%> and %<volatile%> function specifiers on "
7255 "%qD invalid in type declaration", object);
7256 break;
7257 case BSP_FIELD:
7258 if (virtualp)
7259 error ("%qD declared as a %<virtual%> field", object);
7260 if (inlinep)
7261 error ("%qD declared as an %<inline%> field", object);
7262 if (quals)
7263 error ("%<const%> and %<volatile%> function specifiers on "
7264 "%qD invalid in field declaration", object);
7265 break;
7266 default:
7267 gcc_unreachable();
7269 if (friendp)
7270 error ("%q+D declared as a friend", object);
7271 if (raises
7272 && (TREE_CODE (object) == TYPE_DECL
7273 || (!TYPE_PTRFN_P (TREE_TYPE (object))
7274 && !TYPE_REFFN_P (TREE_TYPE (object))
7275 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7276 error ("%q+D declared with an exception specification", object);
7279 /* DECL is a member function or static data member and is presently
7280 being defined. Check that the definition is taking place in a
7281 valid namespace. */
7283 static void
7284 check_class_member_definition_namespace (tree decl)
7286 /* These checks only apply to member functions and static data
7287 members. */
7288 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
7289 /* We check for problems with specializations in pt.c in
7290 check_specialization_namespace, where we can issue better
7291 diagnostics. */
7292 if (processing_specialization)
7293 return;
7294 /* There are no restrictions on the placement of
7295 explicit instantiations. */
7296 if (processing_explicit_instantiation)
7297 return;
7298 /* [class.mfct]
7300 A member function definition that appears outside of the
7301 class definition shall appear in a namespace scope enclosing
7302 the class definition.
7304 [class.static.data]
7306 The definition for a static data member shall appear in a
7307 namespace scope enclosing the member's class definition. */
7308 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7309 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7310 decl, DECL_CONTEXT (decl));
7313 /* Build a PARM_DECL for the "this" parameter. TYPE is the
7314 METHOD_TYPE for a non-static member function; QUALS are the
7315 cv-qualifiers that apply to the function. */
7317 tree
7318 build_this_parm (tree type, cp_cv_quals quals)
7320 tree this_type;
7321 tree qual_type;
7322 tree parm;
7323 cp_cv_quals this_quals;
7325 if (CLASS_TYPE_P (type))
7327 this_type
7328 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7329 this_type = build_pointer_type (this_type);
7331 else
7332 this_type = type_of_this_parm (type);
7333 /* The `this' parameter is implicitly `const'; it cannot be
7334 assigned to. */
7335 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7336 qual_type = cp_build_qualified_type (this_type, this_quals);
7337 parm = build_artificial_parm (this_identifier, qual_type);
7338 cp_apply_type_quals_to_decl (this_quals, parm);
7339 return parm;
7342 /* DECL is a static member function. Complain if it was declared
7343 with function-cv-quals. */
7345 static void
7346 check_static_quals (tree decl, cp_cv_quals quals)
7348 if (quals != TYPE_UNQUALIFIED)
7349 error ("static member function %q#D declared with type qualifiers",
7350 decl);
7353 // Check that FN takes no arguments and returns bool.
7354 static void
7355 check_concept_fn (tree fn)
7357 // A constraint is nullary.
7358 if (DECL_ARGUMENTS (fn))
7359 error ("concept %q#D declared with function parameters", fn);
7361 // The result type must be convertible to bool.
7362 if (!same_type_p (TREE_TYPE (TREE_TYPE (fn)), boolean_type_node))
7363 error ("concept %q#D result must be bool", fn);
7366 /* Helper function. Replace the temporary this parameter injected
7367 during cp_finish_omp_declare_simd with the real this parameter. */
7369 static tree
7370 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
7372 tree this_parm = (tree) data;
7373 if (TREE_CODE (*tp) == PARM_DECL
7374 && DECL_NAME (*tp) == this_identifier
7375 && *tp != this_parm)
7376 *tp = this_parm;
7377 else if (TYPE_P (*tp))
7378 *walk_subtrees = 0;
7379 return NULL_TREE;
7382 /* CTYPE is class type, or null if non-class.
7383 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7384 or METHOD_TYPE.
7385 DECLARATOR is the function's name.
7386 PARMS is a chain of PARM_DECLs for the function.
7387 VIRTUALP is truthvalue of whether the function is virtual or not.
7388 FLAGS are to be passed through to `grokclassfn'.
7389 QUALS are qualifiers indicating whether the function is `const'
7390 or `volatile'.
7391 RAISES is a list of exceptions that this function can raise.
7392 CHECK is 1 if we must find this method in CTYPE, 0 if we should
7393 not look, and -1 if we should not call `grokclassfn' at all.
7395 SFK is the kind of special function (if any) for the new function.
7397 Returns `NULL_TREE' if something goes wrong, after issuing
7398 applicable error messages. */
7400 static tree
7401 grokfndecl (tree ctype,
7402 tree type,
7403 tree declarator,
7404 tree parms,
7405 tree orig_declarator,
7406 int virtualp,
7407 enum overload_flags flags,
7408 cp_cv_quals quals,
7409 cp_ref_qualifier rqual,
7410 tree raises,
7411 int check,
7412 int friendp,
7413 int publicp,
7414 int inlinep,
7415 special_function_kind sfk,
7416 bool funcdef_flag,
7417 int template_count,
7418 tree in_namespace,
7419 tree* attrlist,
7420 location_t location)
7422 tree decl;
7423 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7424 tree t;
7426 // Was the concept specifier present?
7427 bool concept_p = inlinep & 4;
7429 if (rqual)
7430 type = build_ref_qualified_type (type, rqual);
7431 if (raises)
7432 type = build_exception_variant (type, raises);
7434 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7436 /* If we have an explicit location, use it, otherwise use whatever
7437 build_lang_decl used (probably input_location). */
7438 if (location != UNKNOWN_LOCATION)
7439 DECL_SOURCE_LOCATION (decl) = location;
7441 if (TREE_CODE (type) == METHOD_TYPE)
7443 tree parm;
7444 parm = build_this_parm (type, quals);
7445 DECL_CHAIN (parm) = parms;
7446 parms = parm;
7448 DECL_ARGUMENTS (decl) = parms;
7449 for (t = parms; t; t = DECL_CHAIN (t))
7450 DECL_CONTEXT (t) = decl;
7451 /* Propagate volatile out from type to decl. */
7452 if (TYPE_VOLATILE (type))
7453 TREE_THIS_VOLATILE (decl) = 1;
7455 /* Setup decl according to sfk. */
7456 switch (sfk)
7458 case sfk_constructor:
7459 case sfk_copy_constructor:
7460 case sfk_move_constructor:
7461 DECL_CONSTRUCTOR_P (decl) = 1;
7462 break;
7463 case sfk_destructor:
7464 DECL_DESTRUCTOR_P (decl) = 1;
7465 break;
7466 default:
7467 break;
7470 /* If pointers to member functions use the least significant bit to
7471 indicate whether a function is virtual, ensure a pointer
7472 to this function will have that bit clear. */
7473 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7474 && TREE_CODE (type) == METHOD_TYPE
7475 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7476 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7478 if (friendp
7479 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7481 if (funcdef_flag)
7482 error
7483 ("defining explicit specialization %qD in friend declaration",
7484 orig_declarator);
7485 else
7487 tree fns = TREE_OPERAND (orig_declarator, 0);
7488 tree args = TREE_OPERAND (orig_declarator, 1);
7490 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7492 /* Something like `template <class T> friend void f<T>()'. */
7493 error ("invalid use of template-id %qD in declaration "
7494 "of primary template",
7495 orig_declarator);
7496 return NULL_TREE;
7499 // Do not allow the declaration of constrained friend template
7500 // specializations. They cannot be instantiated since they
7501 // must match a fully instantiated function, and non-dependent
7502 // functions cannot be constrained.
7503 if (current_template_reqs)
7505 error ("constraints are not allowed in declaration "
7506 "of friend template specialization %qD", decl);
7507 return NULL_TREE;
7510 /* A friend declaration of the form friend void f<>(). Record
7511 the information in the TEMPLATE_ID_EXPR. */
7512 SET_DECL_IMPLICIT_INSTANTIATION (decl);
7514 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
7515 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7517 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7518 if (TREE_PURPOSE (t)
7519 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7521 error ("default arguments are not allowed in declaration "
7522 "of friend template specialization %qD",
7523 decl);
7524 return NULL_TREE;
7527 if (inlinep & 1)
7528 error ("%<inline%> is not allowed in declaration of friend "
7529 "template specialization %qD",
7530 decl);
7531 if (inlinep & 2)
7532 error ("%<constexpr%> is not allowed in declaration of friend "
7533 "template specialization %qD",
7534 decl);
7535 if (inlinep)
7536 return NULL_TREE;
7540 /* If this decl has namespace scope, set that up. */
7541 if (in_namespace)
7542 set_decl_namespace (decl, in_namespace, friendp);
7543 else if (!ctype)
7544 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7546 /* `main' and builtins have implicit 'C' linkage. */
7547 if ((MAIN_NAME_P (declarator)
7548 || (IDENTIFIER_LENGTH (declarator) > 10
7549 && IDENTIFIER_POINTER (declarator)[0] == '_'
7550 && IDENTIFIER_POINTER (declarator)[1] == '_'
7551 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
7552 || (targetcm.cxx_implicit_extern_c
7553 && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
7554 && current_lang_name == lang_name_cplusplus
7555 && ctype == NULL_TREE
7556 && DECL_FILE_SCOPE_P (decl))
7557 SET_DECL_LANGUAGE (decl, lang_c);
7559 /* Should probably propagate const out from type to decl I bet (mrs). */
7560 if (staticp)
7562 DECL_STATIC_FUNCTION_P (decl) = 1;
7563 DECL_CONTEXT (decl) = ctype;
7566 if (ctype)
7568 DECL_CONTEXT (decl) = ctype;
7569 if (funcdef_flag)
7570 check_class_member_definition_namespace (decl);
7573 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7575 if (PROCESSING_REAL_TEMPLATE_DECL_P())
7576 error ("cannot declare %<::main%> to be a template");
7577 if (inlinep & 1)
7578 error ("cannot declare %<::main%> to be inline");
7579 if (inlinep & 2)
7580 error ("cannot declare %<::main%> to be constexpr");
7581 if (!publicp)
7582 error ("cannot declare %<::main%> to be static");
7583 inlinep = 0;
7584 publicp = 1;
7587 /* Members of anonymous types and local classes have no linkage; make
7588 them internal. If a typedef is made later, this will be changed. */
7589 if (ctype && (TYPE_ANONYMOUS_P (ctype)
7590 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7591 publicp = 0;
7593 if (publicp && cxx_dialect == cxx98)
7595 /* [basic.link]: A name with no linkage (notably, the name of a class
7596 or enumeration declared in a local scope) shall not be used to
7597 declare an entity with linkage.
7599 DR 757 relaxes this restriction for C++0x. */
7600 t = no_linkage_check (TREE_TYPE (decl),
7601 /*relaxed_p=*/false);
7602 if (t)
7604 if (TYPE_ANONYMOUS_P (t))
7606 if (DECL_EXTERN_C_P (decl))
7607 /* Allow this; it's pretty common in C. */;
7608 else
7610 permerror (input_location, "anonymous type with no linkage "
7611 "used to declare function %q#D with linkage",
7612 decl);
7613 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7614 permerror (input_location, "%q+#D does not refer to the unqualified "
7615 "type, so it is not used for linkage",
7616 TYPE_NAME (t));
7619 else
7620 permerror (input_location, "type %qT with no linkage used to "
7621 "declare function %q#D with linkage", t, decl);
7625 TREE_PUBLIC (decl) = publicp;
7626 if (! publicp)
7628 DECL_INTERFACE_KNOWN (decl) = 1;
7629 DECL_NOT_REALLY_EXTERN (decl) = 1;
7632 /* If the declaration was declared inline, mark it as such. */
7633 if (inlinep)
7634 DECL_DECLARED_INLINE_P (decl) = 1;
7635 if (inlinep & 2)
7636 DECL_DECLARED_CONSTEXPR_P (decl) = true;
7638 // If the concept declaration specifier was found, check
7639 // that the declaration satisfies the necessary requirements.
7640 if (inlinep & 4)
7642 DECL_DECLARED_CONCEPT_P (decl) = true;
7643 check_concept_fn (decl);
7646 DECL_EXTERNAL (decl) = 1;
7647 if (TREE_CODE (type) == FUNCTION_TYPE)
7649 if (quals)
7651 error (ctype
7652 ? G_("static member function %qD cannot have cv-qualifier")
7653 : G_("non-member function %qD cannot have cv-qualifier"),
7654 decl);
7655 quals = TYPE_UNQUALIFIED;
7658 if (rqual)
7660 error (ctype
7661 ? G_("static member function %qD cannot have ref-qualifier")
7662 : G_("non-member function %qD cannot have ref-qualifier"),
7663 decl);
7664 rqual = REF_QUAL_NONE;
7668 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7669 && !grok_op_properties (decl, /*complain=*/true))
7670 return NULL_TREE;
7671 else if (UDLIT_OPER_P (DECL_NAME (decl)))
7673 bool long_long_unsigned_p;
7674 bool long_double_p;
7675 const char *suffix = NULL;
7676 /* [over.literal]/6: Literal operators shall not have C linkage. */
7677 if (DECL_LANGUAGE (decl) == lang_c)
7679 error ("literal operator with C linkage");
7680 return NULL_TREE;
7683 if (DECL_NAMESPACE_SCOPE_P (decl))
7685 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7686 &long_double_p))
7688 error ("%qD has invalid argument list", decl);
7689 return NULL_TREE;
7692 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7693 if (long_long_unsigned_p)
7695 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
7696 warning (0, "integer suffix %<%s%>"
7697 " shadowed by implementation", suffix);
7699 else if (long_double_p)
7701 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
7702 warning (0, "floating point suffix %<%s%>"
7703 " shadowed by implementation", suffix);
7706 else
7708 error ("%qD must be a non-member function", decl);
7709 return NULL_TREE;
7713 if (funcdef_flag)
7714 /* Make the init_value nonzero so pushdecl knows this is not
7715 tentative. error_mark_node is replaced later with the BLOCK. */
7716 DECL_INITIAL (decl) = error_mark_node;
7718 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7719 TREE_NOTHROW (decl) = 1;
7721 if (flag_openmp)
7723 /* Adjust "omp declare simd" attributes. */
7724 tree ods = lookup_attribute ("omp declare simd", *attrlist);
7725 if (ods)
7727 tree attr;
7728 for (attr = ods; attr;
7729 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
7731 if (TREE_CODE (type) == METHOD_TYPE)
7732 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
7733 DECL_ARGUMENTS (decl), NULL);
7734 if (TREE_VALUE (attr) != NULL_TREE)
7736 tree cl = TREE_VALUE (TREE_VALUE (attr));
7737 cl = c_omp_declare_simd_clauses_to_numbers
7738 (DECL_ARGUMENTS (decl), cl);
7739 if (cl)
7740 TREE_VALUE (TREE_VALUE (attr)) = cl;
7741 else
7742 TREE_VALUE (attr) = NULL_TREE;
7748 /* Caller will do the rest of this. */
7749 if (check < 0)
7750 return decl;
7752 if (ctype != NULL_TREE)
7753 grokclassfn (ctype, decl, flags);
7755 /* 12.4/3 */
7756 if (cxx_dialect >= cxx11
7757 && DECL_DESTRUCTOR_P (decl)
7758 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
7759 && !processing_template_decl)
7760 deduce_noexcept_on_destructor (decl);
7762 decl = check_explicit_specialization (orig_declarator, decl,
7763 template_count,
7764 2 * funcdef_flag +
7765 4 * (friendp != 0) +
7766 8 * concept_p);
7767 if (decl == error_mark_node)
7768 return NULL_TREE;
7770 if (DECL_STATIC_FUNCTION_P (decl))
7771 check_static_quals (decl, quals);
7773 if (attrlist)
7775 cplus_decl_attributes (&decl, *attrlist, 0);
7776 *attrlist = NULL_TREE;
7779 /* Check main's type after attributes have been applied. */
7780 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7782 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7783 integer_type_node))
7785 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7786 tree newtype;
7787 error ("%<::main%> must return %<int%>");
7788 newtype = build_function_type (integer_type_node, oldtypeargs);
7789 TREE_TYPE (decl) = newtype;
7791 if (warn_main)
7792 check_main_parameter_types (decl);
7795 if (ctype != NULL_TREE
7796 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7797 && check)
7799 tree old_decl = check_classfn (ctype, decl,
7800 (processing_template_decl
7801 > template_class_depth (ctype))
7802 ? current_template_parms
7803 : NULL_TREE);
7805 if (old_decl == error_mark_node)
7806 return NULL_TREE;
7808 if (old_decl)
7810 tree ok;
7811 tree pushed_scope;
7813 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7814 /* Because grokfndecl is always supposed to return a
7815 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7816 here. We depend on our callers to figure out that its
7817 really a template that's being returned. */
7818 old_decl = DECL_TEMPLATE_RESULT (old_decl);
7820 if (DECL_STATIC_FUNCTION_P (old_decl)
7821 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7823 /* Remove the `this' parm added by grokclassfn. */
7824 revert_static_member_fn (decl);
7825 check_static_quals (decl, quals);
7827 if (DECL_ARTIFICIAL (old_decl))
7829 error ("definition of implicitly-declared %qD", old_decl);
7830 return NULL_TREE;
7832 else if (DECL_DEFAULTED_FN (old_decl))
7834 error ("definition of explicitly-defaulted %q+D", decl);
7835 error ("%q+#D explicitly defaulted here", old_decl);
7836 return NULL_TREE;
7839 /* Since we've smashed OLD_DECL to its
7840 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
7841 if (TREE_CODE (decl) == TEMPLATE_DECL)
7842 decl = DECL_TEMPLATE_RESULT (decl);
7844 /* Attempt to merge the declarations. This can fail, in
7845 the case of some invalid specialization declarations. */
7846 pushed_scope = push_scope (ctype);
7847 ok = duplicate_decls (decl, old_decl, friendp);
7848 if (pushed_scope)
7849 pop_scope (pushed_scope);
7850 if (!ok)
7852 error ("no %q#D member function declared in class %qT",
7853 decl, ctype);
7854 return NULL_TREE;
7856 return old_decl;
7860 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7861 return NULL_TREE;
7863 if (ctype == NULL_TREE || check)
7864 return decl;
7866 if (virtualp)
7867 DECL_VIRTUAL_P (decl) = 1;
7869 return decl;
7872 /* decl is a FUNCTION_DECL.
7873 specifiers are the parsed virt-specifiers.
7875 Set flags to reflect the virt-specifiers.
7877 Returns decl. */
7879 static tree
7880 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7882 if (decl == NULL_TREE)
7883 return decl;
7884 if (specifiers & VIRT_SPEC_OVERRIDE)
7885 DECL_OVERRIDE_P (decl) = 1;
7886 if (specifiers & VIRT_SPEC_FINAL)
7887 DECL_FINAL_P (decl) = 1;
7888 return decl;
7891 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
7892 the linkage that DECL will receive in the object file. */
7894 static void
7895 set_linkage_for_static_data_member (tree decl)
7897 /* A static data member always has static storage duration and
7898 external linkage. Note that static data members are forbidden in
7899 local classes -- the only situation in which a class has
7900 non-external linkage. */
7901 TREE_PUBLIC (decl) = 1;
7902 TREE_STATIC (decl) = 1;
7903 /* For non-template classes, static data members are always put
7904 out in exactly those files where they are defined, just as
7905 with ordinary namespace-scope variables. */
7906 if (!processing_template_decl)
7907 DECL_INTERFACE_KNOWN (decl) = 1;
7910 /* Create a VAR_DECL named NAME with the indicated TYPE.
7912 If SCOPE is non-NULL, it is the class type or namespace containing
7913 the variable. If SCOPE is NULL, the variable should is created in
7914 the innermost enclosings scope. */
7916 static tree
7917 grokvardecl (tree type,
7918 tree name,
7919 const cp_decl_specifier_seq *declspecs,
7920 int initialized,
7921 int constp,
7922 tree scope)
7924 tree decl;
7925 tree explicit_scope;
7927 gcc_assert (!name || identifier_p (name));
7929 /* Compute the scope in which to place the variable, but remember
7930 whether or not that scope was explicitly specified by the user. */
7931 explicit_scope = scope;
7932 if (!scope)
7934 /* An explicit "extern" specifier indicates a namespace-scope
7935 variable. */
7936 if (declspecs->storage_class == sc_extern)
7937 scope = current_decl_namespace ();
7938 else if (!at_function_scope_p ())
7939 scope = current_scope ();
7942 if (scope
7943 && (/* If the variable is a namespace-scope variable declared in a
7944 template, we need DECL_LANG_SPECIFIC. */
7945 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7946 /* Similarly for namespace-scope variables with language linkage
7947 other than C++. */
7948 || (TREE_CODE (scope) == NAMESPACE_DECL
7949 && current_lang_name != lang_name_cplusplus)
7950 /* Similarly for static data members. */
7951 || TYPE_P (scope)))
7952 decl = build_lang_decl (VAR_DECL, name, type);
7953 else
7954 decl = build_decl (input_location, VAR_DECL, name, type);
7956 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7957 set_decl_namespace (decl, explicit_scope, 0);
7958 else
7959 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7961 if (declspecs->storage_class == sc_extern)
7963 DECL_THIS_EXTERN (decl) = 1;
7964 DECL_EXTERNAL (decl) = !initialized;
7967 if (DECL_CLASS_SCOPE_P (decl))
7969 set_linkage_for_static_data_member (decl);
7970 /* This function is only called with out-of-class definitions. */
7971 DECL_EXTERNAL (decl) = 0;
7972 check_class_member_definition_namespace (decl);
7974 /* At top level, either `static' or no s.c. makes a definition
7975 (perhaps tentative), and absence of `static' makes it public. */
7976 else if (toplevel_bindings_p ())
7978 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7979 && (DECL_THIS_EXTERN (decl) || ! constp));
7980 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7982 /* Not at top level, only `static' makes a static definition. */
7983 else
7985 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7986 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7989 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
7991 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7992 if (declspecs->gnu_thread_keyword_p)
7993 DECL_GNU_TLS_P (decl) = true;
7996 /* If the type of the decl has no linkage, make sure that we'll
7997 notice that in mark_used. */
7998 if (cxx_dialect > cxx98
7999 && decl_linkage (decl) != lk_none
8000 && DECL_LANG_SPECIFIC (decl) == NULL
8001 && !DECL_EXTERN_C_P (decl)
8002 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
8003 retrofit_lang_decl (decl);
8005 if (TREE_PUBLIC (decl))
8007 /* [basic.link]: A name with no linkage (notably, the name of a class
8008 or enumeration declared in a local scope) shall not be used to
8009 declare an entity with linkage.
8011 DR 757 relaxes this restriction for C++0x. */
8012 tree t = (cxx_dialect > cxx98 ? NULL_TREE
8013 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
8014 if (t)
8016 if (TYPE_ANONYMOUS_P (t))
8018 if (DECL_EXTERN_C_P (decl))
8019 /* Allow this; it's pretty common in C. */
8021 else
8023 /* DRs 132, 319 and 389 seem to indicate types with
8024 no linkage can only be used to declare extern "C"
8025 entities. Since it's not always an error in the
8026 ISO C++ 90 Standard, we only issue a warning. */
8027 warning (0, "anonymous type with no linkage used to declare "
8028 "variable %q#D with linkage", decl);
8029 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
8030 warning (0, "%q+#D does not refer to the unqualified "
8031 "type, so it is not used for linkage",
8032 TYPE_NAME (t));
8035 else
8036 warning (0, "type %qT with no linkage used to declare variable "
8037 "%q#D with linkage", t, decl);
8040 else
8041 DECL_INTERFACE_KNOWN (decl) = 1;
8043 return decl;
8046 /* Create and return a canonical pointer to member function type, for
8047 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8049 tree
8050 build_ptrmemfunc_type (tree type)
8052 tree field, fields;
8053 tree t;
8054 tree unqualified_variant = NULL_TREE;
8056 if (type == error_mark_node)
8057 return type;
8059 /* If a canonical type already exists for this type, use it. We use
8060 this method instead of type_hash_canon, because it only does a
8061 simple equality check on the list of field members. */
8063 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8064 return t;
8066 /* Make sure that we always have the unqualified pointer-to-member
8067 type first. */
8068 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
8069 unqualified_variant
8070 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8072 t = make_class_type (RECORD_TYPE);
8073 xref_basetypes (t, NULL_TREE);
8075 /* Let the front end know this is a pointer to member function... */
8076 TYPE_PTRMEMFUNC_FLAG (t) = 1;
8077 /* ... and not really a class type. */
8078 SET_CLASS_TYPE_P (t, 0);
8080 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
8081 fields = field;
8083 field = build_decl (input_location, FIELD_DECL, delta_identifier,
8084 delta_type_node);
8085 DECL_CHAIN (field) = fields;
8086 fields = field;
8088 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8090 /* Zap out the name so that the back end will give us the debugging
8091 information for this anonymous RECORD_TYPE. */
8092 TYPE_NAME (t) = NULL_TREE;
8094 /* If this is not the unqualified form of this pointer-to-member
8095 type, set the TYPE_MAIN_VARIANT for this type to be the
8096 unqualified type. Since they are actually RECORD_TYPEs that are
8097 not variants of each other, we must do this manually.
8098 As we just built a new type there is no need to do yet another copy. */
8099 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
8101 int type_quals = cp_type_quals (type);
8102 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
8103 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
8104 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
8105 TYPE_MAIN_VARIANT (t) = unqualified_variant;
8106 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8107 TYPE_NEXT_VARIANT (unqualified_variant) = t;
8108 TREE_TYPE (TYPE_BINFO (t)) = t;
8111 /* Cache this pointer-to-member type so that we can find it again
8112 later. */
8113 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8115 if (TYPE_STRUCTURAL_EQUALITY_P (type))
8116 SET_TYPE_STRUCTURAL_EQUALITY (t);
8117 else if (TYPE_CANONICAL (type) != type)
8118 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
8120 return t;
8123 /* Create and return a pointer to data member type. */
8125 tree
8126 build_ptrmem_type (tree class_type, tree member_type)
8128 if (TREE_CODE (member_type) == METHOD_TYPE)
8130 cp_cv_quals quals = type_memfn_quals (member_type);
8131 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
8132 member_type = build_memfn_type (member_type, class_type, quals, rqual);
8133 return build_ptrmemfunc_type (build_pointer_type (member_type));
8135 else
8137 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
8138 return build_offset_type (class_type, member_type);
8142 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8143 Check to see that the definition is valid. Issue appropriate error
8144 messages. Return 1 if the definition is particularly bad, or 0
8145 otherwise. */
8147 static int
8148 check_static_variable_definition (tree decl, tree type)
8150 /* Can't check yet if we don't know the type. */
8151 if (dependent_type_p (type))
8152 return 0;
8153 /* If DECL is declared constexpr, we'll do the appropriate checks
8154 in check_initializer. */
8155 if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8156 return 0;
8157 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8159 if (!COMPLETE_TYPE_P (type))
8160 error ("in-class initialization of static data member %q#D of "
8161 "incomplete type", decl);
8162 else if (literal_type_p (type))
8163 permerror (input_location,
8164 "%<constexpr%> needed for in-class initialization of "
8165 "static data member %q#D of non-integral type", decl);
8166 else
8167 error ("in-class initialization of static data member %q#D of "
8168 "non-literal type", decl);
8169 return 1;
8172 /* Motion 10 at San Diego: If a static const integral data member is
8173 initialized with an integral constant expression, the initializer
8174 may appear either in the declaration (within the class), or in
8175 the definition, but not both. If it appears in the class, the
8176 member is a member constant. The file-scope definition is always
8177 required. */
8178 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8180 error ("invalid in-class initialization of static data member "
8181 "of non-integral type %qT",
8182 type);
8183 return 1;
8185 else if (!CP_TYPE_CONST_P (type))
8186 error ("ISO C++ forbids in-class initialization of non-const "
8187 "static member %qD",
8188 decl);
8189 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8190 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8191 "%qD of non-integral type %qT", decl, type);
8193 return 0;
8196 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
8197 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8198 expressions out into temporary variables so that walk_tree doesn't
8199 step into them (c++/15764). */
8201 static tree
8202 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8204 struct pointer_set_t *pset = (struct pointer_set_t *)data;
8205 tree expr = *expr_p;
8206 if (TREE_CODE (expr) == SAVE_EXPR)
8208 tree op = TREE_OPERAND (expr, 0);
8209 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8210 if (TREE_SIDE_EFFECTS (op))
8211 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8212 *walk_subtrees = 0;
8214 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8215 *walk_subtrees = 0;
8216 return NULL;
8219 /* Entry point for the above. */
8221 static void
8222 stabilize_vla_size (tree size)
8224 struct pointer_set_t *pset = pointer_set_create ();
8225 /* Break out any function calls into temporary variables. */
8226 cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
8227 pointer_set_destroy (pset);
8230 /* Helper function for compute_array_index_type. Look for SIZEOF_EXPR
8231 not inside of SAVE_EXPR and fold them. */
8233 static tree
8234 fold_sizeof_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8236 tree expr = *expr_p;
8237 if (TREE_CODE (expr) == SAVE_EXPR || TYPE_P (expr))
8238 *walk_subtrees = 0;
8239 else if (TREE_CODE (expr) == SIZEOF_EXPR)
8241 *(bool *)data = true;
8242 if (SIZEOF_EXPR_TYPE_P (expr))
8243 expr = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (expr, 0)),
8244 SIZEOF_EXPR, false);
8245 else if (TYPE_P (TREE_OPERAND (expr, 0)))
8246 expr = cxx_sizeof_or_alignof_type (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8247 false);
8248 else
8249 expr = cxx_sizeof_or_alignof_expr (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8250 false);
8251 if (expr == error_mark_node)
8252 expr = size_one_node;
8253 *expr_p = expr;
8254 *walk_subtrees = 0;
8256 return NULL;
8259 /* Given the SIZE (i.e., number of elements) in an array, compute an
8260 appropriate index type for the array. If non-NULL, NAME is the
8261 name of the thing being declared. */
8263 tree
8264 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8266 tree itype;
8267 tree osize = size;
8268 tree abi_1_itype = NULL_TREE;
8270 if (error_operand_p (size))
8271 return error_mark_node;
8273 if (!type_dependent_expression_p (size))
8275 tree type = TREE_TYPE (size);
8277 mark_rvalue_use (size);
8279 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
8280 && TREE_SIDE_EFFECTS (size))
8281 /* In C++98, we mark a non-constant array bound with a magic
8282 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
8283 else
8285 size = fold_non_dependent_expr_sfinae (size, complain);
8287 if (CLASS_TYPE_P (type)
8288 && CLASSTYPE_LITERAL_P (type))
8290 size = build_expr_type_conversion (WANT_INT, size, true);
8291 if (!size)
8293 if (!(complain & tf_error))
8294 return error_mark_node;
8295 if (name)
8296 error ("size of array %qD has non-integral type %qT",
8297 name, type);
8298 else
8299 error ("size of array has non-integral type %qT", type);
8300 size = integer_one_node;
8302 if (size == error_mark_node)
8303 return error_mark_node;
8304 type = TREE_TYPE (size);
8305 /* We didn't support this case in GCC 3.2, so don't bother
8306 trying to model it now in ABI v1. */
8307 abi_1_itype = error_mark_node;
8310 size = maybe_constant_value (size);
8311 if (!TREE_CONSTANT (size))
8312 size = osize;
8315 if (error_operand_p (size))
8316 return error_mark_node;
8318 /* The array bound must be an integer type. */
8319 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8321 if (!(complain & tf_error))
8322 return error_mark_node;
8323 if (name)
8324 error ("size of array %qD has non-integral type %qT", name, type);
8325 else
8326 error ("size of array has non-integral type %qT", type);
8327 size = integer_one_node;
8328 type = TREE_TYPE (size);
8332 /* A type is dependent if it is...an array type constructed from any
8333 dependent type or whose size is specified by a constant expression
8334 that is value-dependent. */
8335 /* We can only call value_dependent_expression_p on integral constant
8336 expressions; treat non-constant expressions as dependent, too. */
8337 if (processing_template_decl
8338 && (type_dependent_expression_p (size)
8339 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8341 /* We cannot do any checking for a SIZE that isn't known to be
8342 constant. Just build the index type and mark that it requires
8343 structural equality checks. */
8344 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8345 size, size_one_node));
8346 TYPE_DEPENDENT_P (itype) = 1;
8347 TYPE_DEPENDENT_P_VALID (itype) = 1;
8348 SET_TYPE_STRUCTURAL_EQUALITY (itype);
8349 return itype;
8352 if (!abi_version_at_least (2) && processing_template_decl
8353 && abi_1_itype == NULL_TREE)
8354 /* For abi-1, we handled all instances in templates the same way,
8355 even when they were non-dependent. This affects the manglings
8356 produced. So, we do the normal checking for non-dependent
8357 sizes, but at the end we'll return the same type that abi-1
8358 would have, but with TYPE_CANONICAL set to the "right"
8359 value that the current ABI would provide. */
8360 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8361 osize, integer_one_node));
8363 /* Normally, the array-bound will be a constant. */
8364 if (TREE_CODE (size) == INTEGER_CST)
8366 /* Check to see if the array bound overflowed. Make that an
8367 error, no matter how generous we're being. */
8368 constant_expression_error (size);
8370 /* An array must have a positive number of elements. */
8371 if (INT_CST_LT (size, integer_zero_node))
8373 if (!(complain & tf_error))
8374 return error_mark_node;
8375 if (name)
8376 error ("size of array %qD is negative", name);
8377 else
8378 error ("size of array is negative");
8379 size = integer_one_node;
8381 /* As an extension we allow zero-sized arrays. */
8382 else if (integer_zerop (size))
8384 if (!(complain & tf_error))
8385 /* We must fail if performing argument deduction (as
8386 indicated by the state of complain), so that
8387 another substitution can be found. */
8388 return error_mark_node;
8389 else if (in_system_header)
8390 /* Allow them in system headers because glibc uses them. */;
8391 else if (name)
8392 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8393 else
8394 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8397 else if (TREE_CONSTANT (size)
8398 /* We don't allow VLAs at non-function scopes, or during
8399 tentative template substitution. */
8400 || !at_function_scope_p ()
8401 || (cxx_dialect < cxx1y && !(complain & tf_error)))
8403 if (!(complain & tf_error))
8404 return error_mark_node;
8405 /* `(int) &fn' is not a valid array bound. */
8406 if (name)
8407 error ("size of array %qD is not an integral constant-expression",
8408 name);
8409 else
8410 error ("size of array is not an integral constant-expression");
8411 size = integer_one_node;
8413 else if (cxx_dialect < cxx1y && pedantic && warn_vla != 0)
8415 if (name)
8416 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8417 else
8418 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8420 else if (warn_vla > 0)
8422 if (name)
8423 warning (OPT_Wvla,
8424 "variable length array %qD is used", name);
8425 else
8426 warning (OPT_Wvla,
8427 "variable length array is used");
8430 if (processing_template_decl && !TREE_CONSTANT (size))
8431 /* A variable sized array. */
8432 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8433 else
8435 HOST_WIDE_INT saved_processing_template_decl;
8437 /* Compute the index of the largest element in the array. It is
8438 one less than the number of elements in the array. We save
8439 and restore PROCESSING_TEMPLATE_DECL so that computations in
8440 cp_build_binary_op will be appropriately folded. */
8441 saved_processing_template_decl = processing_template_decl;
8442 processing_template_decl = 0;
8443 itype = cp_build_binary_op (input_location,
8444 MINUS_EXPR,
8445 cp_convert (ssizetype, size, complain),
8446 cp_convert (ssizetype, integer_one_node,
8447 complain),
8448 complain);
8449 itype = fold (itype);
8450 processing_template_decl = saved_processing_template_decl;
8452 if (!TREE_CONSTANT (itype))
8454 /* A variable sized array. */
8455 itype = variable_size (itype);
8457 if (TREE_CODE (itype) != SAVE_EXPR)
8459 /* Look for SIZEOF_EXPRs in itype and fold them, otherwise
8460 they might survive till gimplification. */
8461 tree newitype = itype;
8462 bool found = false;
8463 cp_walk_tree_without_duplicates (&newitype,
8464 fold_sizeof_expr_r, &found);
8465 if (found)
8466 itype = variable_size (fold (newitype));
8469 stabilize_vla_size (itype);
8471 if (cxx_dialect >= cxx1y)
8473 /* If the VLA bound is larger than half the address space,
8474 or less than zero, throw std::bad_array_length. */
8475 tree comp = build2 (LT_EXPR, boolean_type_node, itype,
8476 ssize_int (-1));
8477 comp = build3 (COND_EXPR, void_type_node, comp,
8478 throw_bad_array_length (), void_zero_node);
8479 finish_expr_stmt (comp);
8481 else if (flag_sanitize & SANITIZE_VLA)
8483 /* From C++1y onwards, we throw an exception on a negative
8484 length size of an array; see above. */
8486 /* We have to add 1 -- in the ubsan routine we generate
8487 LE_EXPR rather than LT_EXPR. */
8488 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
8489 build_one_cst (TREE_TYPE (itype)));
8490 t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t),
8491 ubsan_instrument_vla (input_location, t), t);
8492 finish_expr_stmt (t);
8495 /* Make sure that there was no overflow when creating to a signed
8496 index type. (For example, on a 32-bit machine, an array with
8497 size 2^32 - 1 is too big.) */
8498 else if (TREE_CODE (itype) == INTEGER_CST
8499 && TREE_OVERFLOW (itype))
8501 if (!(complain & tf_error))
8502 return error_mark_node;
8503 error ("overflow in array dimension");
8504 TREE_OVERFLOW (itype) = 0;
8508 /* Create and return the appropriate index type. */
8509 if (abi_1_itype && abi_1_itype != error_mark_node)
8511 tree t = build_index_type (itype);
8512 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8513 itype = abi_1_itype;
8515 else
8516 itype = build_index_type (itype);
8518 /* If the index type were dependent, we would have returned early, so
8519 remember that it isn't. */
8520 TYPE_DEPENDENT_P (itype) = 0;
8521 TYPE_DEPENDENT_P_VALID (itype) = 1;
8522 return itype;
8525 /* Returns the scope (if any) in which the entity declared by
8526 DECLARATOR will be located. If the entity was declared with an
8527 unqualified name, NULL_TREE is returned. */
8529 tree
8530 get_scope_of_declarator (const cp_declarator *declarator)
8532 while (declarator && declarator->kind != cdk_id)
8533 declarator = declarator->declarator;
8535 /* If the declarator-id is a SCOPE_REF, the scope in which the
8536 declaration occurs is the first operand. */
8537 if (declarator
8538 && declarator->u.id.qualifying_scope)
8539 return declarator->u.id.qualifying_scope;
8541 /* Otherwise, the declarator is not a qualified name; the entity will
8542 be declared in the current scope. */
8543 return NULL_TREE;
8546 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8547 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
8548 with this type. */
8550 static tree
8551 create_array_type_for_decl (tree name, tree type, tree size)
8553 tree itype = NULL_TREE;
8555 /* If things have already gone awry, bail now. */
8556 if (type == error_mark_node || size == error_mark_node)
8557 return error_mark_node;
8559 /* 8.3.4/1: If the type of the identifier of D contains the auto
8560 type-specifier, the program is ill-formed. */
8561 if (pedantic && type_uses_auto (type))
8562 pedwarn (input_location, OPT_Wpedantic,
8563 "declaration of %qD as array of %<auto%>", name);
8565 /* If there are some types which cannot be array elements,
8566 issue an error-message and return. */
8567 switch (TREE_CODE (type))
8569 case VOID_TYPE:
8570 if (name)
8571 error ("declaration of %qD as array of void", name);
8572 else
8573 error ("creating array of void");
8574 return error_mark_node;
8576 case FUNCTION_TYPE:
8577 if (name)
8578 error ("declaration of %qD as array of functions", name);
8579 else
8580 error ("creating array of functions");
8581 return error_mark_node;
8583 case REFERENCE_TYPE:
8584 if (name)
8585 error ("declaration of %qD as array of references", name);
8586 else
8587 error ("creating array of references");
8588 return error_mark_node;
8590 case METHOD_TYPE:
8591 if (name)
8592 error ("declaration of %qD as array of function members", name);
8593 else
8594 error ("creating array of function members");
8595 return error_mark_node;
8597 default:
8598 break;
8601 /* [dcl.array]
8603 The constant expressions that specify the bounds of the arrays
8604 can be omitted only for the first member of the sequence. */
8605 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8607 if (name)
8608 error ("declaration of %qD as multidimensional array must "
8609 "have bounds for all dimensions except the first",
8610 name);
8611 else
8612 error ("multidimensional array must have bounds for all "
8613 "dimensions except the first");
8615 return error_mark_node;
8618 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type))
8619 pedwarn (input_location, OPT_Wvla, "array of array of runtime bound");
8621 /* Figure out the index type for the array. */
8622 if (size)
8623 itype = compute_array_index_type (name, size, tf_warning_or_error);
8625 /* [dcl.array]
8626 T is called the array element type; this type shall not be [...] an
8627 abstract class type. */
8628 abstract_virtuals_error (name, type);
8630 return build_cplus_array_type (type, itype);
8633 /* Check that it's OK to declare a function with the indicated TYPE.
8634 SFK indicates the kind of special function (if any) that this
8635 function is. OPTYPE is the type given in a conversion operator
8636 declaration, or the class type for a constructor/destructor.
8637 Returns the actual return type of the function; that
8638 may be different than TYPE if an error occurs, or for certain
8639 special functions. */
8641 static tree
8642 check_special_function_return_type (special_function_kind sfk,
8643 tree type,
8644 tree optype)
8646 switch (sfk)
8648 case sfk_constructor:
8649 if (type)
8650 error ("return type specification for constructor invalid");
8652 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8653 type = build_pointer_type (optype);
8654 else
8655 type = void_type_node;
8656 break;
8658 case sfk_destructor:
8659 if (type)
8660 error ("return type specification for destructor invalid");
8661 /* We can't use the proper return type here because we run into
8662 problems with ambiguous bases and covariant returns.
8663 Java classes are left unchanged because (void *) isn't a valid
8664 Java type, and we don't want to change the Java ABI. */
8665 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8666 type = build_pointer_type (void_type_node);
8667 else
8668 type = void_type_node;
8669 break;
8671 case sfk_conversion:
8672 if (type)
8673 error ("return type specified for %<operator %T%>", optype);
8674 type = optype;
8675 break;
8677 default:
8678 gcc_unreachable ();
8681 return type;
8684 /* A variable or data member (whose unqualified name is IDENTIFIER)
8685 has been declared with the indicated TYPE. If the TYPE is not
8686 acceptable, issue an error message and return a type to use for
8687 error-recovery purposes. */
8689 tree
8690 check_var_type (tree identifier, tree type)
8692 if (VOID_TYPE_P (type))
8694 if (!identifier)
8695 error ("unnamed variable or field declared void");
8696 else if (identifier_p (identifier))
8698 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8699 error ("variable or field %qE declared void", identifier);
8701 else
8702 error ("variable or field declared void");
8703 type = error_mark_node;
8706 return type;
8709 /* Functions for adjusting the visibility of a tagged type and its nested
8710 types when it gets a name for linkage purposes from a typedef. */
8712 static void bt_reset_linkage (binding_entry, void *);
8713 static void
8714 reset_type_linkage (tree type)
8716 set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
8717 if (CLASS_TYPE_P (type))
8718 binding_table_foreach (CLASSTYPE_NESTED_UTDS (type), bt_reset_linkage, NULL);
8720 static void
8721 bt_reset_linkage (binding_entry b, void */*data*/)
8723 reset_type_linkage (b->type);
8726 /* Given declspecs and a declarator (abstract or otherwise), determine
8727 the name and type of the object declared and construct a DECL node
8728 for it.
8730 DECLSPECS points to the representation of declaration-specifier
8731 sequence that precedes declarator.
8733 DECL_CONTEXT says which syntactic context this declaration is in:
8734 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8735 FUNCDEF for a function definition. Like NORMAL but a few different
8736 error messages in each case. Return value may be zero meaning
8737 this definition is too screwy to try to parse.
8738 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8739 handle member functions (which have FIELD context).
8740 Return value may be zero meaning this definition is too screwy to
8741 try to parse.
8742 PARM for a parameter declaration (either within a function prototype
8743 or before a function body). Make a PARM_DECL, or return void_type_node.
8744 TPARM for a template parameter declaration.
8745 CATCHPARM for a parameter declaration before a catch clause.
8746 TYPENAME if for a typename (in a cast or sizeof).
8747 Don't make a DECL node; just return the ..._TYPE node.
8748 FIELD for a struct or union field; make a FIELD_DECL.
8749 BITFIELD for a field with specified width.
8751 INITIALIZED is as for start_decl.
8753 ATTRLIST is a pointer to the list of attributes, which may be NULL
8754 if there are none; *ATTRLIST may be modified if attributes from inside
8755 the declarator should be applied to the declaration.
8757 When this function is called, scoping variables (such as
8758 CURRENT_CLASS_TYPE) should reflect the scope in which the
8759 declaration occurs, not the scope in which the new declaration will
8760 be placed. For example, on:
8762 void S::f() { ... }
8764 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8765 should not be `S'.
8767 Returns a DECL (if a declarator is present), a TYPE (if there is no
8768 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8769 error occurs. */
8771 tree
8772 grokdeclarator (const cp_declarator *declarator,
8773 cp_decl_specifier_seq *declspecs,
8774 enum decl_context decl_context,
8775 int initialized,
8776 tree* attrlist)
8778 tree type = NULL_TREE;
8779 int longlong = 0;
8780 int explicit_int128 = 0;
8781 int virtualp, explicitp, friendp, inlinep, staticp;
8782 int explicit_int = 0;
8783 int explicit_char = 0;
8784 int defaulted_int = 0;
8786 tree typedef_decl = NULL_TREE;
8787 const char *name = NULL;
8788 tree typedef_type = NULL_TREE;
8789 /* True if this declarator is a function definition. */
8790 bool funcdef_flag = false;
8791 cp_declarator_kind innermost_code = cdk_error;
8792 int bitfield = 0;
8793 #if 0
8794 /* See the code below that used this. */
8795 tree decl_attr = NULL_TREE;
8796 #endif
8798 /* Keep track of what sort of function is being processed
8799 so that we can warn about default return values, or explicit
8800 return values which do not match prescribed defaults. */
8801 special_function_kind sfk = sfk_none;
8803 tree dname = NULL_TREE;
8804 tree ctor_return_type = NULL_TREE;
8805 enum overload_flags flags = NO_SPECIAL;
8806 /* cv-qualifiers that apply to the declarator, for a declaration of
8807 a member function. */
8808 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8809 /* virt-specifiers that apply to the declarator, for a declaration of
8810 a member function. */
8811 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8812 /* ref-qualifier that applies to the declarator, for a declaration of
8813 a member function. */
8814 cp_ref_qualifier rqual = REF_QUAL_NONE;
8815 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
8816 int type_quals;
8817 tree raises = NULL_TREE;
8818 int template_count = 0;
8819 tree returned_attrs = NULL_TREE;
8820 tree parms = NULL_TREE;
8821 const cp_declarator *id_declarator;
8822 /* The unqualified name of the declarator; either an
8823 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
8824 tree unqualified_id;
8825 /* The class type, if any, in which this entity is located,
8826 or NULL_TREE if none. Note that this value may be different from
8827 the current class type; for example if an attempt is made to declare
8828 "A::f" inside "B", this value will be "A". */
8829 tree ctype = current_class_type;
8830 /* The NAMESPACE_DECL for the namespace in which this entity is
8831 located. If an unqualified name is used to declare the entity,
8832 this value will be NULL_TREE, even if the entity is located at
8833 namespace scope. */
8834 tree in_namespace = NULL_TREE;
8835 cp_storage_class storage_class;
8836 bool unsigned_p, signed_p, short_p, long_p, thread_p;
8837 bool type_was_error_mark_node = false;
8838 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8839 bool template_type_arg = false;
8840 bool template_parm_flag = false;
8841 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
8842 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
8843 source_location saved_loc = input_location;
8844 const char *errmsg;
8846 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
8847 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
8848 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
8849 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
8850 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
8851 explicit_int128 = declspecs->explicit_int128_p;
8852 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
8854 // Was concept_p specified? Note that ds_concept
8855 // implies ds_constexpr!
8856 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
8857 if (concept_p)
8858 constexpr_p = true;
8860 if (decl_context == FUNCDEF)
8861 funcdef_flag = true, decl_context = NORMAL;
8862 else if (decl_context == MEMFUNCDEF)
8863 funcdef_flag = true, decl_context = FIELD;
8864 else if (decl_context == BITFIELD)
8865 bitfield = 1, decl_context = FIELD;
8866 else if (decl_context == TEMPLATE_TYPE_ARG)
8867 template_type_arg = true, decl_context = TYPENAME;
8868 else if (decl_context == TPARM)
8869 template_parm_flag = true, decl_context = PARM;
8871 if (initialized > 1)
8872 funcdef_flag = true;
8874 /* Look inside a declarator for the name being declared
8875 and get it as a string, for an error message. */
8876 for (id_declarator = declarator;
8877 id_declarator;
8878 id_declarator = id_declarator->declarator)
8880 if (id_declarator->kind != cdk_id)
8881 innermost_code = id_declarator->kind;
8883 switch (id_declarator->kind)
8885 case cdk_function:
8886 if (id_declarator->declarator
8887 && id_declarator->declarator->kind == cdk_id)
8889 sfk = id_declarator->declarator->u.id.sfk;
8890 if (sfk == sfk_destructor)
8891 flags = DTOR_FLAG;
8893 break;
8895 case cdk_id:
8897 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8898 tree decl = id_declarator->u.id.unqualified_name;
8899 if (!decl)
8900 break;
8901 if (qualifying_scope)
8903 if (at_function_scope_p ())
8905 /* [dcl.meaning]
8907 A declarator-id shall not be qualified except
8908 for ...
8910 None of the cases are permitted in block
8911 scope. */
8912 if (qualifying_scope == global_namespace)
8913 error ("invalid use of qualified-name %<::%D%>",
8914 decl);
8915 else if (TYPE_P (qualifying_scope))
8916 error ("invalid use of qualified-name %<%T::%D%>",
8917 qualifying_scope, decl);
8918 else
8919 error ("invalid use of qualified-name %<%D::%D%>",
8920 qualifying_scope, decl);
8921 return error_mark_node;
8923 else if (TYPE_P (qualifying_scope))
8925 ctype = qualifying_scope;
8926 if (!MAYBE_CLASS_TYPE_P (ctype))
8928 error ("%q#T is not a class or a namespace", ctype);
8929 ctype = NULL_TREE;
8931 else if (innermost_code != cdk_function
8932 && current_class_type
8933 && !uniquely_derived_from_p (ctype,
8934 current_class_type))
8936 error ("invalid use of qualified-name %<%T::%D%>",
8937 qualifying_scope, decl);
8938 return error_mark_node;
8941 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8942 in_namespace = qualifying_scope;
8944 switch (TREE_CODE (decl))
8946 case BIT_NOT_EXPR:
8948 tree type;
8950 if (innermost_code != cdk_function)
8952 error ("declaration of %qD as non-function", decl);
8953 return error_mark_node;
8955 else if (!qualifying_scope
8956 && !(current_class_type && at_class_scope_p ()))
8958 error ("declaration of %qD as non-member", decl);
8959 return error_mark_node;
8962 type = TREE_OPERAND (decl, 0);
8963 if (TYPE_P (type))
8964 type = constructor_name (type);
8965 name = identifier_to_locale (IDENTIFIER_POINTER (type));
8966 dname = decl;
8968 break;
8970 case TEMPLATE_ID_EXPR:
8972 tree fns = TREE_OPERAND (decl, 0);
8974 dname = fns;
8975 if (!identifier_p (dname))
8977 gcc_assert (is_overloaded_fn (dname));
8978 dname = DECL_NAME (get_first_fn (dname));
8981 /* Fall through. */
8983 case IDENTIFIER_NODE:
8984 if (identifier_p (decl))
8985 dname = decl;
8987 if (C_IS_RESERVED_WORD (dname))
8989 error ("declarator-id missing; using reserved word %qD",
8990 dname);
8991 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8993 else if (!IDENTIFIER_TYPENAME_P (dname))
8994 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8995 else
8997 gcc_assert (flags == NO_SPECIAL);
8998 flags = TYPENAME_FLAG;
8999 ctor_return_type = TREE_TYPE (dname);
9000 sfk = sfk_conversion;
9001 if (is_typename_at_global_scope (dname))
9002 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9003 else
9004 name = "<invalid operator>";
9006 break;
9008 default:
9009 gcc_unreachable ();
9011 break;
9014 case cdk_array:
9015 case cdk_pointer:
9016 case cdk_reference:
9017 case cdk_ptrmem:
9018 break;
9020 case cdk_error:
9021 return error_mark_node;
9023 default:
9024 gcc_unreachable ();
9026 if (id_declarator->kind == cdk_id)
9027 break;
9030 /* [dcl.fct.edf]
9032 The declarator in a function-definition shall have the form
9033 D1 ( parameter-declaration-clause) ... */
9034 if (funcdef_flag && innermost_code != cdk_function)
9036 error ("function definition does not declare parameters");
9037 return error_mark_node;
9040 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9041 && innermost_code != cdk_function
9042 && ! (ctype && !declspecs->any_specifiers_p))
9044 error ("declaration of %qD as non-function", dname);
9045 return error_mark_node;
9048 if (dname
9049 && identifier_p (dname)
9050 && UDLIT_OPER_P (dname)
9051 && innermost_code != cdk_function)
9053 error ("declaration of %qD as non-function", dname);
9054 return error_mark_node;
9057 if (dname && IDENTIFIER_OPNAME_P (dname))
9059 if (typedef_p)
9061 error ("declaration of %qD as %<typedef%>", dname);
9062 return error_mark_node;
9064 else if (decl_context == PARM || decl_context == CATCHPARM)
9066 error ("declaration of %qD as parameter", dname);
9067 return error_mark_node;
9071 /* Anything declared one level down from the top level
9072 must be one of the parameters of a function
9073 (because the body is at least two levels down). */
9075 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9076 by not allowing C++ class definitions to specify their parameters
9077 with xdecls (must be spec.d in the parmlist).
9079 Since we now wait to push a class scope until we are sure that
9080 we are in a legitimate method context, we must set oldcname
9081 explicitly (since current_class_name is not yet alive).
9083 We also want to avoid calling this a PARM if it is in a namespace. */
9085 if (decl_context == NORMAL && !toplevel_bindings_p ())
9087 cp_binding_level *b = current_binding_level;
9088 current_binding_level = b->level_chain;
9089 if (current_binding_level != 0 && toplevel_bindings_p ())
9090 decl_context = PARM;
9091 current_binding_level = b;
9094 if (name == NULL)
9095 name = decl_context == PARM ? "parameter" : "type name";
9097 if (concept_p && typedef_p)
9099 error ("%<concept%> cannot appear in a typedef declaration");
9100 return error_mark_node;
9103 if (constexpr_p && typedef_p)
9105 error ("%<constexpr%> cannot appear in a typedef declaration");
9106 return error_mark_node;
9109 /* If there were multiple types specified in the decl-specifier-seq,
9110 issue an error message. */
9111 if (declspecs->multiple_types_p)
9113 error ("two or more data types in declaration of %qs", name);
9114 return error_mark_node;
9117 if (declspecs->conflicting_specifiers_p)
9119 error ("conflicting specifiers in declaration of %qs", name);
9120 return error_mark_node;
9123 /* Extract the basic type from the decl-specifier-seq. */
9124 type = declspecs->type;
9125 if (type == error_mark_node)
9127 type = NULL_TREE;
9128 type_was_error_mark_node = true;
9130 /* If the entire declaration is itself tagged as deprecated then
9131 suppress reports of deprecated items. */
9132 if (type && TREE_DEPRECATED (type)
9133 && deprecated_state != DEPRECATED_SUPPRESS)
9134 warn_deprecated_use (type, NULL_TREE);
9135 if (type && TREE_CODE (type) == TYPE_DECL)
9137 typedef_decl = type;
9138 type = TREE_TYPE (typedef_decl);
9139 if (TREE_DEPRECATED (type)
9140 && DECL_ARTIFICIAL (typedef_decl)
9141 && deprecated_state != DEPRECATED_SUPPRESS)
9142 warn_deprecated_use (type, NULL_TREE);
9144 /* No type at all: default to `int', and set DEFAULTED_INT
9145 because it was not a user-defined typedef. */
9146 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
9148 /* These imply 'int'. */
9149 type = integer_type_node;
9150 defaulted_int = 1;
9152 /* Gather flags. */
9153 explicit_int = declspecs->explicit_int_p;
9154 explicit_char = declspecs->explicit_char_p;
9156 #if 0
9157 /* See the code below that used this. */
9158 if (typedef_decl)
9159 decl_attr = DECL_ATTRIBUTES (typedef_decl);
9160 #endif
9161 typedef_type = type;
9164 if (sfk != sfk_conversion)
9165 ctor_return_type = ctype;
9167 if (sfk != sfk_none)
9168 type = check_special_function_return_type (sfk, type,
9169 ctor_return_type);
9170 else if (type == NULL_TREE)
9172 int is_main;
9174 explicit_int = -1;
9176 /* We handle `main' specially here, because 'main () { }' is so
9177 common. With no options, it is allowed. With -Wreturn-type,
9178 it is a warning. It is only an error with -pedantic-errors. */
9179 is_main = (funcdef_flag
9180 && dname && identifier_p (dname)
9181 && MAIN_NAME_P (dname)
9182 && ctype == NULL_TREE
9183 && in_namespace == NULL_TREE
9184 && current_namespace == global_namespace);
9186 if (type_was_error_mark_node)
9187 /* We've already issued an error, don't complain more. */;
9188 else if (in_system_header || flag_ms_extensions)
9189 /* Allow it, sigh. */;
9190 else if (! is_main)
9191 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
9192 else if (pedantic)
9193 pedwarn (input_location, OPT_Wpedantic,
9194 "ISO C++ forbids declaration of %qs with no type", name);
9195 else
9196 warning (OPT_Wreturn_type,
9197 "ISO C++ forbids declaration of %qs with no type", name);
9199 type = integer_type_node;
9202 ctype = NULL_TREE;
9204 if (explicit_int128)
9206 if (int128_integer_type_node == NULL_TREE)
9208 error ("%<__int128%> is not supported by this target");
9209 explicit_int128 = false;
9211 else if (pedantic && ! in_system_header)
9212 pedwarn (input_location, OPT_Wpedantic,
9213 "ISO C++ does not support %<__int128%> for %qs", name);
9216 /* Now process the modifiers that were specified
9217 and check for invalid combinations. */
9219 /* Long double is a special combination. */
9220 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9222 long_p = false;
9223 type = cp_build_qualified_type (long_double_type_node,
9224 cp_type_quals (type));
9227 /* Check all other uses of type modifiers. */
9229 if (unsigned_p || signed_p || long_p || short_p)
9231 int ok = 0;
9233 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9234 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9235 else if (signed_p && unsigned_p)
9236 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9237 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9238 error ("%<long long%> invalid for %qs", name);
9239 else if (long_p && TREE_CODE (type) == REAL_TYPE)
9240 error ("%<long%> invalid for %qs", name);
9241 else if (short_p && TREE_CODE (type) == REAL_TYPE)
9242 error ("%<short%> invalid for %qs", name);
9243 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9244 error ("%<long%> or %<short%> invalid for %qs", name);
9245 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
9246 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9247 else if ((long_p || short_p) && explicit_char)
9248 error ("%<long%> or %<short%> specified with char for %qs", name);
9249 else if (long_p && short_p)
9250 error ("%<long%> and %<short%> specified together for %qs", name);
9251 else if (type == char16_type_node || type == char32_type_node)
9253 if (signed_p || unsigned_p)
9254 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9255 else if (short_p || long_p)
9256 error ("%<short%> or %<long%> invalid for %qs", name);
9258 else
9260 ok = 1;
9261 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
9263 pedwarn (input_location, OPT_Wpedantic,
9264 "long, short, signed or unsigned used invalidly for %qs",
9265 name);
9266 if (flag_pedantic_errors)
9267 ok = 0;
9271 /* Discard the type modifiers if they are invalid. */
9272 if (! ok)
9274 unsigned_p = false;
9275 signed_p = false;
9276 long_p = false;
9277 short_p = false;
9278 longlong = 0;
9282 /* Decide whether an integer type is signed or not.
9283 Optionally treat bitfields as signed by default. */
9284 if (unsigned_p
9285 /* [class.bit]
9287 It is implementation-defined whether a plain (neither
9288 explicitly signed or unsigned) char, short, int, or long
9289 bit-field is signed or unsigned.
9291 Naturally, we extend this to long long as well. Note that
9292 this does not include wchar_t. */
9293 || (bitfield && !flag_signed_bitfields
9294 && !signed_p
9295 /* A typedef for plain `int' without `signed' can be
9296 controlled just like plain `int', but a typedef for
9297 `signed int' cannot be so controlled. */
9298 && !(typedef_decl
9299 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9300 && TREE_CODE (type) == INTEGER_TYPE
9301 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9303 if (explicit_int128)
9304 type = int128_unsigned_type_node;
9305 else if (longlong)
9306 type = long_long_unsigned_type_node;
9307 else if (long_p)
9308 type = long_unsigned_type_node;
9309 else if (short_p)
9310 type = short_unsigned_type_node;
9311 else if (type == char_type_node)
9312 type = unsigned_char_type_node;
9313 else if (typedef_decl)
9314 type = unsigned_type_for (type);
9315 else
9316 type = unsigned_type_node;
9318 else if (signed_p && type == char_type_node)
9319 type = signed_char_type_node;
9320 else if (explicit_int128)
9321 type = int128_integer_type_node;
9322 else if (longlong)
9323 type = long_long_integer_type_node;
9324 else if (long_p)
9325 type = long_integer_type_node;
9326 else if (short_p)
9327 type = short_integer_type_node;
9329 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9331 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9332 error ("complex invalid for %qs", name);
9333 /* If we just have "complex", it is equivalent to
9334 "complex double", but if any modifiers at all are specified it is
9335 the complex form of TYPE. E.g, "complex short" is
9336 "complex short int". */
9337 else if (defaulted_int && ! longlong && ! explicit_int128
9338 && ! (long_p || short_p || signed_p || unsigned_p))
9339 type = complex_double_type_node;
9340 else if (type == integer_type_node)
9341 type = complex_integer_type_node;
9342 else if (type == float_type_node)
9343 type = complex_float_type_node;
9344 else if (type == double_type_node)
9345 type = complex_double_type_node;
9346 else if (type == long_double_type_node)
9347 type = complex_long_double_type_node;
9348 else
9349 type = build_complex_type (type);
9352 type_quals = TYPE_UNQUALIFIED;
9353 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9354 type_quals |= TYPE_QUAL_CONST;
9355 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9356 type_quals |= TYPE_QUAL_VOLATILE;
9357 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9358 type_quals |= TYPE_QUAL_RESTRICT;
9359 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
9360 error ("qualifiers are not allowed on declaration of %<operator %T%>",
9361 ctor_return_type);
9363 /* If we're using the injected-class-name to form a compound type or a
9364 declaration, replace it with the underlying class so we don't get
9365 redundant typedefs in the debug output. But if we are returning the
9366 type unchanged, leave it alone so that it's available to
9367 maybe_get_template_decl_from_type_decl. */
9368 if (CLASS_TYPE_P (type)
9369 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9370 && type == TREE_TYPE (TYPE_NAME (type))
9371 && (declarator || type_quals))
9372 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9374 type_quals |= cp_type_quals (type);
9375 type = cp_build_qualified_type_real
9376 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
9377 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9378 /* We might have ignored or rejected some of the qualifiers. */
9379 type_quals = cp_type_quals (type);
9381 staticp = 0;
9382 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9383 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9384 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9386 storage_class = declspecs->storage_class;
9387 if (storage_class == sc_static)
9388 staticp = 1 + (decl_context == FIELD);
9390 if (virtualp && staticp == 2)
9392 error ("member %qD cannot be declared both virtual and static", dname);
9393 storage_class = sc_none;
9394 staticp = 0;
9396 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9398 /* Issue errors about use of storage classes for parameters. */
9399 if (decl_context == PARM)
9401 if (typedef_p)
9403 error ("typedef declaration invalid in parameter declaration");
9404 return error_mark_node;
9406 else if (template_parm_flag && storage_class != sc_none)
9408 error ("storage class specified for template parameter %qs", name);
9409 return error_mark_node;
9411 else if (storage_class == sc_static
9412 || storage_class == sc_extern
9413 || thread_p)
9414 error ("storage class specifiers invalid in parameter declarations");
9416 /* Function parameters cannot be concept. */
9417 if (concept_p)
9418 error ("a parameter cannot be declared %<concept%>");
9419 /* Function parameters cannot be constexpr. If we saw one, moan
9420 and pretend it wasn't there. */
9421 else if (constexpr_p)
9423 error ("a parameter cannot be declared %<constexpr%>");
9424 constexpr_p = 0;
9428 /* Give error if `virtual' is used outside of class declaration. */
9429 if (virtualp
9430 && (current_class_name == NULL_TREE || decl_context != FIELD))
9432 error ("%<virtual%> outside class declaration");
9433 virtualp = 0;
9436 /* Static anonymous unions are dealt with here. */
9437 if (staticp && decl_context == TYPENAME
9438 && declspecs->type
9439 && ANON_AGGR_TYPE_P (declspecs->type))
9440 decl_context = FIELD;
9442 /* Warn about storage classes that are invalid for certain
9443 kinds of declarations (parameters, typenames, etc.). */
9444 if (thread_p
9445 && ((storage_class
9446 && storage_class != sc_extern
9447 && storage_class != sc_static)
9448 || typedef_p))
9450 error ("multiple storage classes in declaration of %qs", name);
9451 thread_p = false;
9453 if (decl_context != NORMAL
9454 && ((storage_class != sc_none
9455 && storage_class != sc_mutable)
9456 || thread_p))
9458 if ((decl_context == PARM || decl_context == CATCHPARM)
9459 && (storage_class == sc_register
9460 || storage_class == sc_auto))
9462 else if (typedef_p)
9464 else if (decl_context == FIELD
9465 /* C++ allows static class elements. */
9466 && storage_class == sc_static)
9467 /* C++ also allows inlines and signed and unsigned elements,
9468 but in those cases we don't come in here. */
9470 else
9472 if (decl_context == FIELD)
9473 error ("storage class specified for %qs", name);
9474 else
9476 if (decl_context == PARM || decl_context == CATCHPARM)
9477 error ("storage class specified for parameter %qs", name);
9478 else
9479 error ("storage class specified for typename");
9481 if (storage_class == sc_register
9482 || storage_class == sc_auto
9483 || storage_class == sc_extern
9484 || thread_p)
9485 storage_class = sc_none;
9488 else if (storage_class == sc_extern && funcdef_flag
9489 && ! toplevel_bindings_p ())
9490 error ("nested function %qs declared %<extern%>", name);
9491 else if (toplevel_bindings_p ())
9493 if (storage_class == sc_auto)
9494 error ("top-level declaration of %qs specifies %<auto%>", name);
9496 else if (thread_p
9497 && storage_class != sc_extern
9498 && storage_class != sc_static)
9500 if (declspecs->gnu_thread_keyword_p)
9501 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9502 "declared %<__thread%>", name);
9504 /* When thread_local is applied to a variable of block scope the
9505 storage-class-specifier static is implied if it does not appear
9506 explicitly. */
9507 storage_class = declspecs->storage_class = sc_static;
9508 staticp = 1;
9511 if (storage_class && friendp)
9513 error ("storage class specifiers invalid in friend function declarations");
9514 storage_class = sc_none;
9515 staticp = 0;
9518 if (!id_declarator)
9519 unqualified_id = NULL_TREE;
9520 else
9522 unqualified_id = id_declarator->u.id.unqualified_name;
9523 switch (TREE_CODE (unqualified_id))
9525 case BIT_NOT_EXPR:
9526 unqualified_id = TREE_OPERAND (unqualified_id, 0);
9527 if (TYPE_P (unqualified_id))
9528 unqualified_id = constructor_name (unqualified_id);
9529 break;
9531 case IDENTIFIER_NODE:
9532 case TEMPLATE_ID_EXPR:
9533 break;
9535 default:
9536 gcc_unreachable ();
9540 if (declspecs->std_attributes)
9542 /* Apply the c++11 attributes to the type preceding them. */
9543 input_location = declspecs->locations[ds_std_attribute];
9544 decl_attributes (&type, declspecs->std_attributes, 0);
9545 input_location = saved_loc;
9548 /* Determine the type of the entity declared by recurring on the
9549 declarator. */
9550 for (; declarator; declarator = declarator->declarator)
9552 const cp_declarator *inner_declarator;
9553 tree attrs;
9555 if (type == error_mark_node)
9556 return error_mark_node;
9558 attrs = declarator->attributes;
9559 if (attrs)
9561 int attr_flags;
9563 attr_flags = 0;
9564 if (declarator == NULL || declarator->kind == cdk_id)
9565 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9566 if (declarator->kind == cdk_function)
9567 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9568 if (declarator->kind == cdk_array)
9569 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9570 returned_attrs = decl_attributes (&type,
9571 chainon (returned_attrs, attrs),
9572 attr_flags);
9575 if (declarator->kind == cdk_id)
9576 break;
9578 inner_declarator = declarator->declarator;
9580 switch (declarator->kind)
9582 case cdk_array:
9583 type = create_array_type_for_decl (dname, type,
9584 declarator->u.array.bounds);
9585 if (declarator->std_attributes)
9586 /* [dcl.array]/1:
9588 The optional attribute-specifier-seq appertains to the
9589 array. */
9590 returned_attrs = chainon (returned_attrs,
9591 declarator->std_attributes);
9592 break;
9594 case cdk_function:
9596 tree arg_types;
9597 int funcdecl_p;
9599 /* Declaring a function type.
9600 Make sure we have a valid type for the function to return. */
9602 if (type_quals != TYPE_UNQUALIFIED)
9604 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9605 warning (OPT_Wignored_qualifiers,
9606 "type qualifiers ignored on function return type");
9607 /* We now know that the TYPE_QUALS don't apply to the
9608 decl, but to its return type. */
9609 type_quals = TYPE_UNQUALIFIED;
9611 errmsg = targetm.invalid_return_type (type);
9612 if (errmsg)
9614 error (errmsg);
9615 type = integer_type_node;
9618 /* Error about some types functions can't return. */
9620 if (TREE_CODE (type) == FUNCTION_TYPE)
9622 error ("%qs declared as function returning a function", name);
9623 return error_mark_node;
9625 if (TREE_CODE (type) == ARRAY_TYPE)
9627 error ("%qs declared as function returning an array", name);
9628 return error_mark_node;
9631 input_location = declspecs->locations[ds_type_spec];
9632 abstract_virtuals_error (ACU_RETURN, type);
9633 input_location = saved_loc;
9635 /* Pick up type qualifiers which should be applied to `this'. */
9636 memfn_quals = declarator->u.function.qualifiers;
9637 /* Pick up virt-specifiers. */
9638 virt_specifiers = declarator->u.function.virt_specifiers;
9639 /* And ref-qualifier, too */
9640 rqual = declarator->u.function.ref_qualifier;
9641 /* Pick up the exception specifications. */
9642 raises = declarator->u.function.exception_specification;
9643 /* If the exception-specification is ill-formed, let's pretend
9644 there wasn't one. */
9645 if (raises == error_mark_node)
9646 raises = NULL_TREE;
9648 /* Say it's a definition only for the CALL_EXPR
9649 closest to the identifier. */
9650 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9652 /* Handle a late-specified return type. */
9653 if (funcdecl_p)
9655 if (type_uses_auto (type))
9657 if (!declarator->u.function.late_return_type)
9659 if (current_class_type
9660 && LAMBDA_TYPE_P (current_class_type))
9661 /* OK for C++11 lambdas. */;
9662 else if (cxx_dialect < cxx1y)
9663 pedwarn (input_location, 0, "%qs function uses "
9664 "%<auto%> type specifier without trailing "
9665 "return type", name);
9666 else if (virtualp)
9667 permerror (input_location, "virtual function cannot "
9668 "have deduced return type");
9670 else if (!is_auto (type))
9672 error ("%qs function with trailing return type has"
9673 " %qT as its type rather than plain %<auto%>",
9674 name, type);
9675 return error_mark_node;
9678 else if (declarator->u.function.late_return_type)
9680 if (cxx_dialect < cxx11)
9681 /* Not using maybe_warn_cpp0x because this should
9682 always be an error. */
9683 error ("trailing return type only available with "
9684 "-std=c++11 or -std=gnu++11");
9685 else
9686 error ("%qs function with trailing return type not "
9687 "declared with %<auto%> type specifier", name);
9688 return error_mark_node;
9691 type = splice_late_return_type
9692 (type, declarator->u.function.late_return_type);
9693 if (type == error_mark_node)
9694 return error_mark_node;
9696 if (ctype == NULL_TREE
9697 && decl_context == FIELD
9698 && funcdecl_p
9699 && (friendp == 0 || dname == current_class_name))
9700 ctype = current_class_type;
9702 if (ctype && (sfk == sfk_constructor
9703 || sfk == sfk_destructor))
9705 /* We are within a class's scope. If our declarator name
9706 is the same as the class name, and we are defining
9707 a function, then it is a constructor/destructor, and
9708 therefore returns a void type. */
9710 /* ISO C++ 12.4/2. A destructor may not be declared
9711 const or volatile. A destructor may not be static.
9712 A destructor may not be declared with ref-qualifier.
9714 ISO C++ 12.1. A constructor may not be declared
9715 const or volatile. A constructor may not be
9716 virtual. A constructor may not be static.
9717 A constructor may not be declared with ref-qualifier. */
9718 if (staticp == 2)
9719 error ((flags == DTOR_FLAG)
9720 ? G_("destructor cannot be static member function")
9721 : G_("constructor cannot be static member function"));
9722 if (memfn_quals)
9724 error ((flags == DTOR_FLAG)
9725 ? G_("destructors may not be cv-qualified")
9726 : G_("constructors may not be cv-qualified"));
9727 memfn_quals = TYPE_UNQUALIFIED;
9730 if (rqual)
9732 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
9733 error ((flags == DTOR_FLAG)
9734 ? "destructors may not be ref-qualified"
9735 : "constructors may not be ref-qualified");
9736 rqual = REF_QUAL_NONE;
9739 if (decl_context == FIELD
9740 && !member_function_or_else (ctype,
9741 current_class_type,
9742 flags))
9743 return error_mark_node;
9745 if (flags != DTOR_FLAG)
9747 /* It's a constructor. */
9748 if (explicitp == 1)
9749 explicitp = 2;
9750 if (virtualp)
9752 permerror (input_location, "constructors cannot be declared virtual");
9753 virtualp = 0;
9755 if (decl_context == FIELD
9756 && sfk != sfk_constructor)
9757 return error_mark_node;
9759 if (decl_context == FIELD)
9760 staticp = 0;
9762 else if (friendp)
9764 if (initialized)
9765 error ("can%'t initialize friend function %qs", name);
9766 if (virtualp)
9768 /* Cannot be both friend and virtual. */
9769 error ("virtual functions cannot be friends");
9770 friendp = 0;
9772 if (decl_context == NORMAL)
9773 error ("friend declaration not in class definition");
9774 if (current_function_decl && funcdef_flag)
9775 error ("can%'t define friend function %qs in a local "
9776 "class definition",
9777 name);
9779 else if (ctype && sfk == sfk_conversion)
9781 if (explicitp == 1)
9783 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9784 explicitp = 2;
9788 arg_types = grokparms (declarator->u.function.parameters,
9789 &parms);
9791 if (inner_declarator
9792 && inner_declarator->kind == cdk_id
9793 && inner_declarator->u.id.sfk == sfk_destructor
9794 && arg_types != void_list_node)
9796 error ("destructors may not have parameters");
9797 arg_types = void_list_node;
9798 parms = NULL_TREE;
9801 type = build_function_type (type, arg_types);
9802 if (declarator->std_attributes)
9803 /* [dcl.fct]/2:
9805 The optional attribute-specifier-seq appertains to
9806 the function type. */
9807 decl_attributes (&type, declarator->std_attributes,
9810 break;
9812 case cdk_pointer:
9813 case cdk_reference:
9814 case cdk_ptrmem:
9815 /* Filter out pointers-to-references and references-to-references.
9816 We can get these if a TYPE_DECL is used. */
9818 if (TREE_CODE (type) == REFERENCE_TYPE)
9820 if (declarator->kind != cdk_reference)
9822 error ("cannot declare pointer to %q#T", type);
9823 type = TREE_TYPE (type);
9826 /* In C++0x, we allow reference to reference declarations
9827 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9828 and template type arguments [14.3.1/4 temp.arg.type]. The
9829 check for direct reference to reference declarations, which
9830 are still forbidden, occurs below. Reasoning behind the change
9831 can be found in DR106, DR540, and the rvalue reference
9832 proposals. */
9833 else if (cxx_dialect == cxx98)
9835 error ("cannot declare reference to %q#T", type);
9836 type = TREE_TYPE (type);
9839 else if (VOID_TYPE_P (type))
9841 if (declarator->kind == cdk_reference)
9842 error ("cannot declare reference to %q#T", type);
9843 else if (declarator->kind == cdk_ptrmem)
9844 error ("cannot declare pointer to %q#T member", type);
9847 /* We now know that the TYPE_QUALS don't apply to the decl,
9848 but to the target of the pointer. */
9849 type_quals = TYPE_UNQUALIFIED;
9851 /* This code used to handle METHOD_TYPE, but I don't think it's
9852 possible to get it here anymore. */
9853 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9854 if (declarator->kind == cdk_ptrmem
9855 && TREE_CODE (type) == FUNCTION_TYPE)
9857 memfn_quals |= type_memfn_quals (type);
9858 type = build_memfn_type (type,
9859 declarator->u.pointer.class_type,
9860 memfn_quals,
9861 rqual);
9862 if (type == error_mark_node)
9863 return error_mark_node;
9865 rqual = REF_QUAL_NONE;
9866 memfn_quals = TYPE_UNQUALIFIED;
9869 if (TREE_CODE (type) == FUNCTION_TYPE
9870 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
9871 || type_memfn_rqual (type) != REF_QUAL_NONE))
9872 error (declarator->kind == cdk_reference
9873 ? G_("cannot declare reference to qualified function type %qT")
9874 : G_("cannot declare pointer to qualified function type %qT"),
9875 type);
9877 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type))
9878 pedwarn (input_location, OPT_Wvla,
9879 declarator->kind == cdk_reference
9880 ? G_("reference to array of runtime bound")
9881 : G_("pointer to array of runtime bound"));
9883 /* When the pointed-to type involves components of variable size,
9884 care must be taken to ensure that the size evaluation code is
9885 emitted early enough to dominate all the possible later uses
9886 and late enough for the variables on which it depends to have
9887 been assigned.
9889 This is expected to happen automatically when the pointed-to
9890 type has a name/declaration of it's own, but special attention
9891 is required if the type is anonymous.
9893 We handle the NORMAL and FIELD contexts here by inserting a
9894 dummy statement that just evaluates the size at a safe point
9895 and ensures it is not deferred until e.g. within a deeper
9896 conditional context (c++/43555).
9898 We expect nothing to be needed here for PARM or TYPENAME.
9899 Evaluating the size at this point for TYPENAME would
9900 actually be incorrect, as we might be in the middle of an
9901 expression with side effects on the pointed-to type size
9902 "arguments" prior to the pointer declaration point and the
9903 size evaluation could end up prior to the side effects. */
9905 if (!TYPE_NAME (type)
9906 && (decl_context == NORMAL || decl_context == FIELD)
9907 && at_function_scope_p ()
9908 && variably_modified_type_p (type, NULL_TREE))
9909 /* Force evaluation of the SAVE_EXPR. */
9910 finish_expr_stmt (TYPE_SIZE (type));
9912 if (declarator->kind == cdk_reference)
9914 /* In C++0x, the type we are creating a reference to might be
9915 a typedef which is itself a reference type. In that case,
9916 we follow the reference collapsing rules in
9917 [7.1.3/8 dcl.typedef] to create the final reference type:
9919 "If a typedef TD names a type that is a reference to a type
9920 T, an attempt to create the type 'lvalue reference to cv TD'
9921 creates the type 'lvalue reference to T,' while an attempt
9922 to create the type "rvalue reference to cv TD' creates the
9923 type TD."
9925 if (VOID_TYPE_P (type))
9926 /* We already gave an error. */;
9927 else if (TREE_CODE (type) == REFERENCE_TYPE)
9929 if (declarator->u.reference.rvalue_ref)
9930 /* Leave type alone. */;
9931 else
9932 type = cp_build_reference_type (TREE_TYPE (type), false);
9934 else
9935 type = cp_build_reference_type
9936 (type, declarator->u.reference.rvalue_ref);
9938 /* In C++0x, we need this check for direct reference to
9939 reference declarations, which are forbidden by
9940 [8.3.2/5 dcl.ref]. Reference to reference declarations
9941 are only allowed indirectly through typedefs and template
9942 type arguments. Example:
9944 void foo(int & &); // invalid ref-to-ref decl
9946 typedef int & int_ref;
9947 void foo(int_ref &); // valid ref-to-ref decl
9949 if (inner_declarator && inner_declarator->kind == cdk_reference)
9950 error ("cannot declare reference to %q#T, which is not "
9951 "a typedef or a template type argument", type);
9953 else if (TREE_CODE (type) == METHOD_TYPE)
9954 type = build_ptrmemfunc_type (build_pointer_type (type));
9955 else if (declarator->kind == cdk_ptrmem)
9957 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9958 != NAMESPACE_DECL);
9959 if (declarator->u.pointer.class_type == error_mark_node)
9960 /* We will already have complained. */
9961 type = error_mark_node;
9962 else
9963 type = build_ptrmem_type (declarator->u.pointer.class_type,
9964 type);
9966 else
9967 type = build_pointer_type (type);
9969 /* Process a list of type modifier keywords (such as
9970 const or volatile) that were given inside the `*' or `&'. */
9972 if (declarator->u.pointer.qualifiers)
9974 type
9975 = cp_build_qualified_type (type,
9976 declarator->u.pointer.qualifiers);
9977 type_quals = cp_type_quals (type);
9980 /* Apply C++11 attributes to the pointer, and not to the
9981 type pointed to. This is unlike what is done for GNU
9982 attributes above. It is to comply with [dcl.ptr]/1:
9984 [the optional attribute-specifier-seq (7.6.1) appertains
9985 to the pointer and not to the object pointed to]. */
9986 if (declarator->std_attributes)
9987 decl_attributes (&type, declarator->std_attributes,
9990 ctype = NULL_TREE;
9991 break;
9993 case cdk_error:
9994 break;
9996 default:
9997 gcc_unreachable ();
10001 /* A `constexpr' specifier used in an object declaration declares
10002 the object as `const'. */
10003 if (constexpr_p && innermost_code != cdk_function)
10005 if (type_quals & TYPE_QUAL_VOLATILE)
10006 error ("both %<volatile%> and %<constexpr%> cannot be used here");
10007 if (TREE_CODE (type) != REFERENCE_TYPE)
10009 type_quals |= TYPE_QUAL_CONST;
10010 type = cp_build_qualified_type (type, type_quals);
10014 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
10015 && TREE_CODE (type) != FUNCTION_TYPE
10016 && TREE_CODE (type) != METHOD_TYPE)
10018 error ("template-id %qD used as a declarator",
10019 unqualified_id);
10020 unqualified_id = dname;
10023 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
10024 qualified with a class-name, turn it into a METHOD_TYPE, unless
10025 we know that the function is static. We take advantage of this
10026 opportunity to do other processing that pertains to entities
10027 explicitly declared to be class members. Note that if DECLARATOR
10028 is non-NULL, we know it is a cdk_id declarator; otherwise, we
10029 would not have exited the loop above. */
10030 if (declarator
10031 && declarator->u.id.qualifying_scope
10032 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
10034 ctype = declarator->u.id.qualifying_scope;
10035 ctype = TYPE_MAIN_VARIANT (ctype);
10036 template_count = num_template_headers_for_class (ctype);
10038 if (ctype == current_class_type)
10040 if (friendp)
10042 permerror (input_location, "member functions are implicitly friends of their class");
10043 friendp = 0;
10045 else
10046 permerror (declarator->id_loc,
10047 "extra qualification %<%T::%> on member %qs",
10048 ctype, name);
10050 else if (/* If the qualifying type is already complete, then we
10051 can skip the following checks. */
10052 !COMPLETE_TYPE_P (ctype)
10053 && (/* If the function is being defined, then
10054 qualifying type must certainly be complete. */
10055 funcdef_flag
10056 /* A friend declaration of "T::f" is OK, even if
10057 "T" is a template parameter. But, if this
10058 function is not a friend, the qualifying type
10059 must be a class. */
10060 || (!friendp && !CLASS_TYPE_P (ctype))
10061 /* For a declaration, the type need not be
10062 complete, if either it is dependent (since there
10063 is no meaningful definition of complete in that
10064 case) or the qualifying class is currently being
10065 defined. */
10066 || !(dependent_type_p (ctype)
10067 || currently_open_class (ctype)))
10068 /* Check that the qualifying type is complete. */
10069 && !complete_type_or_else (ctype, NULL_TREE))
10070 return error_mark_node;
10071 else if (TREE_CODE (type) == FUNCTION_TYPE)
10073 if (current_class_type
10074 && (!friendp || funcdef_flag))
10076 error (funcdef_flag
10077 ? G_("cannot define member function %<%T::%s%> "
10078 "within %<%T%>")
10079 : G_("cannot declare member function %<%T::%s%> "
10080 "within %<%T%>"),
10081 ctype, name, current_class_type);
10082 return error_mark_node;
10085 else if (typedef_p && current_class_type)
10087 error ("cannot declare member %<%T::%s%> within %qT",
10088 ctype, name, current_class_type);
10089 return error_mark_node;
10093 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
10094 ctype = current_class_type;
10096 /* Now TYPE has the actual type. */
10098 if (returned_attrs)
10100 if (attrlist)
10101 *attrlist = chainon (returned_attrs, *attrlist);
10102 else
10103 attrlist = &returned_attrs;
10106 if (declarator
10107 && declarator->kind == cdk_id
10108 && declarator->std_attributes)
10109 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
10110 a declarator-id appertains to the entity that is declared. */
10111 *attrlist = chainon (*attrlist, declarator->std_attributes);
10113 /* Handle parameter packs. */
10114 if (parameter_pack_p)
10116 if (decl_context == PARM)
10117 /* Turn the type into a pack expansion.*/
10118 type = make_pack_expansion (type);
10119 else
10120 error ("non-parameter %qs cannot be a parameter pack", name);
10123 /* Did array size calculations overflow or does the array cover more
10124 than half of the address-space? */
10125 if (TREE_CODE (type) == ARRAY_TYPE
10126 && COMPLETE_TYPE_P (type)
10127 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
10128 && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
10130 error ("size of array %qs is too large", name);
10131 /* If we proceed with the array type as it is, we'll eventually
10132 crash in tree_low_cst(). */
10133 type = error_mark_node;
10136 if ((decl_context == FIELD || decl_context == PARM)
10137 && !processing_template_decl
10138 && variably_modified_type_p (type, NULL_TREE))
10140 if (decl_context == FIELD)
10141 error ("data member may not have variably modified type %qT", type);
10142 else
10143 error ("parameter may not have variably modified type %qT", type);
10144 type = error_mark_node;
10147 if (explicitp == 1 || (explicitp && friendp))
10149 /* [dcl.fct.spec] The explicit specifier shall only be used in
10150 declarations of constructors within a class definition. */
10151 error ("only declarations of constructors can be %<explicit%>");
10152 explicitp = 0;
10155 if (storage_class == sc_mutable)
10157 if (decl_context != FIELD || friendp)
10159 error ("non-member %qs cannot be declared %<mutable%>", name);
10160 storage_class = sc_none;
10162 else if (decl_context == TYPENAME || typedef_p)
10164 error ("non-object member %qs cannot be declared %<mutable%>", name);
10165 storage_class = sc_none;
10167 else if (TREE_CODE (type) == FUNCTION_TYPE
10168 || TREE_CODE (type) == METHOD_TYPE)
10170 error ("function %qs cannot be declared %<mutable%>", name);
10171 storage_class = sc_none;
10173 else if (staticp)
10175 error ("static %qs cannot be declared %<mutable%>", name);
10176 storage_class = sc_none;
10178 else if (type_quals & TYPE_QUAL_CONST)
10180 error ("const %qs cannot be declared %<mutable%>", name);
10181 storage_class = sc_none;
10183 else if (TREE_CODE (type) == REFERENCE_TYPE)
10185 permerror (input_location, "reference %qs cannot be declared "
10186 "%<mutable%>", name);
10187 storage_class = sc_none;
10191 /* If this is declaring a typedef name, return a TYPE_DECL. */
10192 if (typedef_p && decl_context != TYPENAME)
10194 tree decl;
10196 /* Note that the grammar rejects storage classes
10197 in typenames, fields or parameters. */
10198 if (current_lang_name == lang_name_java)
10199 TYPE_FOR_JAVA (type) = 1;
10201 /* This declaration:
10203 typedef void f(int) const;
10205 declares a function type which is not a member of any
10206 particular class, but which is cv-qualified; for
10207 example "f S::*" declares a pointer to a const-qualified
10208 member function of S. We record the cv-qualification in the
10209 function type. */
10210 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
10212 type = apply_memfn_quals (type, memfn_quals, rqual);
10214 /* We have now dealt with these qualifiers. */
10215 memfn_quals = TYPE_UNQUALIFIED;
10216 rqual = REF_QUAL_NONE;
10219 if (type_uses_auto (type))
10221 error ("typedef declared %<auto%>");
10222 type = error_mark_node;
10225 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type))
10226 pedwarn (input_location, OPT_Wvla,
10227 "typedef naming array of runtime bound");
10229 if (decl_context == FIELD)
10230 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10231 else
10232 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10233 if (id_declarator && declarator->u.id.qualifying_scope) {
10234 error_at (DECL_SOURCE_LOCATION (decl),
10235 "typedef name may not be a nested-name-specifier");
10236 TREE_TYPE (decl) = error_mark_node;
10239 if (decl_context != FIELD)
10241 if (!current_function_decl)
10242 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10243 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10244 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10245 (current_function_decl)))
10246 /* The TYPE_DECL is "abstract" because there will be
10247 clones of this constructor/destructor, and there will
10248 be copies of this TYPE_DECL generated in those
10249 clones. */
10250 DECL_ABSTRACT (decl) = 1;
10252 else if (current_class_type
10253 && constructor_name_p (unqualified_id, current_class_type))
10254 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10255 "as enclosing class",
10256 unqualified_id);
10258 /* If the user declares "typedef struct {...} foo" then the
10259 struct will have an anonymous name. Fill that name in now.
10260 Nothing can refer to it, so nothing needs know about the name
10261 change. */
10262 if (type != error_mark_node
10263 && unqualified_id
10264 && TYPE_NAME (type)
10265 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10266 && TYPE_ANONYMOUS_P (type)
10267 && declspecs->type_definition_p
10268 && cp_type_quals (type) == TYPE_UNQUALIFIED)
10270 tree t;
10272 /* Replace the anonymous name with the real name everywhere. */
10273 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10275 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
10276 /* We do not rename the debug info representing the
10277 anonymous tagged type because the standard says in
10278 [dcl.typedef] that the naming applies only for
10279 linkage purposes. */
10280 /*debug_hooks->set_name (t, decl);*/
10281 TYPE_NAME (t) = decl;
10284 if (TYPE_LANG_SPECIFIC (type))
10285 TYPE_WAS_ANONYMOUS (type) = 1;
10287 /* If this is a typedef within a template class, the nested
10288 type is a (non-primary) template. The name for the
10289 template needs updating as well. */
10290 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10291 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10292 = TYPE_IDENTIFIER (type);
10294 /* Adjust linkage now that we aren't anonymous anymore. */
10295 reset_type_linkage (type);
10297 /* FIXME remangle member functions; member functions of a
10298 type with external linkage have external linkage. */
10301 if (signed_p
10302 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10303 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10305 bad_specifiers (decl, BSP_TYPE, virtualp,
10306 memfn_quals != TYPE_UNQUALIFIED,
10307 inlinep, friendp, raises != NULL_TREE);
10309 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10310 /* Acknowledge that this was written:
10311 `using analias = atype;'. */
10312 TYPE_DECL_ALIAS_P (decl) = 1;
10314 return decl;
10317 /* Detect the case of an array type of unspecified size
10318 which came, as such, direct from a typedef name.
10319 We must copy the type, so that the array's domain can be
10320 individually set by the object's initializer. */
10322 if (type && typedef_type
10323 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10324 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10325 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10327 /* Detect where we're using a typedef of function type to declare a
10328 function. PARMS will not be set, so we must create it now. */
10330 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10332 tree decls = NULL_TREE;
10333 tree args;
10335 for (args = TYPE_ARG_TYPES (type);
10336 args && args != void_list_node;
10337 args = TREE_CHAIN (args))
10339 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10341 DECL_CHAIN (decl) = decls;
10342 decls = decl;
10345 parms = nreverse (decls);
10347 if (decl_context != TYPENAME)
10349 /* A cv-qualifier-seq shall only be part of the function type
10350 for a non-static member function. A ref-qualifier shall only
10351 .... /same as above/ [dcl.fct] */
10352 if ((type_memfn_quals (type) != TYPE_UNQUALIFIED
10353 || type_memfn_rqual (type) != REF_QUAL_NONE)
10354 && (current_class_type == NULL_TREE || staticp) )
10356 error (staticp
10357 ? G_("qualified function types cannot be used to "
10358 "declare static member functions")
10359 : G_("qualified function types cannot be used to "
10360 "declare free functions"));
10361 type = TYPE_MAIN_VARIANT (type);
10364 /* The qualifiers on the function type become the qualifiers on
10365 the non-static member function. */
10366 memfn_quals |= type_memfn_quals (type);
10367 rqual = type_memfn_rqual (type);
10368 type_quals = TYPE_UNQUALIFIED;
10372 /* If this is a type name (such as, in a cast or sizeof),
10373 compute the type and return it now. */
10375 if (decl_context == TYPENAME)
10377 /* Note that the grammar rejects storage classes
10378 in typenames, fields or parameters. */
10379 if (type_quals != TYPE_UNQUALIFIED)
10380 type_quals = TYPE_UNQUALIFIED;
10382 /* Special case: "friend class foo" looks like a TYPENAME context. */
10383 if (friendp)
10385 if (type_quals != TYPE_UNQUALIFIED)
10387 error ("type qualifiers specified for friend class declaration");
10388 type_quals = TYPE_UNQUALIFIED;
10390 if (inlinep)
10392 error ("%<inline%> specified for friend class declaration");
10393 inlinep = 0;
10396 if (!current_aggr)
10398 /* Don't allow friend declaration without a class-key. */
10399 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10400 permerror (input_location, "template parameters cannot be friends");
10401 else if (TREE_CODE (type) == TYPENAME_TYPE)
10402 permerror (input_location, "friend declaration requires class-key, "
10403 "i.e. %<friend class %T::%D%>",
10404 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10405 else
10406 permerror (input_location, "friend declaration requires class-key, "
10407 "i.e. %<friend %#T%>",
10408 type);
10411 /* Only try to do this stuff if we didn't already give up. */
10412 if (type != integer_type_node)
10414 /* A friendly class? */
10415 if (current_class_type)
10416 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10417 /*complain=*/true);
10418 else
10419 error ("trying to make class %qT a friend of global scope",
10420 type);
10422 type = void_type_node;
10425 else if (memfn_quals || rqual)
10427 if (ctype == NULL_TREE
10428 && TREE_CODE (type) == METHOD_TYPE)
10429 ctype = TYPE_METHOD_BASETYPE (type);
10431 if (ctype)
10432 type = build_memfn_type (type, ctype, memfn_quals, rqual);
10433 /* Core issue #547: need to allow this in template type args.
10434 Allow it in general in C++11 for alias-declarations. */
10435 else if ((template_type_arg || cxx_dialect >= cxx11)
10436 && TREE_CODE (type) == FUNCTION_TYPE)
10437 type = apply_memfn_quals (type, memfn_quals, rqual);
10438 else
10439 error ("invalid qualifiers on non-member function type");
10442 return type;
10444 else if (unqualified_id == NULL_TREE && decl_context != PARM
10445 && decl_context != CATCHPARM
10446 && TREE_CODE (type) != UNION_TYPE
10447 && ! bitfield)
10449 error ("abstract declarator %qT used as declaration", type);
10450 return error_mark_node;
10453 /* Only functions may be declared using an operator-function-id. */
10454 if (unqualified_id
10455 && IDENTIFIER_OPNAME_P (unqualified_id)
10456 && TREE_CODE (type) != FUNCTION_TYPE
10457 && TREE_CODE (type) != METHOD_TYPE)
10459 error ("declaration of %qD as non-function", unqualified_id);
10460 return error_mark_node;
10463 /* We don't check parameter types here because we can emit a better
10464 error message later. */
10465 if (decl_context != PARM)
10467 type = check_var_type (unqualified_id, type);
10468 if (type == error_mark_node)
10469 return error_mark_node;
10472 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10473 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10475 if (decl_context == PARM || decl_context == CATCHPARM)
10477 if (ctype || in_namespace)
10478 error ("cannot use %<::%> in parameter declaration");
10480 if (type_uses_auto (type))
10482 if (cxx_dialect >= cxx1y)
10483 error ("%<auto%> parameter not permitted in this context");
10484 else
10485 error ("parameter declared %<auto%>");
10486 type = error_mark_node;
10489 /* A parameter declared as an array of T is really a pointer to T.
10490 One declared as a function is really a pointer to a function.
10491 One declared as a member is really a pointer to member. */
10493 if (TREE_CODE (type) == ARRAY_TYPE)
10495 /* Transfer const-ness of array into that of type pointed to. */
10496 type = build_pointer_type (TREE_TYPE (type));
10497 type_quals = TYPE_UNQUALIFIED;
10499 else if (TREE_CODE (type) == FUNCTION_TYPE)
10500 type = build_pointer_type (type);
10503 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10504 && !NEW_DELETE_OPNAME_P (unqualified_id))
10506 cp_cv_quals real_quals = memfn_quals;
10507 if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
10508 real_quals |= TYPE_QUAL_CONST;
10509 type = build_memfn_type (type, ctype, real_quals, rqual);
10513 tree decl;
10515 if (decl_context == PARM)
10517 decl = cp_build_parm_decl (unqualified_id, type);
10519 bad_specifiers (decl, BSP_PARM, virtualp,
10520 memfn_quals != TYPE_UNQUALIFIED,
10521 inlinep, friendp, raises != NULL_TREE);
10523 else if (decl_context == FIELD)
10525 if (!staticp && TREE_CODE (type) != METHOD_TYPE
10526 && type_uses_auto (type))
10528 error ("non-static data member declared %<auto%>");
10529 type = error_mark_node;
10532 /* The C99 flexible array extension. */
10533 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10534 && TYPE_DOMAIN (type) == NULL_TREE)
10536 tree itype = compute_array_index_type (dname, integer_zero_node,
10537 tf_warning_or_error);
10538 type = build_cplus_array_type (TREE_TYPE (type), itype);
10541 if (type == error_mark_node)
10543 /* Happens when declaring arrays of sizes which
10544 are error_mark_node, for example. */
10545 decl = NULL_TREE;
10547 else if (in_namespace && !friendp)
10549 /* Something like struct S { int N::j; }; */
10550 error ("invalid use of %<::%>");
10551 return error_mark_node;
10553 else if (TREE_CODE (type) == FUNCTION_TYPE
10554 || TREE_CODE (type) == METHOD_TYPE)
10556 int publicp = 0;
10557 tree function_context;
10559 if (friendp == 0)
10561 /* This should never happen in pure C++ (the check
10562 could be an assert). It could happen in
10563 Objective-C++ if someone writes invalid code that
10564 uses a function declaration for an instance
10565 variable or property (instance variables and
10566 properties are parsed as FIELD_DECLs, but they are
10567 part of an Objective-C class, not a C++ class).
10568 That code is invalid and is caught by this
10569 check. */
10570 if (!ctype)
10572 error ("declaration of function %qD in invalid context",
10573 unqualified_id);
10574 return error_mark_node;
10577 /* ``A union may [ ... ] not [ have ] virtual functions.''
10578 ARM 9.5 */
10579 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10581 error ("function %qD declared virtual inside a union",
10582 unqualified_id);
10583 return error_mark_node;
10586 if (NEW_DELETE_OPNAME_P (unqualified_id))
10588 if (virtualp)
10590 error ("%qD cannot be declared virtual, since it "
10591 "is always static",
10592 unqualified_id);
10593 virtualp = 0;
10598 /* Check that the name used for a destructor makes sense. */
10599 if (sfk == sfk_destructor)
10601 tree uqname = id_declarator->u.id.unqualified_name;
10603 if (!ctype)
10605 gcc_assert (friendp);
10606 error ("expected qualified name in friend declaration "
10607 "for destructor %qD", uqname);
10608 return error_mark_node;
10611 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10613 error ("declaration of %qD as member of %qT",
10614 uqname, ctype);
10615 return error_mark_node;
10617 if (concept_p)
10619 error ("a destructor cannot be %<concept%>");
10620 return error_mark_node;
10622 if (constexpr_p)
10624 error ("a destructor cannot be %<constexpr%>");
10625 return error_mark_node;
10628 else if (sfk == sfk_constructor && friendp && !ctype)
10630 error ("expected qualified name in friend declaration "
10631 "for constructor %qD",
10632 id_declarator->u.id.unqualified_name);
10633 return error_mark_node;
10635 if (sfk == sfk_constructor)
10636 if (concept_p)
10638 error ("a constructor cannot be %<concept%>");
10639 return error_mark_node;
10642 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10643 function_context = (ctype != NULL_TREE) ?
10644 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10645 publicp = (! friendp || ! staticp)
10646 && function_context == NULL_TREE;
10647 decl = grokfndecl (ctype, type,
10648 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10649 ? unqualified_id : dname,
10650 parms,
10651 unqualified_id,
10652 virtualp, flags, memfn_quals, rqual, raises,
10653 friendp ? -1 : 0, friendp, publicp,
10654 inlinep | (2 * constexpr_p) | (4 * concept_p),
10655 sfk,
10656 funcdef_flag, template_count, in_namespace,
10657 attrlist, declarator->id_loc);
10658 decl = set_virt_specifiers (decl, virt_specifiers);
10659 if (decl == NULL_TREE)
10660 return error_mark_node;
10661 #if 0
10662 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10663 /* The decl and setting of decl_attr is also turned off. */
10664 decl = build_decl_attribute_variant (decl, decl_attr);
10665 #endif
10667 /* [class.conv.ctor]
10669 A constructor declared without the function-specifier
10670 explicit that can be called with a single parameter
10671 specifies a conversion from the type of its first
10672 parameter to the type of its class. Such a constructor
10673 is called a converting constructor. */
10674 if (explicitp == 2)
10675 DECL_NONCONVERTING_P (decl) = 1;
10677 else if (!staticp && !dependent_type_p (type)
10678 && !COMPLETE_TYPE_P (complete_type (type))
10679 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10681 if (unqualified_id)
10682 error ("field %qD has incomplete type %qT",
10683 unqualified_id, type);
10684 else
10685 error ("name %qT has incomplete type", type);
10687 type = error_mark_node;
10688 decl = NULL_TREE;
10690 else
10692 if (friendp)
10694 error ("%qE is neither function nor member function; "
10695 "cannot be declared friend", unqualified_id);
10696 friendp = 0;
10698 decl = NULL_TREE;
10701 if (friendp)
10703 /* Friends are treated specially. */
10704 if (ctype == current_class_type)
10705 ; /* We already issued a permerror. */
10706 else if (decl && DECL_NAME (decl))
10708 if (template_class_depth (current_class_type) == 0)
10710 decl = check_explicit_specialization
10711 (unqualified_id, decl, template_count,
10712 2 * funcdef_flag + 4);
10713 if (decl == error_mark_node)
10714 return error_mark_node;
10717 decl = do_friend (ctype, unqualified_id, decl,
10718 *attrlist, flags,
10719 funcdef_flag);
10720 return decl;
10722 else
10723 return error_mark_node;
10726 /* Structure field. It may not be a function, except for C++. */
10728 if (decl == NULL_TREE)
10730 if (staticp)
10732 /* C++ allows static class members. All other work
10733 for this is done by grokfield. */
10734 decl = build_lang_decl_loc (declarator->id_loc,
10735 VAR_DECL, unqualified_id, type);
10736 set_linkage_for_static_data_member (decl);
10737 /* Even if there is an in-class initialization, DECL
10738 is considered undefined until an out-of-class
10739 definition is provided. */
10740 DECL_EXTERNAL (decl) = 1;
10742 if (thread_p)
10744 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10745 if (declspecs->gnu_thread_keyword_p)
10746 DECL_GNU_TLS_P (decl) = true;
10748 if (concept_p)
10749 // TODO: This needs to be revisited once variable
10750 // templates are supported
10751 error ("static data member %qE declared %<concept%>",
10752 unqualified_id);
10753 else if (constexpr_p && !initialized)
10755 error ("constexpr static data member %qD must have an "
10756 "initializer", decl);
10757 constexpr_p = false;
10760 else
10762 if (concept_p)
10763 error ("non-static data member %qE declared %<concept%>",
10764 unqualified_id);
10765 else if (constexpr_p)
10767 error ("non-static data member %qE declared %<constexpr%>",
10768 unqualified_id);
10769 constexpr_p = false;
10771 decl = build_decl (input_location,
10772 FIELD_DECL, unqualified_id, type);
10773 DECL_NONADDRESSABLE_P (decl) = bitfield;
10774 if (bitfield && !unqualified_id)
10775 TREE_NO_WARNING (decl) = 1;
10777 if (storage_class == sc_mutable)
10779 DECL_MUTABLE_P (decl) = 1;
10780 storage_class = sc_none;
10783 if (initialized)
10785 /* An attempt is being made to initialize a non-static
10786 member. This is new in C++11. */
10787 maybe_warn_cpp0x (CPP0X_NSDMI);
10789 /* If this has been parsed with static storage class, but
10790 errors forced staticp to be cleared, ensure NSDMI is
10791 not present. */
10792 if (declspecs->storage_class == sc_static)
10793 DECL_INITIAL (decl) = error_mark_node;
10797 bad_specifiers (decl, BSP_FIELD, virtualp,
10798 memfn_quals != TYPE_UNQUALIFIED,
10799 inlinep, friendp, raises != NULL_TREE);
10802 else if (TREE_CODE (type) == FUNCTION_TYPE
10803 || TREE_CODE (type) == METHOD_TYPE)
10805 tree original_name;
10806 int publicp = 0;
10808 if (!unqualified_id)
10809 return error_mark_node;
10811 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10812 original_name = dname;
10813 else
10814 original_name = unqualified_id;
10816 if (storage_class == sc_auto)
10817 error ("storage class %<auto%> invalid for function %qs", name);
10818 else if (storage_class == sc_register)
10819 error ("storage class %<register%> invalid for function %qs", name);
10820 else if (thread_p)
10822 if (declspecs->gnu_thread_keyword_p)
10823 error ("storage class %<__thread%> invalid for function %qs",
10824 name);
10825 else
10826 error ("storage class %<thread_local%> invalid for function %qs",
10827 name);
10830 if (virt_specifiers)
10831 error ("virt-specifiers in %qs not allowed outside a class definition", name);
10832 /* Function declaration not at top level.
10833 Storage classes other than `extern' are not allowed
10834 and `extern' makes no difference. */
10835 if (! toplevel_bindings_p ()
10836 && (storage_class == sc_static
10837 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
10838 && pedantic)
10840 if (storage_class == sc_static)
10841 pedwarn (input_location, OPT_Wpedantic,
10842 "%<static%> specified invalid for function %qs "
10843 "declared out of global scope", name);
10844 else
10845 pedwarn (input_location, OPT_Wpedantic,
10846 "%<inline%> specifier invalid for function %qs "
10847 "declared out of global scope", name);
10850 if (ctype == NULL_TREE)
10852 if (virtualp)
10854 error ("virtual non-class function %qs", name);
10855 virtualp = 0;
10857 else if (sfk == sfk_constructor
10858 || sfk == sfk_destructor)
10860 error (funcdef_flag
10861 ? G_("%qs defined in a non-class scope")
10862 : G_("%qs declared in a non-class scope"), name);
10863 sfk = sfk_none;
10867 /* Record whether the function is public. */
10868 publicp = (ctype != NULL_TREE
10869 || storage_class != sc_static);
10871 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10872 virtualp, flags, memfn_quals, rqual, raises,
10873 1, friendp,
10874 publicp,
10875 inlinep | (2 * constexpr_p) | (4 * concept_p),
10876 sfk,
10877 funcdef_flag,
10878 template_count, in_namespace, attrlist,
10879 declarator->id_loc);
10880 if (decl == NULL_TREE)
10881 return error_mark_node;
10883 if (staticp == 1)
10885 int invalid_static = 0;
10887 /* Don't allow a static member function in a class, and forbid
10888 declaring main to be static. */
10889 if (TREE_CODE (type) == METHOD_TYPE)
10891 permerror (input_location, "cannot declare member function %qD to have "
10892 "static linkage", decl);
10893 invalid_static = 1;
10895 else if (current_function_decl)
10897 /* FIXME need arm citation */
10898 error ("cannot declare static function inside another function");
10899 invalid_static = 1;
10902 if (invalid_static)
10904 staticp = 0;
10905 storage_class = sc_none;
10909 else
10911 /* It's a variable. */
10913 // TODO: This needs to be revisited once variable
10914 // templates are supported
10915 if (concept_p)
10917 error ("variable %qE declared %<concept%>",
10918 unqualified_id);
10919 return error_mark_node;
10922 /* An uninitialized decl with `extern' is a reference. */
10923 decl = grokvardecl (type, unqualified_id,
10924 declspecs,
10925 initialized,
10926 (type_quals & TYPE_QUAL_CONST) != 0,
10927 ctype ? ctype : in_namespace);
10928 bad_specifiers (decl, BSP_VAR, virtualp,
10929 memfn_quals != TYPE_UNQUALIFIED,
10930 inlinep, friendp, raises != NULL_TREE);
10932 if (ctype)
10934 DECL_CONTEXT (decl) = ctype;
10935 if (staticp == 1)
10937 permerror (input_location, "%<static%> may not be used when defining "
10938 "(as opposed to declaring) a static data member");
10939 staticp = 0;
10940 storage_class = sc_none;
10942 if (storage_class == sc_register && TREE_STATIC (decl))
10944 error ("static member %qD declared %<register%>", decl);
10945 storage_class = sc_none;
10947 if (storage_class == sc_extern && pedantic)
10949 pedwarn (input_location, OPT_Wpedantic,
10950 "cannot explicitly declare member %q#D to have "
10951 "extern linkage", decl);
10952 storage_class = sc_none;
10955 else if (constexpr_p && DECL_EXTERNAL (decl))
10957 error ("declaration of constexpr variable %qD is not a definition",
10958 decl);
10959 constexpr_p = false;
10963 if (storage_class == sc_extern && initialized && !funcdef_flag)
10965 if (toplevel_bindings_p ())
10967 /* It's common practice (and completely valid) to have a const
10968 be initialized and declared extern. */
10969 if (!(type_quals & TYPE_QUAL_CONST))
10970 warning (0, "%qs initialized and declared %<extern%>", name);
10972 else
10974 error ("%qs has both %<extern%> and initializer", name);
10975 return error_mark_node;
10979 /* Record `register' declaration for warnings on &
10980 and in case doing stupid register allocation. */
10982 if (storage_class == sc_register)
10983 DECL_REGISTER (decl) = 1;
10984 else if (storage_class == sc_extern)
10985 DECL_THIS_EXTERN (decl) = 1;
10986 else if (storage_class == sc_static)
10987 DECL_THIS_STATIC (decl) = 1;
10989 /* Set constexpr flag on vars (functions got it in grokfndecl). */
10990 if (constexpr_p && VAR_P (decl))
10991 DECL_DECLARED_CONSTEXPR_P (decl) = true;
10993 /* Record constancy and volatility on the DECL itself . There's
10994 no need to do this when processing a template; we'll do this
10995 for the instantiated declaration based on the type of DECL. */
10996 if (!processing_template_decl)
10997 cp_apply_type_quals_to_decl (type_quals, decl);
10999 return decl;
11003 /* Subroutine of start_function. Ensure that each of the parameter
11004 types (as listed in PARMS) is complete, as is required for a
11005 function definition. */
11007 static void
11008 require_complete_types_for_parms (tree parms)
11010 for (; parms; parms = DECL_CHAIN (parms))
11012 if (dependent_type_p (TREE_TYPE (parms)))
11013 continue;
11014 if (!VOID_TYPE_P (TREE_TYPE (parms))
11015 && complete_type_or_else (TREE_TYPE (parms), parms))
11017 relayout_decl (parms);
11018 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
11020 else
11021 /* grokparms or complete_type_or_else will have already issued
11022 an error. */
11023 TREE_TYPE (parms) = error_mark_node;
11027 /* Returns nonzero if T is a local variable. */
11030 local_variable_p (const_tree t)
11032 if ((VAR_P (t)
11033 /* A VAR_DECL with a context that is a _TYPE is a static data
11034 member. */
11035 && !TYPE_P (CP_DECL_CONTEXT (t))
11036 /* Any other non-local variable must be at namespace scope. */
11037 && !DECL_NAMESPACE_SCOPE_P (t))
11038 || (TREE_CODE (t) == PARM_DECL))
11039 return 1;
11041 return 0;
11044 /* Like local_variable_p, but suitable for use as a tree-walking
11045 function. */
11047 static tree
11048 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
11049 void * /*data*/)
11051 if (local_variable_p (*tp)
11052 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
11053 return *tp;
11054 else if (TYPE_P (*tp))
11055 *walk_subtrees = 0;
11057 return NULL_TREE;
11060 /* Check that ARG, which is a default-argument expression for a
11061 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
11062 something goes wrong. DECL may also be a _TYPE node, rather than a
11063 DECL, if there is no DECL available. */
11065 tree
11066 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
11068 tree var;
11069 tree decl_type;
11071 if (TREE_CODE (arg) == DEFAULT_ARG)
11072 /* We get a DEFAULT_ARG when looking at an in-class declaration
11073 with a default argument. Ignore the argument for now; we'll
11074 deal with it after the class is complete. */
11075 return arg;
11077 if (TYPE_P (decl))
11079 decl_type = decl;
11080 decl = NULL_TREE;
11082 else
11083 decl_type = TREE_TYPE (decl);
11085 if (arg == error_mark_node
11086 || decl == error_mark_node
11087 || TREE_TYPE (arg) == error_mark_node
11088 || decl_type == error_mark_node)
11089 /* Something already went wrong. There's no need to check
11090 further. */
11091 return error_mark_node;
11093 /* [dcl.fct.default]
11095 A default argument expression is implicitly converted to the
11096 parameter type. */
11097 ++cp_unevaluated_operand;
11098 perform_implicit_conversion_flags (decl_type, arg, complain,
11099 LOOKUP_IMPLICIT);
11100 --cp_unevaluated_operand;
11102 if (warn_zero_as_null_pointer_constant
11103 && TYPE_PTR_OR_PTRMEM_P (decl_type)
11104 && null_ptr_cst_p (arg)
11105 && (complain & tf_warning)
11106 && maybe_warn_zero_as_null_pointer_constant (arg, input_location))
11107 return nullptr_node;
11109 /* [dcl.fct.default]
11111 Local variables shall not be used in default argument
11112 expressions.
11114 The keyword `this' shall not be used in a default argument of a
11115 member function. */
11116 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
11117 if (var)
11119 if (complain & tf_warning_or_error)
11121 if (DECL_NAME (var) == this_identifier)
11122 permerror (input_location, "default argument %qE uses %qD",
11123 arg, var);
11124 else
11125 error ("default argument %qE uses local variable %qD", arg, var);
11127 return error_mark_node;
11130 /* All is well. */
11131 return arg;
11134 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
11136 static tree
11137 type_is_deprecated (tree type)
11139 enum tree_code code;
11140 if (TREE_DEPRECATED (type))
11141 return type;
11142 if (TYPE_NAME (type)
11143 && TREE_DEPRECATED (TYPE_NAME (type)))
11144 return type;
11146 /* Do warn about using typedefs to a deprecated class. */
11147 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
11148 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
11150 code = TREE_CODE (type);
11152 if (code == POINTER_TYPE || code == REFERENCE_TYPE
11153 || code == OFFSET_TYPE || code == FUNCTION_TYPE
11154 || code == METHOD_TYPE || code == ARRAY_TYPE)
11155 return type_is_deprecated (TREE_TYPE (type));
11157 if (TYPE_PTRMEMFUNC_P (type))
11158 return type_is_deprecated
11159 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
11161 return NULL_TREE;
11164 /* Decode the list of parameter types for a function type.
11165 Given the list of things declared inside the parens,
11166 return a list of types.
11168 If this parameter does not end with an ellipsis, we append
11169 void_list_node.
11171 *PARMS is set to the chain of PARM_DECLs created. */
11173 static tree
11174 grokparms (tree parmlist, tree *parms)
11176 tree result = NULL_TREE;
11177 tree decls = NULL_TREE;
11178 tree parm;
11179 int any_error = 0;
11181 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
11183 tree type = NULL_TREE;
11184 tree init = TREE_PURPOSE (parm);
11185 tree decl = TREE_VALUE (parm);
11186 const char *errmsg;
11188 if (parm == void_list_node)
11189 break;
11191 if (! decl || TREE_TYPE (decl) == error_mark_node)
11192 continue;
11194 type = TREE_TYPE (decl);
11195 if (VOID_TYPE_P (type))
11197 if (same_type_p (type, void_type_node)
11198 && DECL_SELF_REFERENCE_P (type)
11199 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
11200 /* this is a parmlist of `(void)', which is ok. */
11201 break;
11202 cxx_incomplete_type_error (decl, type);
11203 /* It's not a good idea to actually create parameters of
11204 type `void'; other parts of the compiler assume that a
11205 void type terminates the parameter list. */
11206 type = error_mark_node;
11207 TREE_TYPE (decl) = error_mark_node;
11210 if (type != error_mark_node
11211 && TYPE_FOR_JAVA (type)
11212 && MAYBE_CLASS_TYPE_P (type))
11214 error ("parameter %qD has Java class type", decl);
11215 type = error_mark_node;
11216 TREE_TYPE (decl) = error_mark_node;
11217 init = NULL_TREE;
11220 if (type != error_mark_node
11221 && (errmsg = targetm.invalid_parameter_type (type)))
11223 error (errmsg);
11224 type = error_mark_node;
11225 TREE_TYPE (decl) = error_mark_node;
11228 if (type != error_mark_node)
11230 if (deprecated_state != DEPRECATED_SUPPRESS)
11232 tree deptype = type_is_deprecated (type);
11233 if (deptype)
11234 warn_deprecated_use (deptype, NULL_TREE);
11237 /* Top-level qualifiers on the parameters are
11238 ignored for function types. */
11239 type = cp_build_qualified_type (type, 0);
11240 if (TREE_CODE (type) == METHOD_TYPE)
11242 error ("parameter %qD invalidly declared method type", decl);
11243 type = build_pointer_type (type);
11244 TREE_TYPE (decl) = type;
11246 else if (abstract_virtuals_error (decl, type))
11247 any_error = 1; /* Seems like a good idea. */
11248 else if (POINTER_TYPE_P (type))
11250 /* [dcl.fct]/6, parameter types cannot contain pointers
11251 (references) to arrays of unknown bound. */
11252 tree t = TREE_TYPE (type);
11253 int ptr = TYPE_PTR_P (type);
11255 while (1)
11257 if (TYPE_PTR_P (t))
11258 ptr = 1;
11259 else if (TREE_CODE (t) != ARRAY_TYPE)
11260 break;
11261 else if (!TYPE_DOMAIN (t))
11262 break;
11263 t = TREE_TYPE (t);
11265 if (TREE_CODE (t) == ARRAY_TYPE)
11266 error (ptr
11267 ? G_("parameter %qD includes pointer to array of "
11268 "unknown bound %qT")
11269 : G_("parameter %qD includes reference to array of "
11270 "unknown bound %qT"),
11271 decl, t);
11274 if (any_error)
11275 init = NULL_TREE;
11276 else if (init && !processing_template_decl)
11277 init = check_default_argument (decl, init, tf_warning_or_error);
11280 DECL_CHAIN (decl) = decls;
11281 decls = decl;
11282 result = tree_cons (init, type, result);
11284 decls = nreverse (decls);
11285 result = nreverse (result);
11286 if (parm)
11287 result = chainon (result, void_list_node);
11288 *parms = decls;
11290 return result;
11294 /* D is a constructor or overloaded `operator='.
11296 Let T be the class in which D is declared. Then, this function
11297 returns:
11299 -1 if D's is an ill-formed constructor or copy assignment operator
11300 whose first parameter is of type `T'.
11301 0 if D is not a copy constructor or copy assignment
11302 operator.
11303 1 if D is a copy constructor or copy assignment operator whose
11304 first parameter is a reference to non-const qualified T.
11305 2 if D is a copy constructor or copy assignment operator whose
11306 first parameter is a reference to const qualified T.
11308 This function can be used as a predicate. Positive values indicate
11309 a copy constructor and nonzero values indicate a copy assignment
11310 operator. */
11313 copy_fn_p (const_tree d)
11315 tree args;
11316 tree arg_type;
11317 int result = 1;
11319 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11321 if (TREE_CODE (d) == TEMPLATE_DECL
11322 || (DECL_TEMPLATE_INFO (d)
11323 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11324 /* Instantiations of template member functions are never copy
11325 functions. Note that member functions of templated classes are
11326 represented as template functions internally, and we must
11327 accept those as copy functions. */
11328 return 0;
11330 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11331 if (!args)
11332 return 0;
11334 arg_type = TREE_VALUE (args);
11335 if (arg_type == error_mark_node)
11336 return 0;
11338 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11340 /* Pass by value copy assignment operator. */
11341 result = -1;
11343 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11344 && !TYPE_REF_IS_RVALUE (arg_type)
11345 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11347 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11348 result = 2;
11350 else
11351 return 0;
11353 args = TREE_CHAIN (args);
11355 if (args && args != void_list_node && !TREE_PURPOSE (args))
11356 /* There are more non-optional args. */
11357 return 0;
11359 return result;
11362 /* D is a constructor or overloaded `operator='.
11364 Let T be the class in which D is declared. Then, this function
11365 returns true when D is a move constructor or move assignment
11366 operator, false otherwise. */
11368 bool
11369 move_fn_p (const_tree d)
11371 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11373 if (cxx_dialect == cxx98)
11374 /* There are no move constructors if we are in C++98 mode. */
11375 return false;
11377 if (TREE_CODE (d) == TEMPLATE_DECL
11378 || (DECL_TEMPLATE_INFO (d)
11379 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11380 /* Instantiations of template member functions are never move
11381 functions. Note that member functions of templated classes are
11382 represented as template functions internally, and we must
11383 accept those as move functions. */
11384 return 0;
11386 return move_signature_fn_p (d);
11389 /* D is a constructor or overloaded `operator='.
11391 Then, this function returns true when D has the same signature as a move
11392 constructor or move assignment operator (because either it is such a
11393 ctor/op= or it is a template specialization with the same signature),
11394 false otherwise. */
11396 bool
11397 move_signature_fn_p (const_tree d)
11399 tree args;
11400 tree arg_type;
11401 bool result = false;
11403 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11404 if (!args)
11405 return 0;
11407 arg_type = TREE_VALUE (args);
11408 if (arg_type == error_mark_node)
11409 return 0;
11411 if (TREE_CODE (arg_type) == REFERENCE_TYPE
11412 && TYPE_REF_IS_RVALUE (arg_type)
11413 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11414 DECL_CONTEXT (d)))
11415 result = true;
11417 args = TREE_CHAIN (args);
11419 if (args && args != void_list_node && !TREE_PURPOSE (args))
11420 /* There are more non-optional args. */
11421 return false;
11423 return result;
11426 /* Remember any special properties of member function DECL. */
11428 void
11429 grok_special_member_properties (tree decl)
11431 tree class_type;
11433 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11434 return;
11436 class_type = DECL_CONTEXT (decl);
11437 if (DECL_CONSTRUCTOR_P (decl))
11439 int ctor = copy_fn_p (decl);
11441 if (!DECL_ARTIFICIAL (decl))
11442 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11444 if (ctor > 0)
11446 /* [class.copy]
11448 A non-template constructor for class X is a copy
11449 constructor if its first parameter is of type X&, const
11450 X&, volatile X& or const volatile X&, and either there
11451 are no other parameters or else all other parameters have
11452 default arguments. */
11453 TYPE_HAS_COPY_CTOR (class_type) = 1;
11454 if (user_provided_p (decl))
11455 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
11456 if (ctor > 1)
11457 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
11459 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
11461 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
11462 if (user_provided_p (decl))
11463 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
11465 else if (move_fn_p (decl) && user_provided_p (decl))
11466 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
11467 else if (is_list_ctor (decl))
11468 TYPE_HAS_LIST_CTOR (class_type) = 1;
11470 if (DECL_DECLARED_CONSTEXPR_P (decl)
11471 && !copy_fn_p (decl) && !move_fn_p (decl))
11472 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
11474 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
11476 /* [class.copy]
11478 A non-template assignment operator for class X is a copy
11479 assignment operator if its parameter is of type X, X&, const
11480 X&, volatile X& or const volatile X&. */
11482 int assop = copy_fn_p (decl);
11484 if (assop)
11486 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
11487 if (user_provided_p (decl))
11488 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
11489 if (assop != 1)
11490 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
11492 else if (move_fn_p (decl) && user_provided_p (decl))
11493 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
11495 /* Destructors are handled in check_methods. */
11498 /* Check a constructor DECL has the correct form. Complains
11499 if the class has a constructor of the form X(X). */
11502 grok_ctor_properties (const_tree ctype, const_tree decl)
11504 int ctor_parm = copy_fn_p (decl);
11506 if (ctor_parm < 0)
11508 /* [class.copy]
11510 A declaration of a constructor for a class X is ill-formed if
11511 its first parameter is of type (optionally cv-qualified) X
11512 and either there are no other parameters or else all other
11513 parameters have default arguments.
11515 We *don't* complain about member template instantiations that
11516 have this form, though; they can occur as we try to decide
11517 what constructor to use during overload resolution. Since
11518 overload resolution will never prefer such a constructor to
11519 the non-template copy constructor (which is either explicitly
11520 or implicitly defined), there's no need to worry about their
11521 existence. Theoretically, they should never even be
11522 instantiated, but that's hard to forestall. */
11523 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11524 ctype, ctype);
11525 return 0;
11528 return 1;
11531 /* An operator with this code is unary, but can also be binary. */
11533 static int
11534 ambi_op_p (enum tree_code code)
11536 return (code == INDIRECT_REF
11537 || code == ADDR_EXPR
11538 || code == UNARY_PLUS_EXPR
11539 || code == NEGATE_EXPR
11540 || code == PREINCREMENT_EXPR
11541 || code == PREDECREMENT_EXPR);
11544 /* An operator with this name can only be unary. */
11546 static int
11547 unary_op_p (enum tree_code code)
11549 return (code == TRUTH_NOT_EXPR
11550 || code == BIT_NOT_EXPR
11551 || code == COMPONENT_REF
11552 || code == TYPE_EXPR);
11555 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
11556 errors are issued for invalid declarations. */
11558 bool
11559 grok_op_properties (tree decl, bool complain)
11561 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11562 tree argtype;
11563 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11564 tree name = DECL_NAME (decl);
11565 enum tree_code operator_code;
11566 int arity;
11567 bool ellipsis_p;
11568 tree class_type;
11570 /* Count the number of arguments and check for ellipsis. */
11571 for (argtype = argtypes, arity = 0;
11572 argtype && argtype != void_list_node;
11573 argtype = TREE_CHAIN (argtype))
11574 ++arity;
11575 ellipsis_p = !argtype;
11577 class_type = DECL_CONTEXT (decl);
11578 if (class_type && !CLASS_TYPE_P (class_type))
11579 class_type = NULL_TREE;
11581 if (DECL_CONV_FN_P (decl))
11582 operator_code = TYPE_EXPR;
11583 else
11586 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
11587 if (ansi_opname (CODE) == name) \
11589 operator_code = (CODE); \
11590 break; \
11592 else if (ansi_assopname (CODE) == name) \
11594 operator_code = (CODE); \
11595 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
11596 break; \
11599 #include "operators.def"
11600 #undef DEF_OPERATOR
11602 gcc_unreachable ();
11604 while (0);
11605 gcc_assert (operator_code != MAX_TREE_CODES);
11606 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11608 if (class_type)
11609 switch (operator_code)
11611 case NEW_EXPR:
11612 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11613 break;
11615 case DELETE_EXPR:
11616 TYPE_GETS_DELETE (class_type) |= 1;
11617 break;
11619 case VEC_NEW_EXPR:
11620 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11621 break;
11623 case VEC_DELETE_EXPR:
11624 TYPE_GETS_DELETE (class_type) |= 2;
11625 break;
11627 default:
11628 break;
11631 /* [basic.std.dynamic.allocation]/1:
11633 A program is ill-formed if an allocation function is declared
11634 in a namespace scope other than global scope or declared static
11635 in global scope.
11637 The same also holds true for deallocation functions. */
11638 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11639 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11641 if (DECL_NAMESPACE_SCOPE_P (decl))
11643 if (CP_DECL_CONTEXT (decl) != global_namespace)
11645 error ("%qD may not be declared within a namespace", decl);
11646 return false;
11648 else if (!TREE_PUBLIC (decl))
11650 error ("%qD may not be declared as static", decl);
11651 return false;
11656 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11658 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11659 DECL_IS_OPERATOR_NEW (decl) = 1;
11661 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11662 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11663 else
11665 /* An operator function must either be a non-static member function
11666 or have at least one parameter of a class, a reference to a class,
11667 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11668 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11670 if (operator_code == TYPE_EXPR
11671 || operator_code == CALL_EXPR
11672 || operator_code == COMPONENT_REF
11673 || operator_code == ARRAY_REF
11674 || operator_code == NOP_EXPR)
11676 error ("%qD must be a nonstatic member function", decl);
11677 return false;
11679 else
11681 tree p;
11683 if (DECL_STATIC_FUNCTION_P (decl))
11685 error ("%qD must be either a non-static member "
11686 "function or a non-member function", decl);
11687 return false;
11690 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11692 tree arg = non_reference (TREE_VALUE (p));
11693 if (arg == error_mark_node)
11694 return false;
11696 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11697 because these checks are performed even on
11698 template functions. */
11699 if (MAYBE_CLASS_TYPE_P (arg)
11700 || TREE_CODE (arg) == ENUMERAL_TYPE)
11701 break;
11704 if (!p || p == void_list_node)
11706 if (complain)
11707 error ("%qD must have an argument of class or "
11708 "enumerated type", decl);
11709 return false;
11714 /* There are no restrictions on the arguments to an overloaded
11715 "operator ()". */
11716 if (operator_code == CALL_EXPR)
11717 return true;
11719 /* Warn about conversion operators that will never be used. */
11720 if (IDENTIFIER_TYPENAME_P (name)
11721 && ! DECL_TEMPLATE_INFO (decl)
11722 && warn_conversion
11723 /* Warn only declaring the function; there is no need to
11724 warn again about out-of-class definitions. */
11725 && class_type == current_class_type)
11727 tree t = TREE_TYPE (name);
11728 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11730 if (ref)
11731 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11733 if (VOID_TYPE_P (t))
11734 warning (OPT_Wconversion,
11736 ? G_("conversion to a reference to void "
11737 "will never use a type conversion operator")
11738 : G_("conversion to void "
11739 "will never use a type conversion operator"));
11740 else if (class_type)
11742 if (t == class_type)
11743 warning (OPT_Wconversion,
11745 ? G_("conversion to a reference to the same type "
11746 "will never use a type conversion operator")
11747 : G_("conversion to the same type "
11748 "will never use a type conversion operator"));
11749 /* Don't force t to be complete here. */
11750 else if (MAYBE_CLASS_TYPE_P (t)
11751 && COMPLETE_TYPE_P (t)
11752 && DERIVED_FROM_P (t, class_type))
11753 warning (OPT_Wconversion,
11755 ? G_("conversion to a reference to a base class "
11756 "will never use a type conversion operator")
11757 : G_("conversion to a base class "
11758 "will never use a type conversion operator"));
11763 if (operator_code == COND_EXPR)
11765 /* 13.4.0.3 */
11766 error ("ISO C++ prohibits overloading operator ?:");
11767 return false;
11769 else if (ellipsis_p)
11771 error ("%qD must not have variable number of arguments", decl);
11772 return false;
11774 else if (ambi_op_p (operator_code))
11776 if (arity == 1)
11777 /* We pick the one-argument operator codes by default, so
11778 we don't have to change anything. */
11780 else if (arity == 2)
11782 /* If we thought this was a unary operator, we now know
11783 it to be a binary operator. */
11784 switch (operator_code)
11786 case INDIRECT_REF:
11787 operator_code = MULT_EXPR;
11788 break;
11790 case ADDR_EXPR:
11791 operator_code = BIT_AND_EXPR;
11792 break;
11794 case UNARY_PLUS_EXPR:
11795 operator_code = PLUS_EXPR;
11796 break;
11798 case NEGATE_EXPR:
11799 operator_code = MINUS_EXPR;
11800 break;
11802 case PREINCREMENT_EXPR:
11803 operator_code = POSTINCREMENT_EXPR;
11804 break;
11806 case PREDECREMENT_EXPR:
11807 operator_code = POSTDECREMENT_EXPR;
11808 break;
11810 default:
11811 gcc_unreachable ();
11814 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11816 if ((operator_code == POSTINCREMENT_EXPR
11817 || operator_code == POSTDECREMENT_EXPR)
11818 && ! processing_template_decl
11819 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11821 if (methodp)
11822 error ("postfix %qD must take %<int%> as its argument",
11823 decl);
11824 else
11825 error ("postfix %qD must take %<int%> as its second "
11826 "argument", decl);
11827 return false;
11830 else
11832 if (methodp)
11833 error ("%qD must take either zero or one argument", decl);
11834 else
11835 error ("%qD must take either one or two arguments", decl);
11836 return false;
11839 /* More Effective C++ rule 6. */
11840 if (warn_ecpp
11841 && (operator_code == POSTINCREMENT_EXPR
11842 || operator_code == POSTDECREMENT_EXPR
11843 || operator_code == PREINCREMENT_EXPR
11844 || operator_code == PREDECREMENT_EXPR))
11846 tree arg = TREE_VALUE (argtypes);
11847 tree ret = TREE_TYPE (TREE_TYPE (decl));
11848 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11849 arg = TREE_TYPE (arg);
11850 arg = TYPE_MAIN_VARIANT (arg);
11851 if (operator_code == PREINCREMENT_EXPR
11852 || operator_code == PREDECREMENT_EXPR)
11854 if (TREE_CODE (ret) != REFERENCE_TYPE
11855 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11856 arg))
11857 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11858 build_reference_type (arg));
11860 else
11862 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11863 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11867 else if (unary_op_p (operator_code))
11869 if (arity != 1)
11871 if (methodp)
11872 error ("%qD must take %<void%>", decl);
11873 else
11874 error ("%qD must take exactly one argument", decl);
11875 return false;
11878 else /* if (binary_op_p (operator_code)) */
11880 if (arity != 2)
11882 if (methodp)
11883 error ("%qD must take exactly one argument", decl);
11884 else
11885 error ("%qD must take exactly two arguments", decl);
11886 return false;
11889 /* More Effective C++ rule 7. */
11890 if (warn_ecpp
11891 && (operator_code == TRUTH_ANDIF_EXPR
11892 || operator_code == TRUTH_ORIF_EXPR
11893 || operator_code == COMPOUND_EXPR))
11894 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11895 decl);
11898 /* Effective C++ rule 23. */
11899 if (warn_ecpp
11900 && arity == 2
11901 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11902 && (operator_code == PLUS_EXPR
11903 || operator_code == MINUS_EXPR
11904 || operator_code == TRUNC_DIV_EXPR
11905 || operator_code == MULT_EXPR
11906 || operator_code == TRUNC_MOD_EXPR)
11907 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11908 warning (OPT_Weffc__, "%qD should return by value", decl);
11910 /* [over.oper]/8 */
11911 for (; argtypes && argtypes != void_list_node;
11912 argtypes = TREE_CHAIN (argtypes))
11913 if (TREE_PURPOSE (argtypes))
11915 TREE_PURPOSE (argtypes) = NULL_TREE;
11916 if (operator_code == POSTINCREMENT_EXPR
11917 || operator_code == POSTDECREMENT_EXPR)
11919 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments",
11920 decl);
11922 else
11924 error ("%qD cannot have default arguments", decl);
11925 return false;
11929 return true;
11932 /* Return a string giving the keyword associate with CODE. */
11934 static const char *
11935 tag_name (enum tag_types code)
11937 switch (code)
11939 case record_type:
11940 return "struct";
11941 case class_type:
11942 return "class";
11943 case union_type:
11944 return "union";
11945 case enum_type:
11946 return "enum";
11947 case typename_type:
11948 return "typename";
11949 default:
11950 gcc_unreachable ();
11954 /* Name lookup in an elaborated-type-specifier (after the keyword
11955 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
11956 elaborated-type-specifier is invalid, issue a diagnostic and return
11957 error_mark_node; otherwise, return the *_TYPE to which it referred.
11958 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
11960 tree
11961 check_elaborated_type_specifier (enum tag_types tag_code,
11962 tree decl,
11963 bool allow_template_p)
11965 tree type;
11967 /* In the case of:
11969 struct S { struct S *p; };
11971 name lookup will find the TYPE_DECL for the implicit "S::S"
11972 typedef. Adjust for that here. */
11973 if (DECL_SELF_REFERENCE_P (decl))
11974 decl = TYPE_NAME (TREE_TYPE (decl));
11976 type = TREE_TYPE (decl);
11978 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11979 is false for this case as well. */
11980 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11982 error ("using template type parameter %qT after %qs",
11983 type, tag_name (tag_code));
11984 return error_mark_node;
11986 /* Accept template template parameters. */
11987 else if (allow_template_p
11988 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
11989 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
11991 /* [dcl.type.elab]
11993 If the identifier resolves to a typedef-name or the
11994 simple-template-id resolves to an alias template
11995 specialization, the elaborated-type-specifier is ill-formed.
11997 In other words, the only legitimate declaration to use in the
11998 elaborated type specifier is the implicit typedef created when
11999 the type is declared. */
12000 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
12001 && !DECL_SELF_REFERENCE_P (decl)
12002 && tag_code != typename_type)
12004 if (alias_template_specialization_p (type))
12005 error ("using alias template specialization %qT after %qs",
12006 type, tag_name (tag_code));
12007 else
12008 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
12009 inform (DECL_SOURCE_LOCATION (decl),
12010 "%qD has a previous declaration here", decl);
12011 return error_mark_node;
12013 else if (TREE_CODE (type) != RECORD_TYPE
12014 && TREE_CODE (type) != UNION_TYPE
12015 && tag_code != enum_type
12016 && tag_code != typename_type)
12018 error ("%qT referred to as %qs", type, tag_name (tag_code));
12019 inform (input_location, "%q+T has a previous declaration here", type);
12020 return error_mark_node;
12022 else if (TREE_CODE (type) != ENUMERAL_TYPE
12023 && tag_code == enum_type)
12025 error ("%qT referred to as enum", type);
12026 inform (input_location, "%q+T has a previous declaration here", type);
12027 return error_mark_node;
12029 else if (!allow_template_p
12030 && TREE_CODE (type) == RECORD_TYPE
12031 && CLASSTYPE_IS_TEMPLATE (type))
12033 /* If a class template appears as elaborated type specifier
12034 without a template header such as:
12036 template <class T> class C {};
12037 void f(class C); // No template header here
12039 then the required template argument is missing. */
12040 error ("template argument required for %<%s %T%>",
12041 tag_name (tag_code),
12042 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
12043 return error_mark_node;
12046 return type;
12049 /* Lookup NAME in elaborate type specifier in scope according to
12050 SCOPE and issue diagnostics if necessary.
12051 Return *_TYPE node upon success, NULL_TREE when the NAME is not
12052 found, and ERROR_MARK_NODE for type error. */
12054 static tree
12055 lookup_and_check_tag (enum tag_types tag_code, tree name,
12056 tag_scope scope, bool template_header_p)
12058 tree t;
12059 tree decl;
12060 if (scope == ts_global)
12062 /* First try ordinary name lookup, ignoring hidden class name
12063 injected via friend declaration. */
12064 decl = lookup_name_prefer_type (name, 2);
12065 /* If that fails, the name will be placed in the smallest
12066 non-class, non-function-prototype scope according to 3.3.1/5.
12067 We may already have a hidden name declared as friend in this
12068 scope. So lookup again but not ignoring hidden names.
12069 If we find one, that name will be made visible rather than
12070 creating a new tag. */
12071 if (!decl)
12072 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
12074 else
12075 decl = lookup_type_scope (name, scope);
12077 if (decl
12078 && (DECL_CLASS_TEMPLATE_P (decl)
12079 || DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))
12080 decl = DECL_TEMPLATE_RESULT (decl);
12082 if (decl && TREE_CODE (decl) == TYPE_DECL)
12084 /* Look for invalid nested type:
12085 class C {
12086 class C {};
12087 }; */
12088 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
12090 error ("%qD has the same name as the class in which it is "
12091 "declared",
12092 decl);
12093 return error_mark_node;
12096 /* Two cases we need to consider when deciding if a class
12097 template is allowed as an elaborated type specifier:
12098 1. It is a self reference to its own class.
12099 2. It comes with a template header.
12101 For example:
12103 template <class T> class C {
12104 class C *c1; // DECL_SELF_REFERENCE_P is true
12105 class D;
12107 template <class U> class C; // template_header_p is true
12108 template <class T> class C<T>::D {
12109 class C *c2; // DECL_SELF_REFERENCE_P is true
12110 }; */
12112 t = check_elaborated_type_specifier (tag_code,
12113 decl,
12114 template_header_p
12115 | DECL_SELF_REFERENCE_P (decl));
12116 return t;
12118 else if (decl && TREE_CODE (decl) == TREE_LIST)
12120 error ("reference to %qD is ambiguous", name);
12121 print_candidates (decl);
12122 return error_mark_node;
12124 else
12125 return NULL_TREE;
12128 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
12129 Define the tag as a forward-reference if it is not defined.
12131 If a declaration is given, process it here, and report an error if
12132 multiple declarations are not identical.
12134 SCOPE is TS_CURRENT when this is also a definition. Only look in
12135 the current frame for the name (since C++ allows new names in any
12136 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
12137 declaration. Only look beginning from the current scope outward up
12138 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
12140 TEMPLATE_HEADER_P is true when this declaration is preceded by
12141 a set of template parameters. */
12143 static tree
12144 xref_tag_1 (enum tag_types tag_code, tree name,
12145 tag_scope orig_scope, bool template_header_p)
12147 enum tree_code code;
12148 tree t;
12149 tree context = NULL_TREE;
12150 tag_scope scope;
12152 gcc_assert (identifier_p (name));
12154 switch (tag_code)
12156 case record_type:
12157 case class_type:
12158 code = RECORD_TYPE;
12159 break;
12160 case union_type:
12161 code = UNION_TYPE;
12162 break;
12163 case enum_type:
12164 code = ENUMERAL_TYPE;
12165 break;
12166 default:
12167 gcc_unreachable ();
12170 if (orig_scope == ts_lambda)
12171 scope = ts_current;
12172 else
12173 scope = orig_scope;
12175 /* In case of anonymous name, xref_tag is only called to
12176 make type node and push name. Name lookup is not required. */
12177 if (ANON_AGGRNAME_P (name))
12178 t = NULL_TREE;
12179 else
12180 t = lookup_and_check_tag (tag_code, name,
12181 scope, template_header_p);
12183 if (t == error_mark_node)
12184 return error_mark_node;
12186 if (scope != ts_current && t && current_class_type
12187 && template_class_depth (current_class_type)
12188 && template_header_p)
12190 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
12191 return t;
12193 /* Since SCOPE is not TS_CURRENT, we are not looking at a
12194 definition of this tag. Since, in addition, we are currently
12195 processing a (member) template declaration of a template
12196 class, we must be very careful; consider:
12198 template <class X>
12199 struct S1
12201 template <class U>
12202 struct S2
12203 { template <class V>
12204 friend struct S1; };
12206 Here, the S2::S1 declaration should not be confused with the
12207 outer declaration. In particular, the inner version should
12208 have a template parameter of level 2, not level 1. This
12209 would be particularly important if the member declaration
12210 were instead:
12212 template <class V = U> friend struct S1;
12214 say, when we should tsubst into `U' when instantiating
12215 S2. On the other hand, when presented with:
12217 template <class T>
12218 struct S1 {
12219 template <class U>
12220 struct S2 {};
12221 template <class U>
12222 friend struct S2;
12225 we must find the inner binding eventually. We
12226 accomplish this by making sure that the new type we
12227 create to represent this declaration has the right
12228 TYPE_CONTEXT. */
12229 context = TYPE_CONTEXT (t);
12230 t = NULL_TREE;
12233 if (! t)
12235 /* If no such tag is yet defined, create a forward-reference node
12236 and record it as the "definition".
12237 When a real declaration of this type is found,
12238 the forward-reference will be altered into a real type. */
12239 if (code == ENUMERAL_TYPE)
12241 error ("use of enum %q#D without previous declaration", name);
12242 return error_mark_node;
12244 else
12246 t = make_class_type (code);
12247 TYPE_CONTEXT (t) = context;
12248 if (orig_scope == ts_lambda)
12249 /* Remember that we're declaring a lambda to avoid bogus errors
12250 in push_template_decl. */
12251 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
12252 t = pushtag (name, t, scope);
12255 else
12257 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
12259 if (!redeclare_class_template (t,
12260 current_template_parms,
12261 current_template_reqs))
12262 return error_mark_node;
12264 else if (!processing_template_decl
12265 && CLASS_TYPE_P (t)
12266 && CLASSTYPE_IS_TEMPLATE (t))
12268 error ("redeclaration of %qT as a non-template", t);
12269 error ("previous declaration %q+D", t);
12270 return error_mark_node;
12273 /* Make injected friend class visible. */
12274 if (scope != ts_within_enclosing_non_class
12275 && hidden_name_p (TYPE_NAME (t)))
12277 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12278 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12280 if (TYPE_TEMPLATE_INFO (t))
12282 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12283 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12288 return t;
12291 /* Wrapper for xref_tag_1. */
12293 tree
12294 xref_tag (enum tag_types tag_code, tree name,
12295 tag_scope scope, bool template_header_p)
12297 tree ret;
12298 bool subtime;
12299 subtime = timevar_cond_start (TV_NAME_LOOKUP);
12300 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12301 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12302 return ret;
12306 tree
12307 xref_tag_from_type (tree old, tree id, tag_scope scope)
12309 enum tag_types tag_kind;
12311 if (TREE_CODE (old) == RECORD_TYPE)
12312 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12313 else
12314 tag_kind = union_type;
12316 if (id == NULL_TREE)
12317 id = TYPE_IDENTIFIER (old);
12319 return xref_tag (tag_kind, id, scope, false);
12322 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12323 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
12324 access_* node, and the TREE_VALUE is the type of the base-class.
12325 Non-NULL TREE_TYPE indicates virtual inheritance.
12327 Returns true if the binfo hierarchy was successfully created,
12328 false if an error was detected. */
12330 bool
12331 xref_basetypes (tree ref, tree base_list)
12333 tree *basep;
12334 tree binfo, base_binfo;
12335 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
12336 unsigned max_bases = 0; /* Maximum direct bases. */
12337 int i;
12338 tree default_access;
12339 tree igo_prev; /* Track Inheritance Graph Order. */
12341 if (ref == error_mark_node)
12342 return false;
12344 /* The base of a derived class is private by default, all others are
12345 public. */
12346 default_access = (TREE_CODE (ref) == RECORD_TYPE
12347 && CLASSTYPE_DECLARED_CLASS (ref)
12348 ? access_private_node : access_public_node);
12350 /* First, make sure that any templates in base-classes are
12351 instantiated. This ensures that if we call ourselves recursively
12352 we do not get confused about which classes are marked and which
12353 are not. */
12354 basep = &base_list;
12355 while (*basep)
12357 tree basetype = TREE_VALUE (*basep);
12359 /* The dependent_type_p call below should really be dependent_scope_p
12360 so that we give a hard error about using an incomplete type as a
12361 base, but we allow it with a pedwarn for backward
12362 compatibility. */
12363 if (processing_template_decl
12364 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12365 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12366 if (!dependent_type_p (basetype)
12367 && !complete_type_or_else (basetype, NULL))
12368 /* An incomplete type. Remove it from the list. */
12369 *basep = TREE_CHAIN (*basep);
12370 else
12372 max_bases++;
12373 if (TREE_TYPE (*basep))
12374 max_vbases++;
12375 if (CLASS_TYPE_P (basetype))
12376 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
12377 basep = &TREE_CHAIN (*basep);
12381 TYPE_MARKED_P (ref) = 1;
12383 /* The binfo slot should be empty, unless this is an (ill-formed)
12384 redefinition. */
12385 if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12387 error ("redefinition of %q#T", ref);
12388 return false;
12391 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12393 binfo = make_tree_binfo (max_bases);
12395 TYPE_BINFO (ref) = binfo;
12396 BINFO_OFFSET (binfo) = size_zero_node;
12397 BINFO_TYPE (binfo) = ref;
12399 /* Apply base-class info set up to the variants of this type. */
12400 fixup_type_variants (ref);
12402 if (max_bases)
12404 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
12405 /* An aggregate cannot have baseclasses. */
12406 CLASSTYPE_NON_AGGREGATE (ref) = 1;
12408 if (TREE_CODE (ref) == UNION_TYPE)
12410 error ("derived union %qT invalid", ref);
12411 return false;
12415 if (max_bases > 1)
12417 if (TYPE_FOR_JAVA (ref))
12419 error ("Java class %qT cannot have multiple bases", ref);
12420 return false;
12424 if (max_vbases)
12426 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
12428 if (TYPE_FOR_JAVA (ref))
12430 error ("Java class %qT cannot have virtual bases", ref);
12431 return false;
12435 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
12437 tree access = TREE_PURPOSE (base_list);
12438 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
12439 tree basetype = TREE_VALUE (base_list);
12441 if (access == access_default_node)
12442 access = default_access;
12444 if (PACK_EXPANSION_P (basetype))
12445 basetype = PACK_EXPANSION_PATTERN (basetype);
12446 if (TREE_CODE (basetype) == TYPE_DECL)
12447 basetype = TREE_TYPE (basetype);
12448 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
12450 error ("base type %qT fails to be a struct or class type",
12451 basetype);
12452 return false;
12455 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
12456 TYPE_FOR_JAVA (ref) = 1;
12458 base_binfo = NULL_TREE;
12459 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
12461 base_binfo = TYPE_BINFO (basetype);
12462 /* The original basetype could have been a typedef'd type. */
12463 basetype = BINFO_TYPE (base_binfo);
12465 /* Inherit flags from the base. */
12466 TYPE_HAS_NEW_OPERATOR (ref)
12467 |= TYPE_HAS_NEW_OPERATOR (basetype);
12468 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12469 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12470 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12471 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
12472 CLASSTYPE_DIAMOND_SHAPED_P (ref)
12473 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
12474 CLASSTYPE_REPEATED_BASE_P (ref)
12475 |= CLASSTYPE_REPEATED_BASE_P (basetype);
12478 /* We must do this test after we've seen through a typedef
12479 type. */
12480 if (TYPE_MARKED_P (basetype))
12482 if (basetype == ref)
12483 error ("recursive type %qT undefined", basetype);
12484 else
12485 error ("duplicate base type %qT invalid", basetype);
12486 return false;
12489 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
12490 /* Regenerate the pack expansion for the bases. */
12491 basetype = make_pack_expansion (basetype);
12493 TYPE_MARKED_P (basetype) = 1;
12495 base_binfo = copy_binfo (base_binfo, basetype, ref,
12496 &igo_prev, via_virtual);
12497 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
12498 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
12500 BINFO_BASE_APPEND (binfo, base_binfo);
12501 BINFO_BASE_ACCESS_APPEND (binfo, access);
12504 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
12505 /* If we didn't get max_vbases vbases, we must have shared at
12506 least one of them, and are therefore diamond shaped. */
12507 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
12509 /* Unmark all the types. */
12510 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12511 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12512 TYPE_MARKED_P (ref) = 0;
12514 /* Now see if we have a repeated base type. */
12515 if (!CLASSTYPE_REPEATED_BASE_P (ref))
12517 for (base_binfo = binfo; base_binfo;
12518 base_binfo = TREE_CHAIN (base_binfo))
12520 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12522 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
12523 break;
12525 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
12527 for (base_binfo = binfo; base_binfo;
12528 base_binfo = TREE_CHAIN (base_binfo))
12529 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12530 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12531 else
12532 break;
12535 return true;
12539 /* Copies the enum-related properties from type SRC to type DST.
12540 Used with the underlying type of an enum and the enum itself. */
12541 static void
12542 copy_type_enum (tree dst, tree src)
12544 tree t;
12545 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12547 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12548 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12549 TYPE_SIZE (t) = TYPE_SIZE (src);
12550 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12551 SET_TYPE_MODE (dst, TYPE_MODE (src));
12552 TYPE_PRECISION (t) = TYPE_PRECISION (src);
12553 TYPE_ALIGN (t) = TYPE_ALIGN (src);
12554 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12555 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12559 /* Begin compiling the definition of an enumeration type.
12560 NAME is its name,
12562 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12564 UNDERLYING_TYPE is the type that will be used as the storage for
12565 the enumeration type. This should be NULL_TREE if no storage type
12566 was specified.
12568 SCOPED_ENUM_P is true if this is a scoped enumeration type.
12570 if IS_NEW is not NULL, gets TRUE iff a new type is created.
12572 Returns the type object, as yet incomplete.
12573 Also records info about it so that build_enumerator
12574 may be used to declare the individual values as they are read. */
12576 tree
12577 start_enum (tree name, tree enumtype, tree underlying_type,
12578 bool scoped_enum_p, bool *is_new)
12580 tree prevtype = NULL_TREE;
12581 gcc_assert (identifier_p (name));
12583 if (is_new)
12584 *is_new = false;
12585 /* [C++0x dcl.enum]p5:
12587 If not explicitly specified, the underlying type of a scoped
12588 enumeration type is int. */
12589 if (!underlying_type && scoped_enum_p)
12590 underlying_type = integer_type_node;
12592 if (underlying_type)
12593 underlying_type = cv_unqualified (underlying_type);
12595 /* If this is the real definition for a previous forward reference,
12596 fill in the contents in the same object that used to be the
12597 forward reference. */
12598 if (!enumtype)
12599 enumtype = lookup_and_check_tag (enum_type, name,
12600 /*tag_scope=*/ts_current,
12601 /*template_header_p=*/false);
12603 /* In case of a template_decl, the only check that should be deferred
12604 to instantiation time is the comparison of underlying types. */
12605 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12607 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12609 error_at (input_location, "scoped/unscoped mismatch "
12610 "in enum %q#T", enumtype);
12611 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12612 "previous definition here");
12613 enumtype = error_mark_node;
12615 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12617 error_at (input_location, "underlying type mismatch "
12618 "in enum %q#T", enumtype);
12619 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12620 "previous definition here");
12621 enumtype = error_mark_node;
12623 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12624 && !dependent_type_p (underlying_type)
12625 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12626 && !same_type_p (underlying_type,
12627 ENUM_UNDERLYING_TYPE (enumtype)))
12629 error_at (input_location, "different underlying type "
12630 "in enum %q#T", enumtype);
12631 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12632 "previous definition here");
12633 underlying_type = NULL_TREE;
12637 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12638 || processing_template_decl)
12640 /* In case of error, make a dummy enum to allow parsing to
12641 continue. */
12642 if (enumtype == error_mark_node)
12644 name = make_anon_name ();
12645 enumtype = NULL_TREE;
12648 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12649 of an opaque enum, or an opaque enum of an already defined
12650 enumeration (C++0x only).
12651 In any other case, it'll be NULL_TREE. */
12652 if (!enumtype)
12654 if (is_new)
12655 *is_new = true;
12657 prevtype = enumtype;
12659 /* Do not push the decl more than once, unless we need to
12660 compare underlying types at instantiation time */
12661 if (!enumtype
12662 || TREE_CODE (enumtype) != ENUMERAL_TYPE
12663 || (underlying_type
12664 && dependent_type_p (underlying_type))
12665 || (ENUM_UNDERLYING_TYPE (enumtype)
12666 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12668 enumtype = cxx_make_type (ENUMERAL_TYPE);
12669 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12671 else
12672 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12673 false);
12675 if (enumtype == error_mark_node)
12676 return error_mark_node;
12678 /* The enum is considered opaque until the opening '{' of the
12679 enumerator list. */
12680 SET_OPAQUE_ENUM_P (enumtype, true);
12681 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12684 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12686 if (underlying_type)
12688 if (CP_INTEGRAL_TYPE_P (underlying_type))
12690 copy_type_enum (enumtype, underlying_type);
12691 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12693 else if (dependent_type_p (underlying_type))
12694 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12695 else
12696 error ("underlying type %<%T%> of %<%T%> must be an integral type",
12697 underlying_type, enumtype);
12700 /* If into a template class, the returned enum is always the first
12701 declaration (opaque or not) seen. This way all the references to
12702 this type will be to the same declaration. The following ones are used
12703 only to check for definition errors. */
12704 if (prevtype && processing_template_decl)
12705 return prevtype;
12706 else
12707 return enumtype;
12710 /* After processing and defining all the values of an enumeration type,
12711 install their decls in the enumeration type.
12712 ENUMTYPE is the type object. */
12714 void
12715 finish_enum_value_list (tree enumtype)
12717 tree values;
12718 tree underlying_type;
12719 tree decl;
12720 tree value;
12721 tree minnode, maxnode;
12722 tree t;
12724 bool fixed_underlying_type_p
12725 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12727 /* We built up the VALUES in reverse order. */
12728 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12730 /* For an enum defined in a template, just set the type of the values;
12731 all further processing is postponed until the template is
12732 instantiated. We need to set the type so that tsubst of a CONST_DECL
12733 works. */
12734 if (processing_template_decl)
12736 for (values = TYPE_VALUES (enumtype);
12737 values;
12738 values = TREE_CHAIN (values))
12739 TREE_TYPE (TREE_VALUE (values)) = enumtype;
12740 return;
12743 /* Determine the minimum and maximum values of the enumerators. */
12744 if (TYPE_VALUES (enumtype))
12746 minnode = maxnode = NULL_TREE;
12748 for (values = TYPE_VALUES (enumtype);
12749 values;
12750 values = TREE_CHAIN (values))
12752 decl = TREE_VALUE (values);
12754 /* [dcl.enum]: Following the closing brace of an enum-specifier,
12755 each enumerator has the type of its enumeration. Prior to the
12756 closing brace, the type of each enumerator is the type of its
12757 initializing value. */
12758 TREE_TYPE (decl) = enumtype;
12760 /* Update the minimum and maximum values, if appropriate. */
12761 value = DECL_INITIAL (decl);
12762 if (value == error_mark_node)
12763 value = integer_zero_node;
12764 /* Figure out what the minimum and maximum values of the
12765 enumerators are. */
12766 if (!minnode)
12767 minnode = maxnode = value;
12768 else if (tree_int_cst_lt (maxnode, value))
12769 maxnode = value;
12770 else if (tree_int_cst_lt (value, minnode))
12771 minnode = value;
12774 else
12775 /* [dcl.enum]
12777 If the enumerator-list is empty, the underlying type is as if
12778 the enumeration had a single enumerator with value 0. */
12779 minnode = maxnode = integer_zero_node;
12781 if (!fixed_underlying_type_p)
12783 /* Compute the number of bits require to represent all values of the
12784 enumeration. We must do this before the type of MINNODE and
12785 MAXNODE are transformed, since tree_int_cst_min_precision relies
12786 on the TREE_TYPE of the value it is passed. */
12787 bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12788 int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12789 int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12790 int precision = MAX (lowprec, highprec);
12791 unsigned int itk;
12792 bool use_short_enum;
12794 /* Determine the underlying type of the enumeration.
12796 [dcl.enum]
12798 The underlying type of an enumeration is an integral type that
12799 can represent all the enumerator values defined in the
12800 enumeration. It is implementation-defined which integral type is
12801 used as the underlying type for an enumeration except that the
12802 underlying type shall not be larger than int unless the value of
12803 an enumerator cannot fit in an int or unsigned int.
12805 We use "int" or an "unsigned int" as the underlying type, even if
12806 a smaller integral type would work, unless the user has
12807 explicitly requested that we use the smallest possible type. The
12808 user can request that for all enumerations with a command line
12809 flag, or for just one enumeration with an attribute. */
12811 use_short_enum = flag_short_enums
12812 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12814 for (itk = (use_short_enum ? itk_char : itk_int);
12815 itk != itk_none;
12816 itk++)
12818 underlying_type = integer_types[itk];
12819 if (underlying_type != NULL_TREE
12820 && TYPE_PRECISION (underlying_type) >= precision
12821 && TYPE_UNSIGNED (underlying_type) == unsignedp)
12822 break;
12824 if (itk == itk_none)
12826 /* DR 377
12828 IF no integral type can represent all the enumerator values, the
12829 enumeration is ill-formed. */
12830 error ("no integral type can represent all of the enumerator values "
12831 "for %qT", enumtype);
12832 precision = TYPE_PRECISION (long_long_integer_type_node);
12833 underlying_type = integer_types[itk_unsigned_long_long];
12836 /* [dcl.enum]
12838 The value of sizeof() applied to an enumeration type, an object
12839 of an enumeration type, or an enumerator, is the value of sizeof()
12840 applied to the underlying type. */
12841 copy_type_enum (enumtype, underlying_type);
12843 /* Compute the minimum and maximum values for the type.
12845 [dcl.enum]
12847 For an enumeration where emin is the smallest enumerator and emax
12848 is the largest, the values of the enumeration are the values of the
12849 underlying type in the range bmin to bmax, where bmin and bmax are,
12850 respectively, the smallest and largest values of the smallest bit-
12851 field that can store emin and emax. */
12853 /* The middle-end currently assumes that types with TYPE_PRECISION
12854 narrower than their underlying type are suitably zero or sign
12855 extended to fill their mode. Similarly, it assumes that the front
12856 end assures that a value of a particular type must be within
12857 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12859 We used to set these fields based on bmin and bmax, but that led
12860 to invalid assumptions like optimizing away bounds checking. So
12861 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12862 TYPE_MAX_VALUE to the values for the mode above and only restrict
12863 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
12864 ENUM_UNDERLYING_TYPE (enumtype)
12865 = build_distinct_type_copy (underlying_type);
12866 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12867 set_min_and_max_values_for_integral_type
12868 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12870 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
12871 if (flag_strict_enums)
12872 set_min_and_max_values_for_integral_type (enumtype, precision,
12873 unsignedp);
12875 else
12876 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12878 /* Convert each of the enumerators to the type of the underlying
12879 type of the enumeration. */
12880 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12882 location_t saved_location;
12884 decl = TREE_VALUE (values);
12885 saved_location = input_location;
12886 input_location = DECL_SOURCE_LOCATION (decl);
12887 if (fixed_underlying_type_p)
12888 /* If the enumeration type has a fixed underlying type, we
12889 already checked all of the enumerator values. */
12890 value = DECL_INITIAL (decl);
12891 else
12892 value = perform_implicit_conversion (underlying_type,
12893 DECL_INITIAL (decl),
12894 tf_warning_or_error);
12895 input_location = saved_location;
12897 /* Do not clobber shared ints. */
12898 value = copy_node (value);
12900 TREE_TYPE (value) = enumtype;
12901 DECL_INITIAL (decl) = value;
12904 /* Fix up all variant types of this enum type. */
12905 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12906 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12908 if (at_class_scope_p ()
12909 && COMPLETE_TYPE_P (current_class_type)
12910 && UNSCOPED_ENUM_P (enumtype))
12911 insert_late_enum_def_into_classtype_sorted_fields (enumtype,
12912 current_class_type);
12914 /* Finish debugging output for this type. */
12915 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12918 /* Finishes the enum type. This is called only the first time an
12919 enumeration is seen, be it opaque or odinary.
12920 ENUMTYPE is the type object. */
12922 void
12923 finish_enum (tree enumtype)
12925 if (processing_template_decl)
12927 if (at_function_scope_p ())
12928 add_stmt (build_min (TAG_DEFN, enumtype));
12929 return;
12932 /* If this is a forward declaration, there should not be any variants,
12933 though we can get a variant in the middle of an enum-specifier with
12934 wacky code like 'enum E { e = sizeof(const E*) };' */
12935 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12936 && (TYPE_VALUES (enumtype)
12937 || !TYPE_NEXT_VARIANT (enumtype)));
12940 /* Build and install a CONST_DECL for an enumeration constant of the
12941 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12942 LOC is the location of NAME.
12943 Assignment of sequential values by default is handled here. */
12945 void
12946 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12948 tree decl;
12949 tree context;
12950 tree type;
12952 /* If the VALUE was erroneous, pretend it wasn't there; that will
12953 result in the enum being assigned the next value in sequence. */
12954 if (value == error_mark_node)
12955 value = NULL_TREE;
12957 /* Remove no-op casts from the value. */
12958 if (value)
12959 STRIP_TYPE_NOPS (value);
12961 if (! processing_template_decl)
12963 /* Validate and default VALUE. */
12964 if (value != NULL_TREE)
12966 value = cxx_constant_value (value);
12968 if (TREE_CODE (value) != INTEGER_CST
12969 || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12971 error ("enumerator value for %qD is not an integer constant",
12972 name);
12973 value = NULL_TREE;
12977 /* Default based on previous value. */
12978 if (value == NULL_TREE)
12980 if (TYPE_VALUES (enumtype))
12982 tree prev_value;
12983 bool overflowed;
12985 /* C++03 7.2/4: If no initializer is specified for the first
12986 enumerator, the type is an unspecified integral
12987 type. Otherwise the type is the same as the type of the
12988 initializing value of the preceding enumerator unless the
12989 incremented value is not representable in that type, in
12990 which case the type is an unspecified integral type
12991 sufficient to contain the incremented value. */
12992 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12993 if (error_operand_p (prev_value))
12994 value = error_mark_node;
12995 else
12997 double_int di = TREE_INT_CST (prev_value)
12998 .add_with_sign (double_int_one,
12999 false, &overflowed);
13000 if (!overflowed)
13002 tree type = TREE_TYPE (prev_value);
13003 bool pos = TYPE_UNSIGNED (type) || !di.is_negative ();
13004 if (!double_int_fits_to_tree_p (type, di))
13006 unsigned int itk;
13007 for (itk = itk_int; itk != itk_none; itk++)
13009 type = integer_types[itk];
13010 if (type != NULL_TREE
13011 && (pos || !TYPE_UNSIGNED (type))
13012 && double_int_fits_to_tree_p (type, di))
13013 break;
13015 if (type && cxx_dialect < cxx11
13016 && itk > itk_unsigned_long)
13017 pedwarn (input_location, OPT_Wlong_long, pos ? "\
13018 incremented enumerator value is too large for %<unsigned long%>" : "\
13019 incremented enumerator value is too large for %<long%>");
13021 if (type == NULL_TREE)
13022 overflowed = true;
13023 else
13024 value = double_int_to_tree (type, di);
13027 if (overflowed)
13029 error ("overflow in enumeration values at %qD", name);
13030 value = error_mark_node;
13034 else
13035 value = integer_zero_node;
13038 /* Remove no-op casts from the value. */
13039 STRIP_TYPE_NOPS (value);
13041 /* If the underlying type of the enum is fixed, check whether
13042 the enumerator values fits in the underlying type. If it
13043 does not fit, the program is ill-formed [C++0x dcl.enum]. */
13044 if (ENUM_UNDERLYING_TYPE (enumtype)
13045 && value
13046 && TREE_CODE (value) == INTEGER_CST)
13048 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
13049 error ("enumerator value %E is outside the range of underlying "
13050 "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
13052 /* Convert the value to the appropriate type. */
13053 value = convert (ENUM_UNDERLYING_TYPE (enumtype), value);
13057 /* C++ associates enums with global, function, or class declarations. */
13058 context = current_scope ();
13060 /* Build the actual enumeration constant. Note that the enumeration
13061 constants have the underlying type of the enum (if it is fixed)
13062 or the type of their initializer (if the underlying type of the
13063 enum is not fixed):
13065 [ C++0x dcl.enum ]
13067 If the underlying type is fixed, the type of each enumerator
13068 prior to the closing brace is the underlying type; if the
13069 initializing value of an enumerator cannot be represented by
13070 the underlying type, the program is ill-formed. If the
13071 underlying type is not fixed, the type of each enumerator is
13072 the type of its initializing value.
13074 If the underlying type is not fixed, it will be computed by
13075 finish_enum and we will reset the type of this enumerator. Of
13076 course, if we're processing a template, there may be no value. */
13077 type = value ? TREE_TYPE (value) : NULL_TREE;
13079 decl = build_decl (loc, CONST_DECL, name, type);
13081 DECL_CONTEXT (decl) = enumtype;
13082 TREE_CONSTANT (decl) = 1;
13083 TREE_READONLY (decl) = 1;
13084 DECL_INITIAL (decl) = value;
13086 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
13087 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13088 on the TYPE_FIELDS list for `S'. (That's so that you can say
13089 things like `S::i' later.) */
13090 finish_member_declaration (decl);
13091 else
13092 pushdecl (decl);
13094 /* Add this enumeration constant to the list for this type. */
13095 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13098 /* Look for an enumerator with the given NAME within the enumeration
13099 type ENUMTYPE. This routine is used primarily for qualified name
13100 lookup into an enumerator in C++0x, e.g.,
13102 enum class Color { Red, Green, Blue };
13104 Color color = Color::Red;
13106 Returns the value corresponding to the enumerator, or
13107 NULL_TREE if no such enumerator was found. */
13108 tree
13109 lookup_enumerator (tree enumtype, tree name)
13111 tree e;
13112 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
13114 e = purpose_member (name, TYPE_VALUES (enumtype));
13115 return e? TREE_VALUE (e) : NULL_TREE;
13119 /* We're defining DECL. Make sure that its type is OK. */
13121 static void
13122 check_function_type (tree decl, tree current_function_parms)
13124 tree fntype = TREE_TYPE (decl);
13125 tree return_type = complete_type (TREE_TYPE (fntype));
13127 /* In a function definition, arg types must be complete. */
13128 require_complete_types_for_parms (current_function_parms);
13130 if (dependent_type_p (return_type)
13131 || type_uses_auto (return_type))
13132 return;
13133 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
13134 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
13136 tree args = TYPE_ARG_TYPES (fntype);
13138 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13139 error ("return type %q#T is incomplete", return_type);
13140 else
13141 error ("return type has Java class type %q#T", return_type);
13143 /* Make it return void instead. */
13144 if (TREE_CODE (fntype) == METHOD_TYPE)
13145 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
13146 void_type_node,
13147 TREE_CHAIN (args));
13148 else
13149 fntype = build_function_type (void_type_node, args);
13150 fntype
13151 = build_exception_variant (fntype,
13152 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
13153 fntype = (cp_build_type_attribute_variant
13154 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
13155 TREE_TYPE (decl) = fntype;
13157 else
13158 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13161 /* Create the FUNCTION_DECL for a function definition.
13162 DECLSPECS and DECLARATOR are the parts of the declaration;
13163 they describe the function's name and the type it returns,
13164 but twisted together in a fashion that parallels the syntax of C.
13166 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13167 DECLARATOR is really the DECL for the function we are about to
13168 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13169 indicating that the function is an inline defined in-class.
13171 This function creates a binding context for the function body
13172 as well as setting up the FUNCTION_DECL in current_function_decl.
13174 For C++, we must first check whether that datum makes any sense.
13175 For example, "class A local_a(1,2);" means that variable local_a
13176 is an aggregate of type A, which should have a constructor
13177 applied to it with the argument list [1, 2].
13179 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
13180 or may be a BLOCK if the function has been defined previously
13181 in this translation unit. On exit, DECL_INITIAL (decl1) will be
13182 error_mark_node if the function has never been defined, or
13183 a BLOCK if the function has been defined somewhere. */
13185 bool
13186 start_preparsed_function (tree decl1, tree attrs, int flags)
13188 tree ctype = NULL_TREE;
13189 tree fntype;
13190 tree restype;
13191 int doing_friend = 0;
13192 cp_binding_level *bl;
13193 tree current_function_parms;
13194 struct c_fileinfo *finfo
13195 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
13196 bool honor_interface;
13198 /* Sanity check. */
13199 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
13200 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
13202 fntype = TREE_TYPE (decl1);
13203 if (TREE_CODE (fntype) == METHOD_TYPE)
13204 ctype = TYPE_METHOD_BASETYPE (fntype);
13206 /* ISO C++ 11.4/5. A friend function defined in a class is in
13207 the (lexical) scope of the class in which it is defined. */
13208 if (!ctype && DECL_FRIEND_P (decl1))
13210 ctype = DECL_FRIEND_CONTEXT (decl1);
13212 /* CTYPE could be null here if we're dealing with a template;
13213 for example, `inline friend float foo()' inside a template
13214 will have no CTYPE set. */
13215 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13216 ctype = NULL_TREE;
13217 else
13218 doing_friend = 1;
13221 if (DECL_DECLARED_INLINE_P (decl1)
13222 && lookup_attribute ("noinline", attrs))
13223 warning (0, "inline function %q+D given attribute noinline", decl1);
13225 /* Handle gnu_inline attribute. */
13226 if (GNU_INLINE_P (decl1))
13228 DECL_EXTERNAL (decl1) = 1;
13229 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13230 DECL_INTERFACE_KNOWN (decl1) = 1;
13231 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
13234 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13235 /* This is a constructor, we must ensure that any default args
13236 introduced by this definition are propagated to the clones
13237 now. The clones are used directly in overload resolution. */
13238 adjust_clone_args (decl1);
13240 /* Sometimes we don't notice that a function is a static member, and
13241 build a METHOD_TYPE for it. Fix that up now. */
13242 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13243 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
13245 /* Set up current_class_type, and enter the scope of the class, if
13246 appropriate. */
13247 if (ctype)
13248 push_nested_class (ctype);
13249 else if (DECL_STATIC_FUNCTION_P (decl1))
13250 push_nested_class (DECL_CONTEXT (decl1));
13252 /* Now that we have entered the scope of the class, we must restore
13253 the bindings for any template parameters surrounding DECL1, if it
13254 is an inline member template. (Order is important; consider the
13255 case where a template parameter has the same name as a field of
13256 the class.) It is not until after this point that
13257 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
13258 if (flags & SF_INCLASS_INLINE)
13259 maybe_begin_member_template_processing (decl1);
13261 /* Effective C++ rule 15. */
13262 if (warn_ecpp
13263 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13264 && VOID_TYPE_P (TREE_TYPE (fntype)))
13265 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13267 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13268 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13269 if (!DECL_INITIAL (decl1))
13270 DECL_INITIAL (decl1) = error_mark_node;
13272 /* This function exists in static storage.
13273 (This does not mean `static' in the C sense!) */
13274 TREE_STATIC (decl1) = 1;
13276 /* We must call push_template_decl after current_class_type is set
13277 up. (If we are processing inline definitions after exiting a
13278 class scope, current_class_type will be NULL_TREE until set above
13279 by push_nested_class.) */
13280 if (processing_template_decl)
13282 tree newdecl1 = push_template_decl (decl1);
13283 if (newdecl1 == error_mark_node)
13285 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
13286 pop_nested_class ();
13287 return false;
13289 decl1 = newdecl1;
13292 /* We are now in the scope of the function being defined. */
13293 current_function_decl = decl1;
13295 /* Save the parm names or decls from this function's declarator
13296 where store_parm_decls will find them. */
13297 current_function_parms = DECL_ARGUMENTS (decl1);
13299 /* Make sure the parameter and return types are reasonable. When
13300 you declare a function, these types can be incomplete, but they
13301 must be complete when you define the function. */
13302 check_function_type (decl1, current_function_parms);
13304 /* Build the return declaration for the function. */
13305 restype = TREE_TYPE (fntype);
13307 if (DECL_RESULT (decl1) == NULL_TREE)
13309 tree resdecl;
13311 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13312 DECL_ARTIFICIAL (resdecl) = 1;
13313 DECL_IGNORED_P (resdecl) = 1;
13314 DECL_RESULT (decl1) = resdecl;
13316 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13319 /* Let the user know we're compiling this function. */
13320 announce_function (decl1);
13322 /* Record the decl so that the function name is defined.
13323 If we already have a decl for this name, and it is a FUNCTION_DECL,
13324 use the old decl. */
13325 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13327 /* A specialization is not used to guide overload resolution. */
13328 if (!DECL_FUNCTION_MEMBER_P (decl1)
13329 && !(DECL_USE_TEMPLATE (decl1) &&
13330 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
13332 tree olddecl = pushdecl (decl1);
13334 if (olddecl == error_mark_node)
13335 /* If something went wrong when registering the declaration,
13336 use DECL1; we have to have a FUNCTION_DECL to use when
13337 parsing the body of the function. */
13339 else
13341 /* Otherwise, OLDDECL is either a previous declaration
13342 of the same function or DECL1 itself. */
13344 if (warn_missing_declarations
13345 && olddecl == decl1
13346 && !DECL_MAIN_P (decl1)
13347 && TREE_PUBLIC (decl1)
13348 && !DECL_DECLARED_INLINE_P (decl1))
13350 tree context;
13352 /* Check whether DECL1 is in an anonymous
13353 namespace. */
13354 for (context = DECL_CONTEXT (decl1);
13355 context;
13356 context = DECL_CONTEXT (context))
13358 if (TREE_CODE (context) == NAMESPACE_DECL
13359 && DECL_NAME (context) == NULL_TREE)
13360 break;
13363 if (context == NULL)
13364 warning (OPT_Wmissing_declarations,
13365 "no previous declaration for %q+D", decl1);
13368 decl1 = olddecl;
13371 else
13373 /* We need to set the DECL_CONTEXT. */
13374 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13375 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13377 fntype = TREE_TYPE (decl1);
13378 restype = TREE_TYPE (fntype);
13380 /* If #pragma weak applies, mark the decl appropriately now.
13381 The pragma only applies to global functions. Because
13382 determining whether or not the #pragma applies involves
13383 computing the mangled name for the declaration, we cannot
13384 apply the pragma until after we have merged this declaration
13385 with any previous declarations; if the original declaration
13386 has a linkage specification, that specification applies to
13387 the definition as well, and may affect the mangled name. */
13388 if (DECL_FILE_SCOPE_P (decl1))
13389 maybe_apply_pragma_weak (decl1);
13392 /* Reset this in case the call to pushdecl changed it. */
13393 current_function_decl = decl1;
13395 gcc_assert (DECL_INITIAL (decl1));
13397 /* This function may already have been parsed, in which case just
13398 return; our caller will skip over the body without parsing. */
13399 if (DECL_INITIAL (decl1) != error_mark_node)
13400 return true;
13402 /* Initialize RTL machinery. We cannot do this until
13403 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13404 even when processing a template; this is how we get
13405 CFUN set up, and our per-function variables initialized.
13406 FIXME factor out the non-RTL stuff. */
13407 bl = current_binding_level;
13408 allocate_struct_function (decl1, processing_template_decl);
13410 /* Initialize the language data structures. Whenever we start
13411 a new function, we destroy temporaries in the usual way. */
13412 cfun->language = ggc_alloc_cleared_language_function ();
13413 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
13414 current_binding_level = bl;
13416 if (!processing_template_decl && type_uses_auto (restype))
13418 FNDECL_USED_AUTO (decl1) = true;
13419 current_function_auto_return_pattern = restype;
13422 /* Start the statement-tree, start the tree now. */
13423 DECL_SAVED_TREE (decl1) = push_stmt_list ();
13425 /* If we are (erroneously) defining a function that we have already
13426 defined before, wipe out what we knew before. */
13427 if (!DECL_PENDING_INLINE_P (decl1))
13428 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13430 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13432 /* We know that this was set up by `grokclassfn'. We do not
13433 wait until `store_parm_decls', since evil parse errors may
13434 never get us to that point. Here we keep the consistency
13435 between `current_class_type' and `current_class_ptr'. */
13436 tree t = DECL_ARGUMENTS (decl1);
13438 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
13439 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
13441 cp_function_chain->x_current_class_ref
13442 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
13443 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
13444 cp_function_chain->x_current_class_ptr = t;
13446 /* Constructors and destructors need to know whether they're "in
13447 charge" of initializing virtual base classes. */
13448 t = DECL_CHAIN (t);
13449 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13451 current_in_charge_parm = t;
13452 t = DECL_CHAIN (t);
13454 if (DECL_HAS_VTT_PARM_P (decl1))
13456 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
13457 current_vtt_parm = t;
13461 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
13462 /* Implicitly-defined methods (like the
13463 destructor for a class in which no destructor
13464 is explicitly declared) must not be defined
13465 until their definition is needed. So, we
13466 ignore interface specifications for
13467 compiler-generated functions. */
13468 && !DECL_ARTIFICIAL (decl1));
13470 if (processing_template_decl)
13471 /* Don't mess with interface flags. */;
13472 else if (DECL_INTERFACE_KNOWN (decl1))
13474 tree ctx = decl_function_context (decl1);
13476 if (DECL_NOT_REALLY_EXTERN (decl1))
13477 DECL_EXTERNAL (decl1) = 0;
13479 if (ctx != NULL_TREE && vague_linkage_p (ctx))
13480 /* This is a function in a local class in an extern inline
13481 or template function. */
13482 comdat_linkage (decl1);
13484 /* If this function belongs to an interface, it is public.
13485 If it belongs to someone else's interface, it is also external.
13486 This only affects inlines and template instantiations. */
13487 else if (!finfo->interface_unknown && honor_interface)
13489 if (DECL_DECLARED_INLINE_P (decl1)
13490 || DECL_TEMPLATE_INSTANTIATION (decl1))
13492 DECL_EXTERNAL (decl1)
13493 = (finfo->interface_only
13494 || (DECL_DECLARED_INLINE_P (decl1)
13495 && ! flag_implement_inlines
13496 && !DECL_VINDEX (decl1)));
13498 /* For WIN32 we also want to put these in linkonce sections. */
13499 maybe_make_one_only (decl1);
13501 else
13502 DECL_EXTERNAL (decl1) = 0;
13503 DECL_INTERFACE_KNOWN (decl1) = 1;
13504 /* If this function is in an interface implemented in this file,
13505 make sure that the back end knows to emit this function
13506 here. */
13507 if (!DECL_EXTERNAL (decl1))
13508 mark_needed (decl1);
13510 else if (finfo->interface_unknown && finfo->interface_only
13511 && honor_interface)
13513 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13514 interface, we will have both finfo->interface_unknown and
13515 finfo->interface_only set. In that case, we don't want to
13516 use the normal heuristics because someone will supply a
13517 #pragma implementation elsewhere, and deducing it here would
13518 produce a conflict. */
13519 comdat_linkage (decl1);
13520 DECL_EXTERNAL (decl1) = 0;
13521 DECL_INTERFACE_KNOWN (decl1) = 1;
13522 DECL_DEFER_OUTPUT (decl1) = 1;
13524 else
13526 /* This is a definition, not a reference.
13527 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
13528 if (!GNU_INLINE_P (decl1))
13529 DECL_EXTERNAL (decl1) = 0;
13531 if ((DECL_DECLARED_INLINE_P (decl1)
13532 || DECL_TEMPLATE_INSTANTIATION (decl1))
13533 && ! DECL_INTERFACE_KNOWN (decl1))
13534 DECL_DEFER_OUTPUT (decl1) = 1;
13535 else
13536 DECL_INTERFACE_KNOWN (decl1) = 1;
13539 /* Determine the ELF visibility attribute for the function. We must not
13540 do this before calling "pushdecl", as we must allow "duplicate_decls"
13541 to merge any attributes appropriately. We also need to wait until
13542 linkage is set. */
13543 if (!DECL_CLONED_FUNCTION_P (decl1))
13544 determine_visibility (decl1);
13546 begin_scope (sk_function_parms, decl1);
13548 ++function_depth;
13550 if (DECL_DESTRUCTOR_P (decl1)
13551 || (DECL_CONSTRUCTOR_P (decl1)
13552 && targetm.cxx.cdtor_returns_this ()))
13554 cdtor_label = build_decl (input_location,
13555 LABEL_DECL, NULL_TREE, NULL_TREE);
13556 DECL_CONTEXT (cdtor_label) = current_function_decl;
13559 start_fname_decls ();
13561 store_parm_decls (current_function_parms);
13563 return true;
13567 /* Like start_preparsed_function, except that instead of a
13568 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13570 Returns true on success. If the DECLARATOR is not suitable
13571 for a function, we return false, which tells the parser to
13572 skip the entire function. */
13574 bool
13575 start_function (cp_decl_specifier_seq *declspecs,
13576 const cp_declarator *declarator,
13577 tree attrs)
13579 tree decl1;
13581 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13582 if (decl1 == error_mark_node)
13583 return false;
13584 /* If the declarator is not suitable for a function definition,
13585 cause a syntax error. */
13586 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13588 error ("invalid function declaration");
13589 return false;
13592 if (DECL_MAIN_P (decl1))
13593 /* main must return int. grokfndecl should have corrected it
13594 (and issued a diagnostic) if the user got it wrong. */
13595 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13596 integer_type_node));
13598 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13601 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13602 FN. */
13604 static bool
13605 use_eh_spec_block (tree fn)
13607 return (flag_exceptions && flag_enforce_eh_specs
13608 && !processing_template_decl
13609 && !type_throw_all_p (TREE_TYPE (fn))
13610 /* We insert the EH_SPEC_BLOCK only in the original
13611 function; then, it is copied automatically to the
13612 clones. */
13613 && !DECL_CLONED_FUNCTION_P (fn)
13614 /* Implicitly-generated constructors and destructors have
13615 exception specifications. However, those specifications
13616 are the union of the possible exceptions specified by the
13617 constructors/destructors for bases and members, so no
13618 unallowed exception will ever reach this function. By
13619 not creating the EH_SPEC_BLOCK we save a little memory,
13620 and we avoid spurious warnings about unreachable
13621 code. */
13622 && !DECL_DEFAULTED_FN (fn));
13625 /* Store the parameter declarations into the current function declaration.
13626 This is called after parsing the parameter declarations, before
13627 digesting the body of the function.
13629 Also install to binding contour return value identifier, if any. */
13631 static void
13632 store_parm_decls (tree current_function_parms)
13634 tree fndecl = current_function_decl;
13635 tree parm;
13637 /* This is a chain of any other decls that came in among the parm
13638 declarations. If a parm is declared with enum {foo, bar} x;
13639 then CONST_DECLs for foo and bar are put here. */
13640 tree nonparms = NULL_TREE;
13642 if (current_function_parms)
13644 /* This case is when the function was defined with an ANSI prototype.
13645 The parms already have decls, so we need not do anything here
13646 except record them as in effect
13647 and complain if any redundant old-style parm decls were written. */
13649 tree specparms = current_function_parms;
13650 tree next;
13652 /* Must clear this because it might contain TYPE_DECLs declared
13653 at class level. */
13654 current_binding_level->names = NULL;
13656 /* If we're doing semantic analysis, then we'll call pushdecl
13657 for each of these. We must do them in reverse order so that
13658 they end in the correct forward order. */
13659 specparms = nreverse (specparms);
13661 for (parm = specparms; parm; parm = next)
13663 next = DECL_CHAIN (parm);
13664 if (TREE_CODE (parm) == PARM_DECL)
13666 if (DECL_NAME (parm) == NULL_TREE
13667 || !VOID_TYPE_P (parm))
13668 pushdecl (parm);
13669 else
13670 error ("parameter %qD declared void", parm);
13672 else
13674 /* If we find an enum constant or a type tag,
13675 put it aside for the moment. */
13676 TREE_CHAIN (parm) = NULL_TREE;
13677 nonparms = chainon (nonparms, parm);
13681 /* Get the decls in their original chain order and record in the
13682 function. This is all and only the PARM_DECLs that were
13683 pushed into scope by the loop above. */
13684 DECL_ARGUMENTS (fndecl) = getdecls ();
13686 else
13687 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13689 /* Now store the final chain of decls for the arguments
13690 as the decl-chain of the current lexical scope.
13691 Put the enumerators in as well, at the front so that
13692 DECL_ARGUMENTS is not modified. */
13693 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13695 if (use_eh_spec_block (current_function_decl))
13696 current_eh_spec_block = begin_eh_spec_block ();
13700 /* We have finished doing semantic analysis on DECL, but have not yet
13701 generated RTL for its body. Save away our current state, so that
13702 when we want to generate RTL later we know what to do. */
13704 static void
13705 save_function_data (tree decl)
13707 struct language_function *f;
13709 /* Save the language-specific per-function data so that we can
13710 get it back when we really expand this function. */
13711 gcc_assert (!DECL_PENDING_INLINE_P (decl));
13713 /* Make a copy. */
13714 f = ggc_alloc_language_function ();
13715 memcpy (f, cp_function_chain, sizeof (struct language_function));
13716 DECL_SAVED_FUNCTION_DATA (decl) = f;
13718 /* Clear out the bits we don't need. */
13719 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13720 f->bindings = NULL;
13721 f->x_local_names = NULL;
13722 f->base.local_typedefs = NULL;
13726 /* Set the return value of the constructor (if present). */
13728 static void
13729 finish_constructor_body (void)
13731 tree val;
13732 tree exprstmt;
13734 if (targetm.cxx.cdtor_returns_this ()
13735 && (! TYPE_FOR_JAVA (current_class_type)))
13737 /* Any return from a constructor will end up here. */
13738 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13740 val = DECL_ARGUMENTS (current_function_decl);
13741 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13742 DECL_RESULT (current_function_decl), val);
13743 /* Return the address of the object. */
13744 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13745 add_stmt (exprstmt);
13749 /* Do all the processing for the beginning of a destructor; set up the
13750 vtable pointers and cleanups for bases and members. */
13752 static void
13753 begin_destructor_body (void)
13755 tree compound_stmt;
13757 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13758 issued an error message. We still want to try to process the
13759 body of the function, but initialize_vtbl_ptrs will crash if
13760 TYPE_BINFO is NULL. */
13761 if (COMPLETE_TYPE_P (current_class_type))
13763 compound_stmt = begin_compound_stmt (0);
13764 /* Make all virtual function table pointers in non-virtual base
13765 classes point to CURRENT_CLASS_TYPE's virtual function
13766 tables. */
13767 initialize_vtbl_ptrs (current_class_ptr);
13768 finish_compound_stmt (compound_stmt);
13770 /* Insert a cleanup to let the back end know that the object is dead
13771 when we exit the destructor, either normally or via exception. */
13772 tree clobber = build_constructor (current_class_type, NULL);
13773 TREE_THIS_VOLATILE (clobber) = true;
13774 tree exprstmt = build2 (MODIFY_EXPR, current_class_type,
13775 current_class_ref, clobber);
13776 finish_decl_cleanup (NULL_TREE, exprstmt);
13778 /* And insert cleanups for our bases and members so that they
13779 will be properly destroyed if we throw. */
13780 push_base_cleanups ();
13784 /* At the end of every destructor we generate code to delete the object if
13785 necessary. Do that now. */
13787 static void
13788 finish_destructor_body (void)
13790 tree exprstmt;
13792 /* Any return from a destructor will end up here; that way all base
13793 and member cleanups will be run when the function returns. */
13794 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13796 /* In a virtual destructor, we must call delete. */
13797 if (DECL_VIRTUAL_P (current_function_decl))
13799 tree if_stmt;
13800 tree virtual_size = cxx_sizeof (current_class_type);
13802 /* [class.dtor]
13804 At the point of definition of a virtual destructor (including
13805 an implicit definition), non-placement operator delete shall
13806 be looked up in the scope of the destructor's class and if
13807 found shall be accessible and unambiguous. */
13808 exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
13809 virtual_size,
13810 /*global_p=*/false,
13811 /*placement=*/NULL_TREE,
13812 /*alloc_fn=*/NULL_TREE,
13813 tf_warning_or_error);
13815 if_stmt = begin_if_stmt ();
13816 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13817 current_in_charge_parm,
13818 integer_one_node),
13819 if_stmt);
13820 finish_expr_stmt (exprstmt);
13821 finish_then_clause (if_stmt);
13822 finish_if_stmt (if_stmt);
13825 if (targetm.cxx.cdtor_returns_this ())
13827 tree val;
13829 val = DECL_ARGUMENTS (current_function_decl);
13830 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13831 DECL_RESULT (current_function_decl), val);
13832 /* Return the address of the object. */
13833 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13834 add_stmt (exprstmt);
13838 /* Do the necessary processing for the beginning of a function body, which
13839 in this case includes member-initializers, but not the catch clauses of
13840 a function-try-block. Currently, this means opening a binding level
13841 for the member-initializers (in a ctor), member cleanups (in a dtor),
13842 and capture proxies (in a lambda operator()). */
13844 tree
13845 begin_function_body (void)
13847 tree stmt;
13849 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13850 return NULL_TREE;
13852 if (processing_template_decl)
13853 /* Do nothing now. */;
13854 else
13855 /* Always keep the BLOCK node associated with the outermost pair of
13856 curly braces of a function. These are needed for correct
13857 operation of dwarfout.c. */
13858 keep_next_level (true);
13860 stmt = begin_compound_stmt (BCS_FN_BODY);
13862 if (processing_template_decl)
13863 /* Do nothing now. */;
13864 else if (DECL_DESTRUCTOR_P (current_function_decl))
13865 begin_destructor_body ();
13867 return stmt;
13870 /* Do the processing for the end of a function body. Currently, this means
13871 closing out the cleanups for fully-constructed bases and members, and in
13872 the case of the destructor, deleting the object if desired. Again, this
13873 is only meaningful for [cd]tors, since they are the only functions where
13874 there is a significant distinction between the main body and any
13875 function catch clauses. Handling, say, main() return semantics here
13876 would be wrong, as flowing off the end of a function catch clause for
13877 main() would also need to return 0. */
13879 void
13880 finish_function_body (tree compstmt)
13882 if (compstmt == NULL_TREE)
13883 return;
13885 /* Close the block. */
13886 finish_compound_stmt (compstmt);
13888 if (processing_template_decl)
13889 /* Do nothing now. */;
13890 else if (DECL_CONSTRUCTOR_P (current_function_decl))
13891 finish_constructor_body ();
13892 else if (DECL_DESTRUCTOR_P (current_function_decl))
13893 finish_destructor_body ();
13896 /* Given a function, returns the BLOCK corresponding to the outermost level
13897 of curly braces, skipping the artificial block created for constructor
13898 initializers. */
13900 tree
13901 outer_curly_brace_block (tree fndecl)
13903 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13904 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13905 /* Skip the artificial function body block. */
13906 block = BLOCK_SUBBLOCKS (block);
13907 return block;
13910 /* If FNDECL is a class's key method, add the class to the list of
13911 keyed classes that should be emitted. */
13913 static void
13914 record_key_method_defined (tree fndecl)
13916 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13917 && DECL_VIRTUAL_P (fndecl)
13918 && !processing_template_decl)
13920 tree fnclass = DECL_CONTEXT (fndecl);
13921 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13922 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13926 /* Subroutine of finish_function.
13927 Save the body of constexpr functions for possible
13928 future compile time evaluation. */
13930 static void
13931 maybe_save_function_definition (tree fun)
13933 if (!processing_template_decl
13934 && DECL_DECLARED_CONSTEXPR_P (fun)
13935 && !DECL_CLONED_FUNCTION_P (fun))
13936 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13939 /* Finish up a function declaration and compile that function
13940 all the way to assembler language output. The free the storage
13941 for the function definition.
13943 FLAGS is a bitwise or of the following values:
13944 2 - INCLASS_INLINE
13945 We just finished processing the body of an in-class inline
13946 function definition. (This processing will have taken place
13947 after the class definition is complete.) */
13949 tree
13950 finish_function (int flags)
13952 tree fndecl = current_function_decl;
13953 tree fntype, ctype = NULL_TREE;
13954 int inclass_inline = (flags & 2) != 0;
13956 /* When we get some parse errors, we can end up without a
13957 current_function_decl, so cope. */
13958 if (fndecl == NULL_TREE)
13959 return error_mark_node;
13961 if (c_dialect_objc ())
13962 objc_finish_function ();
13964 gcc_assert (!defer_mark_used_calls);
13965 defer_mark_used_calls = true;
13967 record_key_method_defined (fndecl);
13969 fntype = TREE_TYPE (fndecl);
13971 /* TREE_READONLY (fndecl) = 1;
13972 This caused &foo to be of type ptr-to-const-function
13973 which then got a warning when stored in a ptr-to-function variable. */
13975 gcc_assert (building_stmt_list_p ());
13976 /* The current function is being defined, so its DECL_INITIAL should
13977 be set, and unless there's a multiple definition, it should be
13978 error_mark_node. */
13979 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13981 /* For a cloned function, we've already got all the code we need;
13982 there's no need to add any extra bits. */
13983 if (!DECL_CLONED_FUNCTION_P (fndecl))
13985 /* Make it so that `main' always returns 0 by default. */
13986 if (DECL_MAIN_P (current_function_decl))
13987 finish_return_stmt (integer_zero_node);
13989 if (use_eh_spec_block (current_function_decl))
13990 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13991 (TREE_TYPE (current_function_decl)),
13992 current_eh_spec_block);
13995 /* If we're saving up tree structure, tie off the function now. */
13996 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13998 finish_fname_decls ();
14000 /* If this function can't throw any exceptions, remember that. */
14001 if (!processing_template_decl
14002 && !cp_function_chain->can_throw
14003 && !flag_non_call_exceptions
14004 && !decl_replaceable_p (fndecl))
14005 TREE_NOTHROW (fndecl) = 1;
14007 /* This must come after expand_function_end because cleanups might
14008 have declarations (from inline functions) that need to go into
14009 this function's blocks. */
14011 /* If the current binding level isn't the outermost binding level
14012 for this function, either there is a bug, or we have experienced
14013 syntax errors and the statement tree is malformed. */
14014 if (current_binding_level->kind != sk_function_parms)
14016 /* Make sure we have already experienced errors. */
14017 gcc_assert (errorcount);
14019 /* Throw away the broken statement tree and extra binding
14020 levels. */
14021 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
14023 while (current_binding_level->kind != sk_function_parms)
14025 if (current_binding_level->kind == sk_class)
14026 pop_nested_class ();
14027 else
14028 poplevel (0, 0, 0);
14031 poplevel (1, 0, 1);
14033 /* Statements should always be full-expressions at the outermost set
14034 of curly braces for a function. */
14035 gcc_assert (stmts_are_full_exprs_p ());
14037 /* If there are no return statements in a function with auto return type,
14038 the return type is void. But if the declared type is something like
14039 auto*, this is an error. */
14040 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
14041 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
14043 if (!is_auto (current_function_auto_return_pattern)
14044 && !current_function_returns_value && !current_function_returns_null)
14046 error ("no return statements in function returning %qT",
14047 current_function_auto_return_pattern);
14048 inform (input_location, "only plain %<auto%> return type can be "
14049 "deduced to %<void%>");
14051 apply_deduced_return_type (fndecl, void_type_node);
14052 fntype = TREE_TYPE (fndecl);
14055 /* Save constexpr function body before it gets munged by
14056 the NRV transformation. */
14057 maybe_save_function_definition (fndecl);
14059 /* Set up the named return value optimization, if we can. Candidate
14060 variables are selected in check_return_expr. */
14061 if (current_function_return_value)
14063 tree r = current_function_return_value;
14064 tree outer;
14066 if (r != error_mark_node
14067 /* This is only worth doing for fns that return in memory--and
14068 simpler, since we don't have to worry about promoted modes. */
14069 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
14070 /* Only allow this for variables declared in the outer scope of
14071 the function so we know that their lifetime always ends with a
14072 return; see g++.dg/opt/nrv6.C. We could be more flexible if
14073 we were to do this optimization in tree-ssa. */
14074 && (outer = outer_curly_brace_block (fndecl))
14075 && chain_member (r, BLOCK_VARS (outer)))
14076 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
14078 current_function_return_value = NULL_TREE;
14081 /* Remember that we were in class scope. */
14082 if (current_class_name)
14083 ctype = current_class_type;
14085 /* Must mark the RESULT_DECL as being in this function. */
14086 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14088 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14089 to the FUNCTION_DECL node itself. */
14090 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14092 /* Save away current state, if appropriate. */
14093 if (!processing_template_decl)
14094 save_function_data (fndecl);
14096 /* Complain if there's just no return statement. */
14097 if (warn_return_type
14098 && !VOID_TYPE_P (TREE_TYPE (fntype))
14099 && !dependent_type_p (TREE_TYPE (fntype))
14100 && !current_function_returns_value && !current_function_returns_null
14101 /* Don't complain if we abort or throw. */
14102 && !current_function_returns_abnormally
14103 /* Don't complain if we are declared noreturn. */
14104 && !TREE_THIS_VOLATILE (fndecl)
14105 && !DECL_NAME (DECL_RESULT (fndecl))
14106 && !TREE_NO_WARNING (fndecl)
14107 /* Structor return values (if any) are set by the compiler. */
14108 && !DECL_CONSTRUCTOR_P (fndecl)
14109 && !DECL_DESTRUCTOR_P (fndecl)
14110 && targetm.warn_func_return (fndecl))
14112 warning (OPT_Wreturn_type,
14113 "no return statement in function returning non-void");
14114 TREE_NO_WARNING (fndecl) = 1;
14117 /* Store the end of the function, so that we get good line number
14118 info for the epilogue. */
14119 cfun->function_end_locus = input_location;
14121 /* Complain about parameters that are only set, but never otherwise used. */
14122 if (warn_unused_but_set_parameter
14123 && !processing_template_decl
14124 && errorcount == unused_but_set_errorcount
14125 && !DECL_CLONED_FUNCTION_P (fndecl))
14127 tree decl;
14129 for (decl = DECL_ARGUMENTS (fndecl);
14130 decl;
14131 decl = DECL_CHAIN (decl))
14132 if (TREE_USED (decl)
14133 && TREE_CODE (decl) == PARM_DECL
14134 && !DECL_READ_P (decl)
14135 && DECL_NAME (decl)
14136 && !DECL_ARTIFICIAL (decl)
14137 && !TREE_NO_WARNING (decl)
14138 && !DECL_IN_SYSTEM_HEADER (decl)
14139 && TREE_TYPE (decl) != error_mark_node
14140 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
14141 && (!CLASS_TYPE_P (TREE_TYPE (decl))
14142 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
14143 warning (OPT_Wunused_but_set_parameter,
14144 "parameter %q+D set but not used", decl);
14145 unused_but_set_errorcount = errorcount;
14148 /* Complain about locally defined typedefs that are not used in this
14149 function. */
14150 maybe_warn_unused_local_typedefs ();
14152 /* Genericize before inlining. */
14153 if (!processing_template_decl)
14155 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
14156 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
14157 cp_genericize (fndecl);
14158 /* Clear out the bits we don't need. */
14159 f->x_current_class_ptr = NULL;
14160 f->x_current_class_ref = NULL;
14161 f->x_eh_spec_block = NULL;
14162 f->x_in_charge_parm = NULL;
14163 f->x_vtt_parm = NULL;
14164 f->x_return_value = NULL;
14165 f->bindings = NULL;
14166 f->extern_decl_map = NULL;
14168 /* Clear out the bits we don't need. */
14169 local_names = NULL;
14171 /* We're leaving the context of this function, so zap cfun. It's still in
14172 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
14173 set_cfun (NULL);
14174 current_function_decl = NULL;
14176 /* If this is an in-class inline definition, we may have to pop the
14177 bindings for the template parameters that we added in
14178 maybe_begin_member_template_processing when start_function was
14179 called. */
14180 if (inclass_inline)
14181 maybe_end_member_template_processing ();
14183 /* Leave the scope of the class. */
14184 if (ctype)
14185 pop_nested_class ();
14187 --function_depth;
14189 /* Clean up. */
14190 current_function_decl = NULL_TREE;
14192 defer_mark_used_calls = false;
14193 if (deferred_mark_used_calls)
14195 unsigned int i;
14196 tree decl;
14198 FOR_EACH_VEC_SAFE_ELT (deferred_mark_used_calls, i, decl)
14199 mark_used (decl);
14200 vec_free (deferred_mark_used_calls);
14203 return fndecl;
14206 /* Create the FUNCTION_DECL for a function definition.
14207 DECLSPECS and DECLARATOR are the parts of the declaration;
14208 they describe the return type and the name of the function,
14209 but twisted together in a fashion that parallels the syntax of C.
14211 This function creates a binding context for the function body
14212 as well as setting up the FUNCTION_DECL in current_function_decl.
14214 Returns a FUNCTION_DECL on success.
14216 If the DECLARATOR is not suitable for a function (it defines a datum
14217 instead), we return 0, which tells yyparse to report a parse error.
14219 May return void_type_node indicating that this method is actually
14220 a friend. See grokfield for more details.
14222 Came here with a `.pushlevel' .
14224 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14225 CHANGES TO CODE IN `grokfield'. */
14227 tree
14228 grokmethod (cp_decl_specifier_seq *declspecs,
14229 const cp_declarator *declarator, tree attrlist)
14231 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14232 &attrlist);
14234 if (fndecl == error_mark_node)
14235 return error_mark_node;
14237 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14239 error ("invalid member function declaration");
14240 return error_mark_node;
14243 if (attrlist)
14244 cplus_decl_attributes (&fndecl, attrlist, 0);
14246 /* Pass friends other than inline friend functions back. */
14247 if (fndecl == void_type_node)
14248 return fndecl;
14250 if (DECL_IN_AGGR_P (fndecl))
14252 if (DECL_CLASS_SCOPE_P (fndecl))
14253 error ("%qD is already defined in class %qT", fndecl,
14254 DECL_CONTEXT (fndecl));
14255 return error_mark_node;
14258 check_template_shadow (fndecl);
14260 DECL_DECLARED_INLINE_P (fndecl) = 1;
14261 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
14263 /* We process method specializations in finish_struct_1. */
14264 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14266 fndecl = push_template_decl (fndecl);
14267 if (fndecl == error_mark_node)
14268 return fndecl;
14271 if (! DECL_FRIEND_P (fndecl))
14273 if (DECL_CHAIN (fndecl))
14275 fndecl = copy_node (fndecl);
14276 TREE_CHAIN (fndecl) = NULL_TREE;
14280 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14282 DECL_IN_AGGR_P (fndecl) = 1;
14283 return fndecl;
14287 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
14288 we can lay it out later, when and if its type becomes complete.
14290 Also handle constexpr pointer to member variables where the initializer
14291 is an unlowered PTRMEM_CST because the class isn't complete yet. */
14293 void
14294 maybe_register_incomplete_var (tree var)
14296 gcc_assert (VAR_P (var));
14298 /* Keep track of variables with incomplete types. */
14299 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14300 && DECL_EXTERNAL (var))
14302 tree inner_type = TREE_TYPE (var);
14304 while (TREE_CODE (inner_type) == ARRAY_TYPE)
14305 inner_type = TREE_TYPE (inner_type);
14306 inner_type = TYPE_MAIN_VARIANT (inner_type);
14308 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14309 /* RTTI TD entries are created while defining the type_info. */
14310 || (TYPE_LANG_SPECIFIC (inner_type)
14311 && TYPE_BEING_DEFINED (inner_type)))
14313 incomplete_var iv = {var, inner_type};
14314 vec_safe_push (incomplete_vars, iv);
14316 else if (TYPE_PTRMEM_P (inner_type)
14317 && DECL_INITIAL (var)
14318 && TREE_CODE (DECL_INITIAL (var)) == PTRMEM_CST)
14320 tree context = TYPE_PTRMEM_CLASS_TYPE (inner_type);
14321 gcc_assert (TYPE_BEING_DEFINED (context));
14322 incomplete_var iv = {var, context};
14323 vec_safe_push (incomplete_vars, iv);
14328 /* Called when a class type (given by TYPE) is defined. If there are
14329 any existing VAR_DECLs whose type has been completed by this
14330 declaration, update them now. */
14332 void
14333 complete_vars (tree type)
14335 unsigned ix;
14336 incomplete_var *iv;
14338 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
14340 if (same_type_p (type, iv->incomplete_type))
14342 tree var = iv->decl;
14343 tree type = TREE_TYPE (var);
14345 if (TYPE_PTRMEM_P (type))
14346 DECL_INITIAL (var) = cplus_expand_constant (DECL_INITIAL (var));
14347 else
14349 /* Complete the type of the variable. The VAR_DECL itself
14350 will be laid out in expand_expr. */
14351 complete_type (type);
14352 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
14355 /* Remove this entry from the list. */
14356 incomplete_vars->unordered_remove (ix);
14358 else
14359 ix++;
14362 /* Check for pending declarations which may have abstract type. */
14363 complete_type_check_abstract (type);
14366 /* If DECL is of a type which needs a cleanup, build and return an
14367 expression to perform that cleanup here. Return NULL_TREE if no
14368 cleanup need be done. */
14370 tree
14371 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
14373 tree type;
14374 tree attr;
14375 tree cleanup;
14377 /* Assume no cleanup is required. */
14378 cleanup = NULL_TREE;
14380 if (error_operand_p (decl))
14381 return cleanup;
14383 /* Handle "__attribute__((cleanup))". We run the cleanup function
14384 before the destructor since the destructor is what actually
14385 terminates the lifetime of the object. */
14386 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
14387 if (attr)
14389 tree id;
14390 tree fn;
14391 tree arg;
14393 /* Get the name specified by the user for the cleanup function. */
14394 id = TREE_VALUE (TREE_VALUE (attr));
14395 /* Look up the name to find the cleanup function to call. It is
14396 important to use lookup_name here because that is what is
14397 used in c-common.c:handle_cleanup_attribute when performing
14398 initial checks on the attribute. Note that those checks
14399 include ensuring that the function found is not an overloaded
14400 function, or an object with an overloaded call operator,
14401 etc.; we can rely on the fact that the function found is an
14402 ordinary FUNCTION_DECL. */
14403 fn = lookup_name (id);
14404 arg = build_address (decl);
14405 mark_used (decl);
14406 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
14407 if (cleanup == error_mark_node)
14408 return error_mark_node;
14410 /* Handle ordinary C++ destructors. */
14411 type = TREE_TYPE (decl);
14412 if (type_build_dtor_call (type))
14414 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
14415 tree addr;
14416 tree call;
14418 if (TREE_CODE (type) == ARRAY_TYPE)
14419 addr = decl;
14420 else
14421 addr = build_address (decl);
14423 call = build_delete (TREE_TYPE (addr), addr,
14424 sfk_complete_destructor, flags, 0, complain);
14425 if (call == error_mark_node)
14426 cleanup = error_mark_node;
14427 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
14428 /* Discard the call. */;
14429 else if (cleanup)
14430 cleanup = cp_build_compound_expr (cleanup, call, complain);
14431 else
14432 cleanup = call;
14435 /* build_delete sets the location of the destructor call to the
14436 current location, even though the destructor is going to be
14437 called later, at the end of the current scope. This can lead to
14438 a "jumpy" behaviour for users of debuggers when they step around
14439 the end of the block. So let's unset the location of the
14440 destructor call instead. */
14441 if (cleanup != NULL && EXPR_P (cleanup))
14442 SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
14443 return cleanup;
14447 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
14448 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
14449 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
14451 tree
14452 static_fn_type (tree memfntype)
14454 tree fntype;
14455 tree args;
14457 if (TYPE_PTRMEMFUNC_P (memfntype))
14458 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
14459 if (POINTER_TYPE_P (memfntype)
14460 || TREE_CODE (memfntype) == FUNCTION_DECL)
14461 memfntype = TREE_TYPE (memfntype);
14462 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
14463 return memfntype;
14464 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
14465 args = TYPE_ARG_TYPES (memfntype);
14466 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
14467 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
14468 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
14469 fntype = (cp_build_type_attribute_variant
14470 (fntype, TYPE_ATTRIBUTES (memfntype)));
14471 fntype = (build_exception_variant
14472 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
14473 return fntype;
14476 /* DECL was originally constructed as a non-static member function,
14477 but turned out to be static. Update it accordingly. */
14479 void
14480 revert_static_member_fn (tree decl)
14482 tree stype = static_fn_type (decl);
14483 cp_cv_quals quals = type_memfn_quals (stype);
14484 cp_ref_qualifier rqual = type_memfn_rqual (stype);
14486 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
14487 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
14489 TREE_TYPE (decl) = stype;
14491 if (DECL_ARGUMENTS (decl))
14492 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
14493 DECL_STATIC_FUNCTION_P (decl) = 1;
14496 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14497 one of the language-independent trees. */
14499 enum cp_tree_node_structure_enum
14500 cp_tree_node_structure (union lang_tree_node * t)
14502 switch (TREE_CODE (&t->generic))
14504 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
14505 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
14506 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
14507 case OVERLOAD: return TS_CP_OVERLOAD;
14508 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
14509 case PTRMEM_CST: return TS_CP_PTRMEM;
14510 case BASELINK: return TS_CP_BASELINK;
14511 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
14512 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
14513 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
14514 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
14515 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
14516 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
14517 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
14518 default: return TS_CP_GENERIC;
14522 /* Build the void_list_node (void_type_node having been created). */
14523 tree
14524 build_void_list_node (void)
14526 tree t = build_tree_list (NULL_TREE, void_type_node);
14527 return t;
14530 bool
14531 cp_missing_noreturn_ok_p (tree decl)
14533 /* A missing noreturn is ok for the `main' function. */
14534 return DECL_MAIN_P (decl);
14537 /* Return the COMDAT group into which DECL should be placed. */
14539 tree
14540 cxx_comdat_group (tree decl)
14542 tree name;
14544 /* Virtual tables, construction virtual tables, and virtual table
14545 tables all go in a single COMDAT group, named after the primary
14546 virtual table. */
14547 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
14548 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
14549 /* For all other DECLs, the COMDAT group is the mangled name of the
14550 declaration itself. */
14551 else
14553 while (DECL_THUNK_P (decl))
14555 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
14556 into the same section as the target function. In that case
14557 we must return target's name. */
14558 tree target = THUNK_TARGET (decl);
14559 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14560 && DECL_SECTION_NAME (target) != NULL
14561 && DECL_ONE_ONLY (target))
14562 decl = target;
14563 else
14564 break;
14566 name = DECL_ASSEMBLER_NAME (decl);
14569 return name;
14572 /* Returns the return type for FN as written by the user, which may include
14573 a placeholder for a deduced return type. */
14575 tree
14576 fndecl_declared_return_type (tree fn)
14578 fn = STRIP_TEMPLATE (fn);
14579 if (FNDECL_USED_AUTO (fn))
14581 struct language_function *f = NULL;
14582 if (DECL_STRUCT_FUNCTION (fn))
14583 f = DECL_STRUCT_FUNCTION (fn)->language;
14584 if (f == NULL)
14585 f = DECL_SAVED_FUNCTION_DATA (fn);
14586 return f->x_auto_return_pattern;
14588 return TREE_TYPE (TREE_TYPE (fn));
14591 /* Returns true iff DECL was declared with an auto return type and it has
14592 not yet been deduced to a real type. */
14594 bool
14595 undeduced_auto_decl (tree decl)
14597 if (cxx_dialect < cxx1y)
14598 return false;
14599 return type_uses_auto (TREE_TYPE (decl));
14602 /* Complain if DECL has an undeduced return type. */
14604 void
14605 require_deduced_type (tree decl)
14607 if (undeduced_auto_decl (decl))
14608 error ("use of %qD before deduction of %<auto%>", decl);
14611 #include "gt-cp-decl.h"