Introduce gimple_phi and use it in various places
[official-gcc.git] / gcc / cp / decl.c
blob88164cd8954610e747dc82c534f6df0a2865cdaa
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2014 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
22 /* Process declarations and symbol lookup for C++ front end.
23 Also constructs types; the standard scalar types at initialization,
24 and structure, union, array and enum types when they are declared. */
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "tree-hasher.h"
35 #include "stringpool.h"
36 #include "stor-layout.h"
37 #include "varasm.h"
38 #include "attribs.h"
39 #include "calls.h"
40 #include "flags.h"
41 #include "cp-tree.h"
42 #include "tree-iterator.h"
43 #include "tree-inline.h"
44 #include "decl.h"
45 #include "intl.h"
46 #include "toplev.h"
47 #include "hashtab.h"
48 #include "tm_p.h"
49 #include "target.h"
50 #include "c-family/c-common.h"
51 #include "c-family/c-objc.h"
52 #include "c-family/c-pragma.h"
53 #include "c-family/c-target.h"
54 #include "c-family/c-ubsan.h"
55 #include "diagnostic.h"
56 #include "intl.h"
57 #include "debug.h"
58 #include "timevar.h"
59 #include "splay-tree.h"
60 #include "plugin.h"
61 #include "cgraph.h"
62 #include "cilk.h"
63 #include "wide-int.h"
64 #include "builtins.h"
66 /* Possible cases of bad specifiers type used by bad_specifiers. */
67 enum bad_spec_place {
68 BSP_VAR, /* variable */
69 BSP_PARM, /* parameter */
70 BSP_TYPE, /* type */
71 BSP_FIELD /* field */
74 static tree grokparms (tree parmlist, tree *);
75 static const char *redeclaration_error_message (tree, tree);
77 static int decl_jump_unsafe (tree);
78 static void require_complete_types_for_parms (tree);
79 static int ambi_op_p (enum tree_code);
80 static int unary_op_p (enum tree_code);
81 static void push_local_name (tree);
82 static tree grok_reference_init (tree, tree, tree, int);
83 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
84 int, int, int, tree);
85 static int check_static_variable_definition (tree, tree);
86 static void record_unknown_type (tree, const char *);
87 static tree builtin_function_1 (tree, tree, bool);
88 static int member_function_or_else (tree, tree, enum overload_flags);
89 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
90 int);
91 static void check_for_uninitialized_const_var (tree);
92 static tree local_variable_p_walkfn (tree *, int *, void *);
93 static tree record_builtin_java_type (const char *, int);
94 static const char *tag_name (enum tag_types);
95 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
96 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
97 static void maybe_deduce_size_from_array_init (tree, tree);
98 static void layout_var_decl (tree);
99 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
100 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
101 static void save_function_data (tree);
102 static void copy_type_enum (tree , tree);
103 static void check_function_type (tree, tree);
104 static void finish_constructor_body (void);
105 static void begin_destructor_body (void);
106 static void finish_destructor_body (void);
107 static void record_key_method_defined (tree);
108 static tree create_array_type_for_decl (tree, tree, tree);
109 static tree get_atexit_node (void);
110 static tree get_dso_handle_node (void);
111 static tree start_cleanup_fn (void);
112 static void end_cleanup_fn (void);
113 static tree cp_make_fname_decl (location_t, tree, int);
114 static void initialize_predefined_identifiers (void);
115 static tree check_special_function_return_type
116 (special_function_kind, tree, tree);
117 static tree push_cp_library_fn (enum tree_code, tree, int);
118 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
119 static void store_parm_decls (tree);
120 static void initialize_local_var (tree, tree);
121 static void expand_static_init (tree, tree);
123 /* The following symbols are subsumed in the cp_global_trees array, and
124 listed here individually for documentation purposes.
126 C++ extensions
127 tree wchar_decl_node;
129 tree vtable_entry_type;
130 tree delta_type_node;
131 tree __t_desc_type_node;
133 tree class_type_node;
134 tree unknown_type_node;
136 Array type `vtable_entry_type[]'
138 tree vtbl_type_node;
139 tree vtbl_ptr_type_node;
141 Namespaces,
143 tree std_node;
144 tree abi_node;
146 A FUNCTION_DECL which can call `abort'. Not necessarily the
147 one that the user will declare, but sufficient to be called
148 by routines that want to abort the program.
150 tree abort_fndecl;
152 The FUNCTION_DECL for the default `::operator delete'.
154 tree global_delete_fndecl;
156 Used by RTTI
157 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
158 tree tinfo_var_id; */
160 tree cp_global_trees[CPTI_MAX];
162 /* Indicates that there is a type value in some namespace, although
163 that is not necessarily in scope at the moment. */
165 tree global_type_node;
167 /* The node that holds the "name" of the global scope. */
168 tree global_scope_name;
170 #define local_names cp_function_chain->x_local_names
172 /* A list of objects which have constructors or destructors
173 which reside in the global scope. The decl is stored in
174 the TREE_VALUE slot and the initializer is stored
175 in the TREE_PURPOSE slot. */
176 tree static_aggregates;
178 /* Like static_aggregates, but for thread_local variables. */
179 tree tls_aggregates;
181 /* -- end of C++ */
183 /* A node for the integer constant 2. */
185 tree integer_two_node;
187 /* Used only for jumps to as-yet undefined labels, since jumps to
188 defined labels can have their validity checked immediately. */
190 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
191 struct named_label_use_entry *next;
192 /* The binding level to which this entry is *currently* attached.
193 This is initially the binding level in which the goto appeared,
194 but is modified as scopes are closed. */
195 cp_binding_level *binding_level;
196 /* The head of the names list that was current when the goto appeared,
197 or the inner scope popped. These are the decls that will *not* be
198 skipped when jumping to the label. */
199 tree names_in_scope;
200 /* The location of the goto, for error reporting. */
201 location_t o_goto_locus;
202 /* True if an OpenMP structured block scope has been closed since
203 the goto appeared. This means that the branch from the label will
204 illegally exit an OpenMP scope. */
205 bool in_omp_scope;
208 /* A list of all LABEL_DECLs in the function that have names. Here so
209 we can clear out their names' definitions at the end of the
210 function, and so we can check the validity of jumps to these labels. */
212 struct GTY((for_user)) named_label_entry {
213 /* The decl itself. */
214 tree label_decl;
216 /* The binding level to which the label is *currently* attached.
217 This is initially set to the binding level in which the label
218 is defined, but is modified as scopes are closed. */
219 cp_binding_level *binding_level;
220 /* The head of the names list that was current when the label was
221 defined, or the inner scope popped. These are the decls that will
222 be skipped when jumping to the label. */
223 tree names_in_scope;
224 /* A vector of all decls from all binding levels that would be
225 crossed by a backward branch to the label. */
226 vec<tree, va_gc> *bad_decls;
228 /* A list of uses of the label, before the label is defined. */
229 struct named_label_use_entry *uses;
231 /* The following bits are set after the label is defined, and are
232 updated as scopes are popped. They indicate that a backward jump
233 to the label will illegally enter a scope of the given flavor. */
234 bool in_try_scope;
235 bool in_catch_scope;
236 bool in_omp_scope;
239 #define named_labels cp_function_chain->x_named_labels
241 /* The number of function bodies which we are currently processing.
242 (Zero if we are at namespace scope, one inside the body of a
243 function, two inside the body of a function in a local class, etc.) */
244 int function_depth;
246 /* To avoid unwanted recursion, finish_function defers all mark_used calls
247 encountered during its execution until it finishes. */
248 bool defer_mark_used_calls;
249 vec<tree, va_gc> *deferred_mark_used_calls;
251 /* States indicating how grokdeclarator() should handle declspecs marked
252 with __attribute__((deprecated)). An object declared as
253 __attribute__((deprecated)) suppresses warnings of uses of other
254 deprecated items. */
255 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
258 /* A list of VAR_DECLs whose type was incomplete at the time the
259 variable was declared. */
261 typedef struct GTY(()) incomplete_var_d {
262 tree decl;
263 tree incomplete_type;
264 } incomplete_var;
267 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
269 /* Returns the kind of template specialization we are currently
270 processing, given that it's declaration contained N_CLASS_SCOPES
271 explicit scope qualifications. */
273 tmpl_spec_kind
274 current_tmpl_spec_kind (int n_class_scopes)
276 int n_template_parm_scopes = 0;
277 int seen_specialization_p = 0;
278 int innermost_specialization_p = 0;
279 cp_binding_level *b;
281 /* Scan through the template parameter scopes. */
282 for (b = current_binding_level;
283 b->kind == sk_template_parms;
284 b = b->level_chain)
286 /* If we see a specialization scope inside a parameter scope,
287 then something is wrong. That corresponds to a declaration
288 like:
290 template <class T> template <> ...
292 which is always invalid since [temp.expl.spec] forbids the
293 specialization of a class member template if the enclosing
294 class templates are not explicitly specialized as well. */
295 if (b->explicit_spec_p)
297 if (n_template_parm_scopes == 0)
298 innermost_specialization_p = 1;
299 else
300 seen_specialization_p = 1;
302 else if (seen_specialization_p == 1)
303 return tsk_invalid_member_spec;
305 ++n_template_parm_scopes;
308 /* Handle explicit instantiations. */
309 if (processing_explicit_instantiation)
311 if (n_template_parm_scopes != 0)
312 /* We've seen a template parameter list during an explicit
313 instantiation. For example:
315 template <class T> template void f(int);
317 This is erroneous. */
318 return tsk_invalid_expl_inst;
319 else
320 return tsk_expl_inst;
323 if (n_template_parm_scopes < n_class_scopes)
324 /* We've not seen enough template headers to match all the
325 specialized classes present. For example:
327 template <class T> void R<T>::S<T>::f(int);
329 This is invalid; there needs to be one set of template
330 parameters for each class. */
331 return tsk_insufficient_parms;
332 else if (n_template_parm_scopes == n_class_scopes)
333 /* We're processing a non-template declaration (even though it may
334 be a member of a template class.) For example:
336 template <class T> void S<T>::f(int);
338 The `class T' matches the `S<T>', leaving no template headers
339 corresponding to the `f'. */
340 return tsk_none;
341 else if (n_template_parm_scopes > n_class_scopes + 1)
342 /* We've got too many template headers. For example:
344 template <> template <class T> void f (T);
346 There need to be more enclosing classes. */
347 return tsk_excessive_parms;
348 else
349 /* This must be a template. It's of the form:
351 template <class T> template <class U> void S<T>::f(U);
353 This is a specialization if the innermost level was a
354 specialization; otherwise it's just a definition of the
355 template. */
356 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
359 /* Exit the current scope. */
361 void
362 finish_scope (void)
364 poplevel (0, 0, 0);
367 /* When a label goes out of scope, check to see if that label was used
368 in a valid manner, and issue any appropriate warnings or errors. */
370 static void
371 pop_label (tree label, tree old_value)
373 if (!processing_template_decl)
375 if (DECL_INITIAL (label) == NULL_TREE)
377 location_t location;
379 error ("label %q+D used but not defined", label);
380 location = input_location;
381 /* FIXME want (LOCATION_FILE (input_location), (line)0) */
382 /* Avoid crashing later. */
383 define_label (location, DECL_NAME (label));
385 else
386 warn_for_unused_label (label);
389 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
392 /* At the end of a function, all labels declared within the function
393 go out of scope. BLOCK is the top-level block for the
394 function. */
397 pop_labels_1 (named_label_entry **slot, tree block)
399 struct named_label_entry *ent = *slot;
401 pop_label (ent->label_decl, NULL_TREE);
403 /* Put the labels into the "variables" of the top-level block,
404 so debugger can see them. */
405 DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
406 BLOCK_VARS (block) = ent->label_decl;
408 named_labels->clear_slot (slot);
410 return 1;
413 static void
414 pop_labels (tree block)
416 if (named_labels)
418 named_labels->traverse<tree, pop_labels_1> (block);
419 named_labels = NULL;
423 /* At the end of a block with local labels, restore the outer definition. */
425 static void
426 pop_local_label (tree label, tree old_value)
428 struct named_label_entry dummy;
430 pop_label (label, old_value);
432 dummy.label_decl = label;
433 named_label_entry **slot = named_labels->find_slot (&dummy, NO_INSERT);
434 named_labels->clear_slot (slot);
437 /* The following two routines are used to interface to Objective-C++.
438 The binding level is purposely treated as an opaque type. */
440 void *
441 objc_get_current_scope (void)
443 return current_binding_level;
446 /* The following routine is used by the NeXT-style SJLJ exceptions;
447 variables get marked 'volatile' so as to not be clobbered by
448 _setjmp()/_longjmp() calls. All variables in the current scope,
449 as well as parent scopes up to (but not including) ENCLOSING_BLK
450 shall be thusly marked. */
452 void
453 objc_mark_locals_volatile (void *enclosing_blk)
455 cp_binding_level *scope;
457 for (scope = current_binding_level;
458 scope && scope != enclosing_blk;
459 scope = scope->level_chain)
461 tree decl;
463 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
464 objc_volatilize_decl (decl);
466 /* Do not climb up past the current function. */
467 if (scope->kind == sk_function_parms)
468 break;
472 /* Update data for defined and undefined labels when leaving a scope. */
475 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
477 named_label_entry *ent = *slot;
478 cp_binding_level *obl = bl->level_chain;
480 if (ent->binding_level == bl)
482 tree decl;
484 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
485 TREE_LISTs representing OVERLOADs, so be careful. */
486 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
487 ? DECL_CHAIN (decl)
488 : TREE_CHAIN (decl)))
489 if (decl_jump_unsafe (decl))
490 vec_safe_push (ent->bad_decls, decl);
492 ent->binding_level = obl;
493 ent->names_in_scope = obl->names;
494 switch (bl->kind)
496 case sk_try:
497 ent->in_try_scope = true;
498 break;
499 case sk_catch:
500 ent->in_catch_scope = true;
501 break;
502 case sk_omp:
503 ent->in_omp_scope = true;
504 break;
505 default:
506 break;
509 else if (ent->uses)
511 struct named_label_use_entry *use;
513 for (use = ent->uses; use ; use = use->next)
514 if (use->binding_level == bl)
516 use->binding_level = obl;
517 use->names_in_scope = obl->names;
518 if (bl->kind == sk_omp)
519 use->in_omp_scope = true;
523 return 1;
526 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
527 when errors were reported, except for -Werror-unused-but-set-*. */
528 static int unused_but_set_errorcount;
530 /* Exit a binding level.
531 Pop the level off, and restore the state of the identifier-decl mappings
532 that were in effect when this level was entered.
534 If KEEP == 1, this level had explicit declarations, so
535 and create a "block" (a BLOCK node) for the level
536 to record its declarations and subblocks for symbol table output.
538 If FUNCTIONBODY is nonzero, this level is the body of a function,
539 so create a block as if KEEP were set and also clear out all
540 label names.
542 If REVERSE is nonzero, reverse the order of decls before putting
543 them into the BLOCK. */
545 tree
546 poplevel (int keep, int reverse, int functionbody)
548 tree link;
549 /* The chain of decls was accumulated in reverse order.
550 Put it into forward order, just for cleanliness. */
551 tree decls;
552 tree subblocks;
553 tree block;
554 tree decl;
555 int leaving_for_scope;
556 scope_kind kind;
557 unsigned ix;
558 cp_label_binding *label_bind;
560 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
561 restart:
563 block = NULL_TREE;
565 gcc_assert (current_binding_level->kind != sk_class);
567 if (current_binding_level->kind == sk_cleanup)
568 functionbody = 0;
569 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
571 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
573 /* We used to use KEEP == 2 to indicate that the new block should go
574 at the beginning of the list of blocks at this binding level,
575 rather than the end. This hack is no longer used. */
576 gcc_assert (keep == 0 || keep == 1);
578 if (current_binding_level->keep)
579 keep = 1;
581 /* Any uses of undefined labels, and any defined labels, now operate
582 under constraints of next binding contour. */
583 if (cfun && !functionbody && named_labels)
584 named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
585 (current_binding_level);
587 /* Get the decls in the order they were written.
588 Usually current_binding_level->names is in reverse order.
589 But parameter decls were previously put in forward order. */
591 if (reverse)
592 current_binding_level->names
593 = decls = nreverse (current_binding_level->names);
594 else
595 decls = current_binding_level->names;
597 /* If there were any declarations or structure tags in that level,
598 or if this level is a function body,
599 create a BLOCK to record them for the life of this function. */
600 block = NULL_TREE;
601 if (keep == 1 || functionbody)
602 block = make_node (BLOCK);
603 if (block != NULL_TREE)
605 BLOCK_VARS (block) = decls;
606 BLOCK_SUBBLOCKS (block) = subblocks;
609 /* In each subblock, record that this is its superior. */
610 if (keep >= 0)
611 for (link = subblocks; link; link = BLOCK_CHAIN (link))
612 BLOCK_SUPERCONTEXT (link) = block;
614 /* We still support the old for-scope rules, whereby the variables
615 in a for-init statement were in scope after the for-statement
616 ended. We only use the new rules if flag_new_for_scope is
617 nonzero. */
618 leaving_for_scope
619 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
621 /* Before we remove the declarations first check for unused variables. */
622 if ((warn_unused_variable || warn_unused_but_set_variable)
623 && current_binding_level->kind != sk_template_parms
624 && !processing_template_decl)
625 for (tree d = getdecls (); d; d = TREE_CHAIN (d))
627 /* There are cases where D itself is a TREE_LIST. See in
628 push_local_binding where the list of decls returned by
629 getdecls is built. */
630 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
631 // See through references for improved -Wunused-variable (PR 38958).
632 tree type = non_reference (TREE_TYPE (decl));
633 if (VAR_P (decl)
634 && (! TREE_USED (decl) || !DECL_READ_P (decl))
635 && ! DECL_IN_SYSTEM_HEADER (decl)
636 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
637 && type != error_mark_node
638 && (!CLASS_TYPE_P (type)
639 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
640 || lookup_attribute ("warn_unused",
641 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
643 if (! TREE_USED (decl))
644 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
645 else if (DECL_CONTEXT (decl) == current_function_decl
646 // For -Wunused-but-set-variable leave references alone.
647 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
648 && errorcount == unused_but_set_errorcount)
650 warning (OPT_Wunused_but_set_variable,
651 "variable %q+D set but not used", decl);
652 unused_but_set_errorcount = errorcount;
657 /* Remove declarations for all the DECLs in this level. */
658 for (link = decls; link; link = TREE_CHAIN (link))
660 if (leaving_for_scope && VAR_P (link)
661 /* It's hard to make this ARM compatibility hack play nicely with
662 lambdas, and it really isn't necessary in C++11 mode. */
663 && cxx_dialect < cxx11
664 && DECL_NAME (link))
666 tree name = DECL_NAME (link);
667 cxx_binding *ob;
668 tree ns_binding;
670 ob = outer_binding (name,
671 IDENTIFIER_BINDING (name),
672 /*class_p=*/true);
673 if (!ob)
674 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
675 else
676 ns_binding = NULL_TREE;
678 if (ob && ob->scope == current_binding_level->level_chain)
679 /* We have something like:
681 int i;
682 for (int i; ;);
684 and we are leaving the `for' scope. There's no reason to
685 keep the binding of the inner `i' in this case. */
686 pop_binding (name, link);
687 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
688 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
689 /* Here, we have something like:
691 typedef int I;
693 void f () {
694 for (int I; ;);
697 We must pop the for-scope binding so we know what's a
698 type and what isn't. */
699 pop_binding (name, link);
700 else
702 /* Mark this VAR_DECL as dead so that we can tell we left it
703 there only for backward compatibility. */
704 DECL_DEAD_FOR_LOCAL (link) = 1;
706 /* Keep track of what should have happened when we
707 popped the binding. */
708 if (ob && ob->value)
710 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
711 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
714 /* Add it to the list of dead variables in the next
715 outermost binding to that we can remove these when we
716 leave that binding. */
717 vec_safe_push (
718 current_binding_level->level_chain->dead_vars_from_for,
719 link);
721 /* Although we don't pop the cxx_binding, we do clear
722 its SCOPE since the scope is going away now. */
723 IDENTIFIER_BINDING (name)->scope
724 = current_binding_level->level_chain;
727 else
729 tree name;
731 /* Remove the binding. */
732 decl = link;
734 if (TREE_CODE (decl) == TREE_LIST)
735 decl = TREE_VALUE (decl);
736 name = decl;
738 if (TREE_CODE (name) == OVERLOAD)
739 name = OVL_FUNCTION (name);
741 gcc_assert (DECL_P (name));
742 pop_binding (DECL_NAME (name), decl);
746 /* Remove declarations for any `for' variables from inner scopes
747 that we kept around. */
748 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
749 ix, decl)
750 pop_binding (DECL_NAME (decl), decl);
752 /* Restore the IDENTIFIER_TYPE_VALUEs. */
753 for (link = current_binding_level->type_shadowed;
754 link; link = TREE_CHAIN (link))
755 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
757 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
758 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->shadowed_labels,
759 ix, label_bind)
760 pop_local_label (label_bind->label, label_bind->prev_value);
762 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
763 list if a `using' declaration put them there. The debugging
764 back ends won't understand OVERLOAD, so we remove them here.
765 Because the BLOCK_VARS are (temporarily) shared with
766 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
767 popped all the bindings. */
768 if (block)
770 tree* d;
772 for (d = &BLOCK_VARS (block); *d; )
774 if (TREE_CODE (*d) == TREE_LIST)
775 *d = TREE_CHAIN (*d);
776 else
777 d = &DECL_CHAIN (*d);
781 /* If the level being exited is the top level of a function,
782 check over all the labels. */
783 if (functionbody)
785 /* Since this is the top level block of a function, the vars are
786 the function's parameters. Don't leave them in the BLOCK
787 because they are found in the FUNCTION_DECL instead. */
788 BLOCK_VARS (block) = 0;
789 pop_labels (block);
792 kind = current_binding_level->kind;
793 if (kind == sk_cleanup)
795 tree stmt;
797 /* If this is a temporary binding created for a cleanup, then we'll
798 have pushed a statement list level. Pop that, create a new
799 BIND_EXPR for the block, and insert it into the stream. */
800 stmt = pop_stmt_list (current_binding_level->statement_list);
801 stmt = c_build_bind_expr (input_location, block, stmt);
802 add_stmt (stmt);
805 leave_scope ();
806 if (functionbody)
808 /* The current function is being defined, so its DECL_INITIAL
809 should be error_mark_node. */
810 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
811 DECL_INITIAL (current_function_decl) = block;
813 else if (block)
814 current_binding_level->blocks
815 = block_chainon (current_binding_level->blocks, block);
817 /* If we did not make a block for the level just exited,
818 any blocks made for inner levels
819 (since they cannot be recorded as subblocks in that level)
820 must be carried forward so they will later become subblocks
821 of something else. */
822 else if (subblocks)
823 current_binding_level->blocks
824 = block_chainon (current_binding_level->blocks, subblocks);
826 /* Each and every BLOCK node created here in `poplevel' is important
827 (e.g. for proper debugging information) so if we created one
828 earlier, mark it as "used". */
829 if (block)
830 TREE_USED (block) = 1;
832 /* All temporary bindings created for cleanups are popped silently. */
833 if (kind == sk_cleanup)
834 goto restart;
836 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
837 return block;
840 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
841 itself, calling F for each. The DATA is passed to F as well. */
843 static int
844 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
846 int result = 0;
847 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
849 result |= (*f) (name_space, data);
851 for (; current; current = DECL_CHAIN (current))
852 result |= walk_namespaces_r (current, f, data);
854 return result;
857 /* Walk all the namespaces, calling F for each. The DATA is passed to
858 F as well. */
861 walk_namespaces (walk_namespaces_fn f, void* data)
863 return walk_namespaces_r (global_namespace, f, data);
866 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
867 DATA is non-NULL, this is the last time we will call
868 wrapup_global_declarations for this NAMESPACE. */
871 wrapup_globals_for_namespace (tree name_space, void* data)
873 cp_binding_level *level = NAMESPACE_LEVEL (name_space);
874 vec<tree, va_gc> *statics = level->static_decls;
875 tree *vec = statics->address ();
876 int len = statics->length ();
877 int last_time = (data != 0);
879 if (last_time)
881 check_global_declarations (vec, len);
882 emit_debug_global_declarations (vec, len);
883 return 0;
886 /* Write out any globals that need to be output. */
887 return wrapup_global_declarations (vec, len);
891 /* In C++, you don't have to write `struct S' to refer to `S'; you
892 can just use `S'. We accomplish this by creating a TYPE_DECL as
893 if the user had written `typedef struct S S'. Create and return
894 the TYPE_DECL for TYPE. */
896 tree
897 create_implicit_typedef (tree name, tree type)
899 tree decl;
901 decl = build_decl (input_location, TYPE_DECL, name, type);
902 DECL_ARTIFICIAL (decl) = 1;
903 /* There are other implicit type declarations, like the one *within*
904 a class that allows you to write `S::S'. We must distinguish
905 amongst these. */
906 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
907 TYPE_NAME (type) = decl;
908 TYPE_STUB_DECL (type) = decl;
910 return decl;
913 /* Remember a local name for name-mangling purposes. */
915 static void
916 push_local_name (tree decl)
918 size_t i, nelts;
919 tree t, name;
921 timevar_start (TV_NAME_LOOKUP);
923 name = DECL_NAME (decl);
925 nelts = vec_safe_length (local_names);
926 for (i = 0; i < nelts; i++)
928 t = (*local_names)[i];
929 if (DECL_NAME (t) == name)
931 if (!DECL_LANG_SPECIFIC (decl))
932 retrofit_lang_decl (decl);
933 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
934 if (DECL_DISCRIMINATOR_SET_P (t))
935 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
936 else
937 DECL_DISCRIMINATOR (decl) = 1;
939 (*local_names)[i] = decl;
940 timevar_stop (TV_NAME_LOOKUP);
941 return;
945 vec_safe_push (local_names, decl);
946 timevar_stop (TV_NAME_LOOKUP);
949 /* Subroutine of duplicate_decls: return truthvalue of whether
950 or not types of these decls match.
952 For C++, we must compare the parameter list so that `int' can match
953 `int&' in a parameter position, but `int&' is not confused with
954 `const int&'. */
957 decls_match (tree newdecl, tree olddecl)
959 int types_match;
961 if (newdecl == olddecl)
962 return 1;
964 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
965 /* If the two DECLs are not even the same kind of thing, we're not
966 interested in their types. */
967 return 0;
969 gcc_assert (DECL_P (newdecl));
971 if (TREE_CODE (newdecl) == FUNCTION_DECL)
973 tree f1 = TREE_TYPE (newdecl);
974 tree f2 = TREE_TYPE (olddecl);
975 tree p1 = TYPE_ARG_TYPES (f1);
976 tree p2 = TYPE_ARG_TYPES (f2);
977 tree r2;
979 /* Specializations of different templates are different functions
980 even if they have the same type. */
981 tree t1 = (DECL_USE_TEMPLATE (newdecl)
982 ? DECL_TI_TEMPLATE (newdecl)
983 : NULL_TREE);
984 tree t2 = (DECL_USE_TEMPLATE (olddecl)
985 ? DECL_TI_TEMPLATE (olddecl)
986 : NULL_TREE);
987 if (t1 != t2)
988 return 0;
990 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
991 && ! (DECL_EXTERN_C_P (newdecl)
992 && DECL_EXTERN_C_P (olddecl)))
993 return 0;
995 /* A new declaration doesn't match a built-in one unless it
996 is also extern "C". */
997 if (DECL_IS_BUILTIN (olddecl)
998 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
999 return 0;
1001 if (TREE_CODE (f1) != TREE_CODE (f2))
1002 return 0;
1004 /* A declaration with deduced return type should use its pre-deduction
1005 type for declaration matching. */
1006 r2 = fndecl_declared_return_type (olddecl);
1008 if (same_type_p (TREE_TYPE (f1), r2))
1010 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1011 && (DECL_BUILT_IN (olddecl)
1012 #ifndef NO_IMPLICIT_EXTERN_C
1013 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1014 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1015 #endif
1018 types_match = self_promoting_args_p (p1);
1019 if (p1 == void_list_node)
1020 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1022 #ifndef NO_IMPLICIT_EXTERN_C
1023 else if (!prototype_p (f1)
1024 && (DECL_EXTERN_C_P (olddecl)
1025 && DECL_IN_SYSTEM_HEADER (olddecl)
1026 && !DECL_CLASS_SCOPE_P (olddecl))
1027 && (DECL_EXTERN_C_P (newdecl)
1028 && DECL_IN_SYSTEM_HEADER (newdecl)
1029 && !DECL_CLASS_SCOPE_P (newdecl)))
1031 types_match = self_promoting_args_p (p2);
1032 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1034 #endif
1035 else
1036 types_match =
1037 compparms (p1, p2)
1038 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1039 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1040 || comp_type_attributes (TREE_TYPE (newdecl),
1041 TREE_TYPE (olddecl)) != 0);
1043 else
1044 types_match = 0;
1046 /* The decls dont match if they correspond to two different versions
1047 of the same function. Disallow extern "C" functions to be
1048 versions for now. */
1049 if (types_match
1050 && !DECL_EXTERN_C_P (newdecl)
1051 && !DECL_EXTERN_C_P (olddecl)
1052 && targetm.target_option.function_versions (newdecl, olddecl))
1054 /* Mark functions as versions if necessary. Modify the mangled decl
1055 name if necessary. */
1056 if (DECL_FUNCTION_VERSIONED (newdecl)
1057 && DECL_FUNCTION_VERSIONED (olddecl))
1058 return 0;
1059 if (!DECL_FUNCTION_VERSIONED (newdecl))
1061 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1062 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1063 mangle_decl (newdecl);
1065 if (!DECL_FUNCTION_VERSIONED (olddecl))
1067 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1068 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1069 mangle_decl (olddecl);
1071 cgraph_node::record_function_versions (olddecl, newdecl);
1072 return 0;
1075 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1077 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1078 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1079 return 0;
1081 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1082 DECL_TEMPLATE_PARMS (olddecl)))
1083 return 0;
1085 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1086 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1087 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1088 else
1089 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1090 DECL_TEMPLATE_RESULT (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);
1118 return types_match;
1121 /* If NEWDECL is `static' and an `extern' was seen previously,
1122 warn about it. OLDDECL is the previous declaration.
1124 Note that this does not apply to the C++ case of declaring
1125 a variable `extern const' and then later `const'.
1127 Don't complain about built-in functions, since they are beyond
1128 the user's control. */
1130 void
1131 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1133 if (TREE_CODE (newdecl) == TYPE_DECL
1134 || TREE_CODE (newdecl) == TEMPLATE_DECL
1135 || TREE_CODE (newdecl) == CONST_DECL
1136 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1137 return;
1139 /* Don't get confused by static member functions; that's a different
1140 use of `static'. */
1141 if (TREE_CODE (newdecl) == FUNCTION_DECL
1142 && DECL_STATIC_FUNCTION_P (newdecl))
1143 return;
1145 /* If the old declaration was `static', or the new one isn't, then
1146 everything is OK. */
1147 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1148 return;
1150 /* It's OK to declare a builtin function as `static'. */
1151 if (TREE_CODE (olddecl) == FUNCTION_DECL
1152 && DECL_ARTIFICIAL (olddecl))
1153 return;
1155 if (permerror (input_location,
1156 "%qD was declared %<extern%> and later %<static%>", newdecl))
1157 inform (input_location, "previous declaration of %q+D", olddecl);
1160 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1161 function templates. If their exception specifications do not
1162 match, issue a diagnostic. */
1164 static void
1165 check_redeclaration_exception_specification (tree new_decl,
1166 tree old_decl)
1168 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1169 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1171 /* Two default specs are equivalent, don't force evaluation. */
1172 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1173 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1174 return;
1176 maybe_instantiate_noexcept (new_decl);
1177 maybe_instantiate_noexcept (old_decl);
1178 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1179 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1181 /* [except.spec]
1183 If any declaration of a function has an exception-specification,
1184 all declarations, including the definition and an explicit
1185 specialization, of that function shall have an
1186 exception-specification with the same set of type-ids. */
1187 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1188 && ! DECL_IS_BUILTIN (old_decl)
1189 && flag_exceptions
1190 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1192 error ("declaration of %qF has a different exception specifier",
1193 new_decl);
1194 error ("from previous declaration %q+F", old_decl);
1198 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1199 Otherwise issue diagnostics. */
1201 static bool
1202 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1204 old_decl = STRIP_TEMPLATE (old_decl);
1205 new_decl = STRIP_TEMPLATE (new_decl);
1206 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1207 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1208 return true;
1209 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1210 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1211 return true;
1212 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1214 if (DECL_BUILT_IN (old_decl))
1216 /* Hide a built-in declaration. */
1217 DECL_DECLARED_CONSTEXPR_P (old_decl)
1218 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1219 return true;
1221 /* 7.1.5 [dcl.constexpr]
1222 Note: An explicit specialization can differ from the template
1223 declaration with respect to the constexpr specifier. */
1224 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1225 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1226 return true;
1228 error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1229 error ("from previous declaration %q+D", old_decl);
1230 return false;
1232 return true;
1235 /* DECL is a redeclaration of a function or function template. If
1236 it does have default arguments issue a diagnostic. Note: this
1237 function is used to enforce the requirements in C++11 8.3.6 about
1238 no default arguments in redeclarations. */
1240 static void
1241 check_redeclaration_no_default_args (tree decl)
1243 gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1245 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1246 t && t != void_list_node; t = TREE_CHAIN (t))
1247 if (TREE_PURPOSE (t))
1249 permerror (input_location,
1250 "redeclaration of %q#D may not have default "
1251 "arguments", decl);
1252 return;
1256 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1257 && lookup_attribute ("gnu_inline", \
1258 DECL_ATTRIBUTES (fn)))
1260 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1261 If the redeclaration is invalid, a diagnostic is issued, and the
1262 error_mark_node is returned. Otherwise, OLDDECL is returned.
1264 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1265 returned.
1267 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1269 tree
1270 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1272 unsigned olddecl_uid = DECL_UID (olddecl);
1273 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1274 int new_defines_function = 0;
1275 tree new_template_info;
1277 if (newdecl == olddecl)
1278 return olddecl;
1280 types_match = decls_match (newdecl, olddecl);
1282 /* If either the type of the new decl or the type of the old decl is an
1283 error_mark_node, then that implies that we have already issued an
1284 error (earlier) for some bogus type specification, and in that case,
1285 it is rather pointless to harass the user with yet more error message
1286 about the same declaration, so just pretend the types match here. */
1287 if (TREE_TYPE (newdecl) == error_mark_node
1288 || TREE_TYPE (olddecl) == error_mark_node)
1289 return error_mark_node;
1291 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1292 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1294 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1295 && TREE_CODE (olddecl) != TEMPLATE_DECL
1296 && check_raw_literal_operator (olddecl))
1297 error ("literal operator template %q+D conflicts with"
1298 " raw literal operator %qD", newdecl, olddecl);
1299 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1300 && TREE_CODE (olddecl) == TEMPLATE_DECL
1301 && check_raw_literal_operator (newdecl))
1302 error ("raw literal operator %q+D conflicts with"
1303 " literal operator template %qD", newdecl, olddecl);
1306 if (DECL_P (olddecl)
1307 && TREE_CODE (newdecl) == FUNCTION_DECL
1308 && TREE_CODE (olddecl) == FUNCTION_DECL
1309 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1311 if (DECL_DECLARED_INLINE_P (newdecl)
1312 && DECL_UNINLINABLE (newdecl)
1313 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1314 /* Already warned elsewhere. */;
1315 else if (DECL_DECLARED_INLINE_P (olddecl)
1316 && DECL_UNINLINABLE (olddecl)
1317 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1318 /* Already warned. */;
1319 else if (DECL_DECLARED_INLINE_P (newdecl)
1320 && DECL_UNINLINABLE (olddecl)
1321 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1323 if (warning (OPT_Wattributes, "function %q+D redeclared as inline",
1324 newdecl))
1325 inform (DECL_SOURCE_LOCATION (olddecl),
1326 "previous declaration of %qD with attribute noinline",
1327 olddecl);
1329 else if (DECL_DECLARED_INLINE_P (olddecl)
1330 && DECL_UNINLINABLE (newdecl)
1331 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1333 if (warning (OPT_Wattributes, "function %q+D redeclared with "
1334 "attribute noinline", newdecl))
1335 inform (DECL_SOURCE_LOCATION (olddecl),
1336 "previous declaration of %qD was inline",
1337 olddecl);
1341 /* Check for redeclaration and other discrepancies. */
1342 if (TREE_CODE (olddecl) == FUNCTION_DECL
1343 && DECL_ARTIFICIAL (olddecl))
1345 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1346 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1348 /* Avoid warnings redeclaring built-ins which have not been
1349 explicitly declared. */
1350 if (DECL_ANTICIPATED (olddecl))
1351 return NULL_TREE;
1353 /* If you declare a built-in or predefined function name as static,
1354 the old definition is overridden, but optionally warn this was a
1355 bad choice of name. */
1356 if (! TREE_PUBLIC (newdecl))
1358 warning (OPT_Wshadow,
1359 DECL_BUILT_IN (olddecl)
1360 ? G_("shadowing built-in function %q#D")
1361 : G_("shadowing library function %q#D"), olddecl);
1362 /* Discard the old built-in function. */
1363 return NULL_TREE;
1365 /* If the built-in is not ansi, then programs can override
1366 it even globally without an error. */
1367 else if (! DECL_BUILT_IN (olddecl))
1368 warning (0, "library function %q#D redeclared as non-function %q#D",
1369 olddecl, newdecl);
1370 else
1371 error ("declaration of %q#D conflicts with built-in "
1372 "declaration %q#D", newdecl, olddecl);
1373 return NULL_TREE;
1375 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1377 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1378 error_at (DECL_SOURCE_LOCATION (newdecl),
1379 "redeclaration of %<pragma omp declare reduction%>");
1380 inform (DECL_SOURCE_LOCATION (olddecl),
1381 "previous %<pragma omp declare reduction%> declaration");
1382 return error_mark_node;
1384 else if (!types_match)
1386 /* Avoid warnings redeclaring built-ins which have not been
1387 explicitly declared. */
1388 if (DECL_ANTICIPATED (olddecl))
1390 /* Deal with fileptr_type_node. FILE type is not known
1391 at the time we create the builtins. */
1392 tree t1, t2;
1394 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1395 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1396 t1 || t2;
1397 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1398 if (!t1 || !t2)
1399 break;
1400 else if (TREE_VALUE (t2) == fileptr_type_node)
1402 tree t = TREE_VALUE (t1);
1404 if (TYPE_PTR_P (t)
1405 && TYPE_IDENTIFIER (TREE_TYPE (t))
1406 == get_identifier ("FILE")
1407 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1409 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1411 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1412 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1413 types_match = decls_match (newdecl, olddecl);
1414 if (types_match)
1415 return duplicate_decls (newdecl, olddecl,
1416 newdecl_is_friend);
1417 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1420 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1421 break;
1423 else if ((DECL_EXTERN_C_P (newdecl)
1424 && DECL_EXTERN_C_P (olddecl))
1425 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1426 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1428 /* A near match; override the builtin. */
1430 if (TREE_PUBLIC (newdecl))
1431 warning (0, "new declaration %q#D ambiguates built-in "
1432 "declaration %q#D", newdecl, olddecl);
1433 else
1434 warning (OPT_Wshadow,
1435 DECL_BUILT_IN (olddecl)
1436 ? G_("shadowing built-in function %q#D")
1437 : G_("shadowing library function %q#D"), olddecl);
1439 else
1440 /* Discard the old built-in function. */
1441 return NULL_TREE;
1443 /* Replace the old RTL to avoid problems with inlining. */
1444 COPY_DECL_RTL (newdecl, olddecl);
1446 /* Even if the types match, prefer the new declarations type for
1447 built-ins which have not been explicitly declared, for
1448 exception lists, etc... */
1449 else if (DECL_IS_BUILTIN (olddecl))
1451 tree type = TREE_TYPE (newdecl);
1452 tree attribs = (*targetm.merge_type_attributes)
1453 (TREE_TYPE (olddecl), type);
1455 type = cp_build_type_attribute_variant (type, attribs);
1456 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1459 /* If a function is explicitly declared "throw ()", propagate that to
1460 the corresponding builtin. */
1461 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1462 && DECL_ANTICIPATED (olddecl)
1463 && TREE_NOTHROW (newdecl)
1464 && !TREE_NOTHROW (olddecl))
1466 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1467 tree tmpdecl = builtin_decl_explicit (fncode);
1468 if (tmpdecl && tmpdecl != olddecl && types_match)
1469 TREE_NOTHROW (tmpdecl) = 1;
1472 /* Whether or not the builtin can throw exceptions has no
1473 bearing on this declarator. */
1474 TREE_NOTHROW (olddecl) = 0;
1476 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1478 /* If a builtin function is redeclared as `static', merge
1479 the declarations, but make the original one static. */
1480 DECL_THIS_STATIC (olddecl) = 1;
1481 TREE_PUBLIC (olddecl) = 0;
1483 /* Make the old declaration consistent with the new one so
1484 that all remnants of the builtin-ness of this function
1485 will be banished. */
1486 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1487 COPY_DECL_RTL (newdecl, olddecl);
1490 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1492 /* C++ Standard, 3.3, clause 4:
1493 "[Note: a namespace name or a class template name must be unique
1494 in its declarative region (7.3.2, clause 14). ]" */
1495 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1496 && TREE_CODE (newdecl) != NAMESPACE_DECL
1497 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1498 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1499 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1500 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1502 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1503 && TREE_CODE (newdecl) != TYPE_DECL)
1504 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1505 && TREE_CODE (olddecl) != TYPE_DECL))
1507 /* We do nothing special here, because C++ does such nasty
1508 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1509 get shadowed, and know that if we need to find a TYPE_DECL
1510 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1511 slot of the identifier. */
1512 return NULL_TREE;
1515 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1516 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1517 || (TREE_CODE (olddecl) == FUNCTION_DECL
1518 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1519 return NULL_TREE;
1522 error ("%q#D redeclared as different kind of symbol", newdecl);
1523 if (TREE_CODE (olddecl) == TREE_LIST)
1524 olddecl = TREE_VALUE (olddecl);
1525 inform (DECL_SOURCE_LOCATION (olddecl),
1526 "previous declaration %q#D", olddecl);
1528 return error_mark_node;
1530 else if (!types_match)
1532 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1533 /* These are certainly not duplicate declarations; they're
1534 from different scopes. */
1535 return NULL_TREE;
1537 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1539 /* The name of a class template may not be declared to refer to
1540 any other template, class, function, object, namespace, value,
1541 or type in the same scope. */
1542 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1543 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1545 error ("conflicting declaration of template %q#D", newdecl);
1546 inform (DECL_SOURCE_LOCATION (olddecl),
1547 "previous declaration %q#D", olddecl);
1548 return error_mark_node;
1550 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1551 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1552 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1553 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1554 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1555 DECL_TEMPLATE_PARMS (olddecl))
1556 /* Template functions can be disambiguated by
1557 return type. */
1558 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1559 TREE_TYPE (TREE_TYPE (olddecl))))
1561 error ("ambiguating new declaration %q#D", newdecl);
1562 inform (DECL_SOURCE_LOCATION (olddecl),
1563 "old declaration %q#D", olddecl);
1565 return NULL_TREE;
1567 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1569 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1571 error ("conflicting declaration of C function %q#D",
1572 newdecl);
1573 inform (DECL_SOURCE_LOCATION (olddecl),
1574 "previous declaration %q#D", olddecl);
1575 return NULL_TREE;
1577 /* For function versions, params and types match, but they
1578 are not ambiguous. */
1579 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1580 && !DECL_FUNCTION_VERSIONED (olddecl))
1581 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1582 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1584 error ("ambiguating new declaration of %q#D", newdecl);
1585 inform (DECL_SOURCE_LOCATION (olddecl),
1586 "old declaration %q#D", olddecl);
1587 return error_mark_node;
1589 else
1590 return NULL_TREE;
1592 else
1594 error ("conflicting declaration %q#D", newdecl);
1595 inform (DECL_SOURCE_LOCATION (olddecl),
1596 "previous declaration as %q#D", olddecl);
1597 return error_mark_node;
1600 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1601 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1602 && (!DECL_TEMPLATE_INFO (newdecl)
1603 || (DECL_TI_TEMPLATE (newdecl)
1604 != DECL_TI_TEMPLATE (olddecl))))
1605 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1606 && (!DECL_TEMPLATE_INFO (olddecl)
1607 || (DECL_TI_TEMPLATE (olddecl)
1608 != DECL_TI_TEMPLATE (newdecl))))))
1609 /* It's OK to have a template specialization and a non-template
1610 with the same type, or to have specializations of two
1611 different templates with the same type. Note that if one is a
1612 specialization, and the other is an instantiation of the same
1613 template, that we do not exit at this point. That situation
1614 can occur if we instantiate a template class, and then
1615 specialize one of its methods. This situation is valid, but
1616 the declarations must be merged in the usual way. */
1617 return NULL_TREE;
1618 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1619 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1620 && !DECL_USE_TEMPLATE (newdecl))
1621 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1622 && !DECL_USE_TEMPLATE (olddecl))))
1623 /* One of the declarations is a template instantiation, and the
1624 other is not a template at all. That's OK. */
1625 return NULL_TREE;
1626 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1628 /* In [namespace.alias] we have:
1630 In a declarative region, a namespace-alias-definition can be
1631 used to redefine a namespace-alias declared in that declarative
1632 region to refer only to the namespace to which it already
1633 refers.
1635 Therefore, if we encounter a second alias directive for the same
1636 alias, we can just ignore the second directive. */
1637 if (DECL_NAMESPACE_ALIAS (newdecl)
1638 && (DECL_NAMESPACE_ALIAS (newdecl)
1639 == DECL_NAMESPACE_ALIAS (olddecl)))
1640 return olddecl;
1641 /* [namespace.alias]
1643 A namespace-name or namespace-alias shall not be declared as
1644 the name of any other entity in the same declarative region.
1645 A namespace-name defined at global scope shall not be
1646 declared as the name of any other entity in any global scope
1647 of the program. */
1648 error ("conflicting declaration of namespace %qD", newdecl);
1649 inform (DECL_SOURCE_LOCATION (olddecl),
1650 "previous declaration of namespace %qD here", olddecl);
1651 return error_mark_node;
1653 else
1655 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1656 if (errmsg)
1658 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1659 if (DECL_NAME (olddecl) != NULL_TREE)
1660 inform (input_location,
1661 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1662 ? G_("%q+#D previously defined here")
1663 : G_("%q+#D previously declared here"), olddecl);
1664 return error_mark_node;
1666 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1667 && DECL_INITIAL (olddecl) != NULL_TREE
1668 && !prototype_p (TREE_TYPE (olddecl))
1669 && prototype_p (TREE_TYPE (newdecl)))
1671 /* Prototype decl follows defn w/o prototype. */
1672 if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1673 "prototype specified for %q#D", newdecl))
1674 inform (DECL_SOURCE_LOCATION (olddecl),
1675 "previous non-prototype definition here");
1677 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1678 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1680 /* [dcl.link]
1681 If two declarations of the same function or object
1682 specify different linkage-specifications ..., the program
1683 is ill-formed.... Except for functions with C++ linkage,
1684 a function declaration without a linkage specification
1685 shall not precede the first linkage specification for
1686 that function. A function can be declared without a
1687 linkage specification after an explicit linkage
1688 specification has been seen; the linkage explicitly
1689 specified in the earlier declaration is not affected by
1690 such a function declaration.
1692 DR 563 raises the question why the restrictions on
1693 functions should not also apply to objects. Older
1694 versions of G++ silently ignore the linkage-specification
1695 for this example:
1697 namespace N {
1698 extern int i;
1699 extern "C" int i;
1702 which is clearly wrong. Therefore, we now treat objects
1703 like functions. */
1704 if (current_lang_depth () == 0)
1706 /* There is no explicit linkage-specification, so we use
1707 the linkage from the previous declaration. */
1708 if (!DECL_LANG_SPECIFIC (newdecl))
1709 retrofit_lang_decl (newdecl);
1710 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1712 else
1714 error ("conflicting declaration of %q#D with %qL linkage",
1715 newdecl, DECL_LANGUAGE (newdecl));
1716 inform (DECL_SOURCE_LOCATION (olddecl),
1717 "previous declaration with %qL linkage",
1718 DECL_LANGUAGE (olddecl));
1722 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1724 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1726 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */
1727 if (DECL_FUNCTION_MEMBER_P (olddecl)
1728 && (/* grokfndecl passes member function templates too
1729 as FUNCTION_DECLs. */
1730 DECL_TEMPLATE_INFO (olddecl)
1731 /* C++11 8.3.6/6.
1732 Default arguments for a member function of a class
1733 template shall be specified on the initial declaration
1734 of the member function within the class template. */
1735 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1736 check_redeclaration_no_default_args (newdecl);
1737 else
1739 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1740 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1741 int i = 1;
1743 for (; t1 && t1 != void_list_node;
1744 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1745 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1747 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1748 TREE_PURPOSE (t2)))
1750 if (permerror (input_location,
1751 "default argument given for parameter "
1752 "%d of %q#D", i, newdecl))
1753 inform (DECL_SOURCE_LOCATION (olddecl),
1754 "previous specification in %q#D here",
1755 olddecl);
1757 else
1759 error ("default argument given for parameter %d "
1760 "of %q#D", i, newdecl);
1761 inform (DECL_SOURCE_LOCATION (olddecl),
1762 "previous specification in %q#D here",
1763 olddecl);
1770 /* Do not merge an implicit typedef with an explicit one. In:
1772 class A;
1774 typedef class A A __attribute__ ((foo));
1776 the attribute should apply only to the typedef. */
1777 if (TREE_CODE (olddecl) == TYPE_DECL
1778 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1779 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1780 return NULL_TREE;
1782 /* If new decl is `static' and an `extern' was seen previously,
1783 warn about it. */
1784 warn_extern_redeclared_static (newdecl, olddecl);
1786 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1787 return error_mark_node;
1789 /* We have committed to returning 1 at this point. */
1790 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1792 /* Now that functions must hold information normally held
1793 by field decls, there is extra work to do so that
1794 declaration information does not get destroyed during
1795 definition. */
1796 if (DECL_VINDEX (olddecl))
1797 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1798 if (DECL_CONTEXT (olddecl))
1799 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1800 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1801 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1802 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1803 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1804 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1805 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1806 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1807 SET_OVERLOADED_OPERATOR_CODE
1808 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1809 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1811 /* Optionally warn about more than one declaration for the same
1812 name, but don't warn about a function declaration followed by a
1813 definition. */
1814 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1815 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1816 /* Don't warn about extern decl followed by definition. */
1817 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1818 /* Don't warn about friends, let add_friend take care of it. */
1819 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1820 /* Don't warn about declaration followed by specialization. */
1821 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1822 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1824 if (warning (OPT_Wredundant_decls,
1825 "redundant redeclaration of %qD in same scope",
1826 newdecl))
1827 inform (DECL_SOURCE_LOCATION (olddecl),
1828 "previous declaration of %qD", olddecl);
1831 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1832 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1834 if (DECL_DELETED_FN (newdecl))
1836 error ("deleted definition of %qD", newdecl);
1837 inform (DECL_SOURCE_LOCATION (olddecl),
1838 "previous declaration of %qD", olddecl);
1840 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1844 /* Deal with C++: must preserve virtual function table size. */
1845 if (TREE_CODE (olddecl) == TYPE_DECL)
1847 tree newtype = TREE_TYPE (newdecl);
1848 tree oldtype = TREE_TYPE (olddecl);
1850 if (newtype != error_mark_node && oldtype != error_mark_node
1851 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1852 CLASSTYPE_FRIEND_CLASSES (newtype)
1853 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1855 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1858 /* Copy all the DECL_... slots specified in the new decl
1859 except for any that we copy here from the old type. */
1860 DECL_ATTRIBUTES (newdecl)
1861 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1863 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1865 tree old_result;
1866 tree new_result;
1867 old_result = DECL_TEMPLATE_RESULT (olddecl);
1868 new_result = DECL_TEMPLATE_RESULT (newdecl);
1869 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1870 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1871 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1872 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1874 DECL_ATTRIBUTES (old_result)
1875 = (*targetm.merge_decl_attributes) (old_result, new_result);
1877 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1879 /* Per C++11 8.3.6/4, default arguments cannot be added in later
1880 declarations of a function template. */
1881 check_redeclaration_no_default_args (newdecl);
1883 check_default_args (newdecl);
1885 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1886 && DECL_INITIAL (new_result))
1888 if (DECL_INITIAL (old_result))
1889 DECL_UNINLINABLE (old_result) = 1;
1890 else
1891 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1892 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1893 DECL_NOT_REALLY_EXTERN (old_result)
1894 = DECL_NOT_REALLY_EXTERN (new_result);
1895 DECL_INTERFACE_KNOWN (old_result)
1896 = DECL_INTERFACE_KNOWN (new_result);
1897 DECL_DECLARED_INLINE_P (old_result)
1898 = DECL_DECLARED_INLINE_P (new_result);
1899 DECL_DISREGARD_INLINE_LIMITS (old_result)
1900 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1903 else
1905 DECL_DECLARED_INLINE_P (old_result)
1906 |= DECL_DECLARED_INLINE_P (new_result);
1907 DECL_DISREGARD_INLINE_LIMITS (old_result)
1908 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1909 check_redeclaration_exception_specification (newdecl, olddecl);
1913 /* If the new declaration is a definition, update the file and
1914 line information on the declaration, and also make
1915 the old declaration the same definition. */
1916 if (DECL_INITIAL (new_result) != NULL_TREE)
1918 DECL_SOURCE_LOCATION (olddecl)
1919 = DECL_SOURCE_LOCATION (old_result)
1920 = DECL_SOURCE_LOCATION (newdecl);
1921 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1922 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1924 tree parm;
1925 DECL_ARGUMENTS (old_result)
1926 = DECL_ARGUMENTS (new_result);
1927 for (parm = DECL_ARGUMENTS (old_result); parm;
1928 parm = DECL_CHAIN (parm))
1929 DECL_CONTEXT (parm) = old_result;
1933 return olddecl;
1936 if (types_match)
1938 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1939 check_redeclaration_exception_specification (newdecl, olddecl);
1941 /* Automatically handles default parameters. */
1942 tree oldtype = TREE_TYPE (olddecl);
1943 tree newtype;
1945 /* For typedefs use the old type, as the new type's DECL_NAME points
1946 at newdecl, which will be ggc_freed. */
1947 if (TREE_CODE (newdecl) == TYPE_DECL)
1948 newtype = oldtype;
1949 else
1950 /* Merge the data types specified in the two decls. */
1951 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1953 if (VAR_P (newdecl))
1955 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1956 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1957 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1958 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1959 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1960 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1962 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1963 if (DECL_LANG_SPECIFIC (olddecl)
1964 && CP_DECL_THREADPRIVATE_P (olddecl))
1966 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1967 if (!DECL_LANG_SPECIFIC (newdecl))
1968 retrofit_lang_decl (newdecl);
1970 set_decl_tls_model (newdecl, DECL_TLS_MODEL (olddecl));
1971 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1975 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1977 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1978 check_default_args (newdecl);
1980 /* Lay the type out, unless already done. */
1981 if (! same_type_p (newtype, oldtype)
1982 && TREE_TYPE (newdecl) != error_mark_node
1983 && !(processing_template_decl && uses_template_parms (newdecl)))
1984 layout_type (TREE_TYPE (newdecl));
1986 if ((VAR_P (newdecl)
1987 || TREE_CODE (newdecl) == PARM_DECL
1988 || TREE_CODE (newdecl) == RESULT_DECL
1989 || TREE_CODE (newdecl) == FIELD_DECL
1990 || TREE_CODE (newdecl) == TYPE_DECL)
1991 && !(processing_template_decl && uses_template_parms (newdecl)))
1992 layout_decl (newdecl, 0);
1994 /* Merge the type qualifiers. */
1995 if (TREE_READONLY (newdecl))
1996 TREE_READONLY (olddecl) = 1;
1997 if (TREE_THIS_VOLATILE (newdecl))
1998 TREE_THIS_VOLATILE (olddecl) = 1;
1999 if (TREE_NOTHROW (newdecl))
2000 TREE_NOTHROW (olddecl) = 1;
2002 /* Merge deprecatedness. */
2003 if (TREE_DEPRECATED (newdecl))
2004 TREE_DEPRECATED (olddecl) = 1;
2006 /* Preserve function specific target and optimization options */
2007 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2009 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2010 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2011 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2012 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2014 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2015 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2016 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2017 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2020 /* Merge the initialization information. */
2021 if (DECL_INITIAL (newdecl) == NULL_TREE
2022 && DECL_INITIAL (olddecl) != NULL_TREE)
2024 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2025 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2026 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2028 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2029 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2033 /* Merge the section attribute.
2034 We want to issue an error if the sections conflict but that must be
2035 done later in decl_attributes since we are called before attributes
2036 are assigned. */
2037 if ((DECL_EXTERNAL (olddecl) || TREE_PUBLIC (olddecl) || TREE_STATIC (olddecl))
2038 && DECL_SECTION_NAME (newdecl) == NULL
2039 && DECL_SECTION_NAME (olddecl) != NULL)
2040 set_decl_section_name (newdecl, DECL_SECTION_NAME (olddecl));
2042 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2044 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2045 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2046 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2047 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2048 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2049 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2050 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2051 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2052 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2053 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2054 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2055 /* Keep the old RTL. */
2056 COPY_DECL_RTL (olddecl, newdecl);
2058 else if (VAR_P (newdecl)
2059 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2061 /* Keep the old RTL. We cannot keep the old RTL if the old
2062 declaration was for an incomplete object and the new
2063 declaration is not since many attributes of the RTL will
2064 change. */
2065 COPY_DECL_RTL (olddecl, newdecl);
2068 /* If cannot merge, then use the new type and qualifiers,
2069 and don't preserve the old rtl. */
2070 else
2072 /* Clean out any memory we had of the old declaration. */
2073 tree oldstatic = value_member (olddecl, static_aggregates);
2074 if (oldstatic)
2075 TREE_VALUE (oldstatic) = error_mark_node;
2077 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2078 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2079 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2080 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2083 /* Merge the storage class information. */
2084 merge_weak (newdecl, olddecl);
2086 if ((TREE_CODE (olddecl) == FUNCTION_DECL || TREE_CODE (olddecl) == VAR_DECL)
2087 && (DECL_EXTERNAL (olddecl) || TREE_PUBLIC (olddecl) || TREE_STATIC (olddecl))
2088 && DECL_ONE_ONLY (olddecl))
2090 struct symtab_node *symbol;
2091 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2092 symbol = cgraph_node::get_create (newdecl);
2093 else
2094 symbol = varpool_node::get_create (newdecl);
2095 symbol->set_comdat_group (symtab_node::get
2096 (olddecl)->get_comdat_group ());
2099 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2100 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2101 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2102 if (! DECL_EXTERNAL (olddecl))
2103 DECL_EXTERNAL (newdecl) = 0;
2105 new_template_info = NULL_TREE;
2106 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2108 bool new_redefines_gnu_inline = false;
2110 if (new_defines_function
2111 && ((DECL_INTERFACE_KNOWN (olddecl)
2112 && TREE_CODE (olddecl) == FUNCTION_DECL)
2113 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2114 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2115 == FUNCTION_DECL))))
2117 tree fn = olddecl;
2119 if (TREE_CODE (fn) == TEMPLATE_DECL)
2120 fn = DECL_TEMPLATE_RESULT (olddecl);
2122 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2125 if (!new_redefines_gnu_inline)
2127 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2128 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2129 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2131 DECL_TEMPLATE_INSTANTIATED (newdecl)
2132 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2133 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2135 /* If the OLDDECL is an instantiation and/or specialization,
2136 then the NEWDECL must be too. But, it may not yet be marked
2137 as such if the caller has created NEWDECL, but has not yet
2138 figured out that it is a redeclaration. */
2139 if (!DECL_USE_TEMPLATE (newdecl))
2140 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2142 /* Don't really know how much of the language-specific
2143 values we should copy from old to new. */
2144 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2145 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2146 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2147 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2149 if (LANG_DECL_HAS_MIN (newdecl))
2151 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2152 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2153 if (DECL_TEMPLATE_INFO (newdecl))
2154 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2155 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2157 /* Only functions have these fields. */
2158 if (DECL_DECLARES_FUNCTION_P (newdecl))
2160 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2161 olddecl_friend = DECL_FRIEND_P (olddecl);
2162 hidden_friend = (DECL_ANTICIPATED (olddecl)
2163 && DECL_HIDDEN_FRIEND_P (olddecl)
2164 && newdecl_is_friend);
2165 DECL_BEFRIENDING_CLASSES (newdecl)
2166 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2167 DECL_BEFRIENDING_CLASSES (olddecl));
2168 /* DECL_THUNKS is only valid for virtual functions,
2169 otherwise it is a DECL_FRIEND_CONTEXT. */
2170 if (DECL_VIRTUAL_P (newdecl))
2171 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2173 /* Only variables have this field. */
2174 else if (VAR_P (newdecl)
2175 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2176 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2179 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2181 tree parm;
2183 /* Merge parameter attributes. */
2184 tree oldarg, newarg;
2185 for (oldarg = DECL_ARGUMENTS(olddecl),
2186 newarg = DECL_ARGUMENTS(newdecl);
2187 oldarg && newarg;
2188 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2189 DECL_ATTRIBUTES (newarg)
2190 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2191 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2194 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2195 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2197 /* If newdecl is not a specialization, then it is not a
2198 template-related function at all. And that means that we
2199 should have exited above, returning 0. */
2200 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2202 if (DECL_ODR_USED (olddecl))
2203 /* From [temp.expl.spec]:
2205 If a template, a member template or the member of a class
2206 template is explicitly specialized then that
2207 specialization shall be declared before the first use of
2208 that specialization that would cause an implicit
2209 instantiation to take place, in every translation unit in
2210 which such a use occurs. */
2211 error ("explicit specialization of %qD after first use",
2212 olddecl);
2214 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2215 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2216 && DECL_DECLARED_INLINE_P (newdecl));
2218 /* Don't propagate visibility from the template to the
2219 specialization here. We'll do that in determine_visibility if
2220 appropriate. */
2221 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2223 /* [temp.expl.spec/14] We don't inline explicit specialization
2224 just because the primary template says so. */
2226 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2227 the always_inline attribute. */
2228 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2229 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2231 if (DECL_DECLARED_INLINE_P (newdecl))
2232 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2233 else
2234 DECL_ATTRIBUTES (newdecl)
2235 = remove_attribute ("always_inline",
2236 DECL_ATTRIBUTES (newdecl));
2239 else if (new_defines_function && DECL_INITIAL (olddecl))
2241 /* Never inline re-defined extern inline functions.
2242 FIXME: this could be better handled by keeping both
2243 function as separate declarations. */
2244 DECL_UNINLINABLE (newdecl) = 1;
2246 else
2248 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2249 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2251 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2253 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2254 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2256 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2257 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2258 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2259 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2262 /* Preserve abstractness on cloned [cd]tors. */
2263 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2265 /* Update newdecl's parms to point at olddecl. */
2266 for (parm = DECL_ARGUMENTS (newdecl); parm;
2267 parm = DECL_CHAIN (parm))
2268 DECL_CONTEXT (parm) = olddecl;
2270 if (! types_match)
2272 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2273 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2274 COPY_DECL_RTL (newdecl, olddecl);
2276 if (! types_match || new_defines_function)
2278 /* These need to be copied so that the names are available.
2279 Note that if the types do match, we'll preserve inline
2280 info and other bits, but if not, we won't. */
2281 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2282 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2284 /* If redeclaring a builtin function, it stays built in
2285 if newdecl is a gnu_inline definition, or if newdecl is just
2286 a declaration. */
2287 if (DECL_BUILT_IN (olddecl)
2288 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2290 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2291 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2292 /* If we're keeping the built-in definition, keep the rtl,
2293 regardless of declaration matches. */
2294 COPY_DECL_RTL (olddecl, newdecl);
2295 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2297 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2298 switch (fncode)
2300 /* If a compatible prototype of these builtin functions
2301 is seen, assume the runtime implements it with the
2302 expected semantics. */
2303 case BUILT_IN_STPCPY:
2304 if (builtin_decl_explicit_p (fncode))
2305 set_builtin_decl_implicit_p (fncode, true);
2306 break;
2307 default:
2308 break;
2312 if (new_defines_function)
2313 /* If defining a function declared with other language
2314 linkage, use the previously declared language linkage. */
2315 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2316 else if (types_match)
2318 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2319 /* Don't clear out the arguments if we're just redeclaring a
2320 function. */
2321 if (DECL_ARGUMENTS (olddecl))
2322 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2325 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2326 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2328 /* Now preserve various other info from the definition. */
2329 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2330 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2331 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2332 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2334 /* Warn about conflicting visibility specifications. */
2335 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2336 && DECL_VISIBILITY_SPECIFIED (newdecl)
2337 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2339 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2340 "%qD: visibility attribute ignored because it "
2341 "conflicts with previous declaration", newdecl))
2342 inform (DECL_SOURCE_LOCATION (olddecl),
2343 "previous declaration of %qD", olddecl);
2345 /* Choose the declaration which specified visibility. */
2346 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2348 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2349 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2351 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2352 so keep this behavior. */
2353 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2355 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2356 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2358 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2359 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2361 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2362 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2364 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2365 if (TREE_CODE (newdecl) == FIELD_DECL)
2366 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2368 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2369 with that from NEWDECL below. */
2370 if (DECL_LANG_SPECIFIC (olddecl))
2372 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2373 != DECL_LANG_SPECIFIC (newdecl));
2374 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2377 /* Merge the USED information. */
2378 if (TREE_USED (olddecl))
2379 TREE_USED (newdecl) = 1;
2380 else if (TREE_USED (newdecl))
2381 TREE_USED (olddecl) = 1;
2382 if (VAR_P (newdecl))
2384 if (DECL_READ_P (olddecl))
2385 DECL_READ_P (newdecl) = 1;
2386 else if (DECL_READ_P (newdecl))
2387 DECL_READ_P (olddecl) = 1;
2389 if (DECL_PRESERVE_P (olddecl))
2390 DECL_PRESERVE_P (newdecl) = 1;
2391 else if (DECL_PRESERVE_P (newdecl))
2392 DECL_PRESERVE_P (olddecl) = 1;
2394 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2395 to olddecl and deleted. */
2396 if (TREE_CODE (newdecl) == FUNCTION_DECL
2397 && DECL_FUNCTION_VERSIONED (olddecl))
2399 /* Set the flag for newdecl so that it gets copied to olddecl. */
2400 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2401 /* newdecl will be purged after copying to olddecl and is no longer
2402 a version. */
2403 cgraph_node::delete_function_version (newdecl);
2406 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2408 int function_size;
2409 struct symtab_node *snode = symtab_node::get (olddecl);
2411 function_size = sizeof (struct tree_decl_common);
2413 memcpy ((char *) olddecl + sizeof (struct tree_common),
2414 (char *) newdecl + sizeof (struct tree_common),
2415 function_size - sizeof (struct tree_common));
2417 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2418 (char *) newdecl + sizeof (struct tree_decl_common),
2419 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2421 /* Preserve symtab node mapping. */
2422 olddecl->decl_with_vis.symtab_node = snode;
2424 if (new_template_info)
2425 /* If newdecl is a template instantiation, it is possible that
2426 the following sequence of events has occurred:
2428 o A friend function was declared in a class template. The
2429 class template was instantiated.
2431 o The instantiation of the friend declaration was
2432 recorded on the instantiation list, and is newdecl.
2434 o Later, however, instantiate_class_template called pushdecl
2435 on the newdecl to perform name injection. But, pushdecl in
2436 turn called duplicate_decls when it discovered that another
2437 declaration of a global function with the same name already
2438 existed.
2440 o Here, in duplicate_decls, we decided to clobber newdecl.
2442 If we're going to do that, we'd better make sure that
2443 olddecl, and not newdecl, is on the list of
2444 instantiations so that if we try to do the instantiation
2445 again we won't get the clobbered declaration. */
2446 reregister_specialization (newdecl,
2447 new_template_info,
2448 olddecl);
2450 else
2452 size_t size = tree_code_size (TREE_CODE (olddecl));
2454 memcpy ((char *) olddecl + sizeof (struct tree_common),
2455 (char *) newdecl + sizeof (struct tree_common),
2456 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2457 switch (TREE_CODE (olddecl))
2459 case LABEL_DECL:
2460 case VAR_DECL:
2461 case RESULT_DECL:
2462 case PARM_DECL:
2463 case FIELD_DECL:
2464 case TYPE_DECL:
2465 case CONST_DECL:
2467 struct symtab_node *snode = NULL;
2469 if (TREE_CODE (olddecl) == VAR_DECL
2470 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl) || DECL_EXTERNAL (olddecl)))
2471 snode = symtab_node::get (olddecl);
2472 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2473 (char *) newdecl + sizeof (struct tree_decl_common),
2474 size - sizeof (struct tree_decl_common)
2475 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2476 if (TREE_CODE (olddecl) == VAR_DECL)
2477 olddecl->decl_with_vis.symtab_node = snode;
2479 break;
2480 default:
2481 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2482 (char *) newdecl + sizeof (struct tree_decl_common),
2483 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2484 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2485 break;
2488 DECL_UID (olddecl) = olddecl_uid;
2489 if (olddecl_friend)
2490 DECL_FRIEND_P (olddecl) = 1;
2491 if (hidden_friend)
2493 DECL_ANTICIPATED (olddecl) = 1;
2494 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2497 /* NEWDECL contains the merged attribute lists.
2498 Update OLDDECL to be the same. */
2499 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2501 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2502 so that encode_section_info has a chance to look at the new decl
2503 flags and attributes. */
2504 if (DECL_RTL_SET_P (olddecl)
2505 && (TREE_CODE (olddecl) == FUNCTION_DECL
2506 || (VAR_P (olddecl)
2507 && TREE_STATIC (olddecl))))
2508 make_decl_rtl (olddecl);
2510 /* The NEWDECL will no longer be needed. Because every out-of-class
2511 declaration of a member results in a call to duplicate_decls,
2512 freeing these nodes represents in a significant savings.
2514 Before releasing the node, be sore to remove function from symbol
2515 table that might have been inserted there to record comdat group.
2516 Be sure to however do not free DECL_STRUCT_FUNCTION becuase this
2517 structure is shared in between newdecl and oldecl. */
2518 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2519 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2520 if (TREE_CODE (newdecl) == FUNCTION_DECL
2521 || TREE_CODE (newdecl) == VAR_DECL)
2523 struct symtab_node *snode = symtab_node::get (newdecl);
2524 if (snode)
2525 snode->remove ();
2527 ggc_free (newdecl);
2529 return olddecl;
2532 /* Return zero if the declaration NEWDECL is valid
2533 when the declaration OLDDECL (assumed to be for the same name)
2534 has already been seen.
2535 Otherwise return an error message format string with a %s
2536 where the identifier should go. */
2538 static const char *
2539 redeclaration_error_message (tree newdecl, tree olddecl)
2541 if (TREE_CODE (newdecl) == TYPE_DECL)
2543 /* Because C++ can put things into name space for free,
2544 constructs like "typedef struct foo { ... } foo"
2545 would look like an erroneous redeclaration. */
2546 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2547 return NULL;
2548 else
2549 return G_("redefinition of %q#D");
2551 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2553 /* If this is a pure function, its olddecl will actually be
2554 the original initialization to `0' (which we force to call
2555 abort()). Don't complain about redefinition in this case. */
2556 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2557 && DECL_INITIAL (olddecl) == NULL_TREE)
2558 return NULL;
2560 /* If both functions come from different namespaces, this is not
2561 a redeclaration - this is a conflict with a used function. */
2562 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2563 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2564 && ! decls_match (olddecl, newdecl))
2565 return G_("%qD conflicts with used function");
2567 /* We'll complain about linkage mismatches in
2568 warn_extern_redeclared_static. */
2570 /* Defining the same name twice is no good. */
2571 if (DECL_INITIAL (olddecl) != NULL_TREE
2572 && DECL_INITIAL (newdecl) != NULL_TREE)
2574 if (DECL_NAME (olddecl) == NULL_TREE)
2575 return G_("%q#D not declared in class");
2576 else if (!GNU_INLINE_P (olddecl)
2577 || GNU_INLINE_P (newdecl))
2578 return G_("redefinition of %q#D");
2581 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2583 bool olda = GNU_INLINE_P (olddecl);
2584 bool newa = GNU_INLINE_P (newdecl);
2586 if (olda != newa)
2588 if (newa)
2589 return G_("%q+D redeclared inline with "
2590 "%<gnu_inline%> attribute");
2591 else
2592 return G_("%q+D redeclared inline without "
2593 "%<gnu_inline%> attribute");
2597 check_abi_tag_redeclaration
2598 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2599 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2601 return NULL;
2603 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2605 tree nt, ot;
2607 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2609 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2610 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2611 return G_("redefinition of %q#D");
2612 return NULL;
2615 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2616 || (DECL_TEMPLATE_RESULT (newdecl)
2617 == DECL_TEMPLATE_RESULT (olddecl)))
2618 return NULL;
2620 nt = DECL_TEMPLATE_RESULT (newdecl);
2621 if (DECL_TEMPLATE_INFO (nt))
2622 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2623 ot = DECL_TEMPLATE_RESULT (olddecl);
2624 if (DECL_TEMPLATE_INFO (ot))
2625 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2626 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2627 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2628 return G_("redefinition of %q#D");
2630 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2632 bool olda = GNU_INLINE_P (ot);
2633 bool newa = GNU_INLINE_P (nt);
2635 if (olda != newa)
2637 if (newa)
2638 return G_("%q+D redeclared inline with "
2639 "%<gnu_inline%> attribute");
2640 else
2641 return G_("%q+D redeclared inline without "
2642 "%<gnu_inline%> attribute");
2646 /* Core issue #226 (C++0x):
2648 If a friend function template declaration specifies a
2649 default template-argument, that declaration shall be a
2650 definition and shall be the only declaration of the
2651 function template in the translation unit. */
2652 if ((cxx_dialect != cxx98)
2653 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2654 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2655 /*is_primary=*/true,
2656 /*is_partial=*/false,
2657 /*is_friend_decl=*/2))
2658 return G_("redeclaration of friend %q#D "
2659 "may not have default template arguments");
2661 return NULL;
2663 else if (VAR_P (newdecl)
2664 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2665 && (! DECL_LANG_SPECIFIC (olddecl)
2666 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2667 || DECL_THREAD_LOCAL_P (newdecl)))
2669 /* Only variables can be thread-local, and all declarations must
2670 agree on this property. */
2671 if (DECL_THREAD_LOCAL_P (newdecl))
2672 return G_("thread-local declaration of %q#D follows "
2673 "non-thread-local declaration");
2674 else
2675 return G_("non-thread-local declaration of %q#D follows "
2676 "thread-local declaration");
2678 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2680 /* The objects have been declared at namespace scope. If either
2681 is a member of an anonymous union, then this is an invalid
2682 redeclaration. For example:
2684 int i;
2685 union { int i; };
2687 is invalid. */
2688 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2689 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2690 return G_("redeclaration of %q#D");
2691 /* If at least one declaration is a reference, there is no
2692 conflict. For example:
2694 int i = 3;
2695 extern int i;
2697 is valid. */
2698 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2699 return NULL;
2700 /* Reject two definitions. */
2701 return G_("redefinition of %q#D");
2703 else
2705 /* Objects declared with block scope: */
2706 /* Reject two definitions, and reject a definition
2707 together with an external reference. */
2708 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2709 return G_("redeclaration of %q#D");
2710 return NULL;
2714 /* Hash and equality functions for the named_label table. */
2716 hashval_t
2717 named_label_hasher::hash (named_label_entry *ent)
2719 return DECL_UID (ent->label_decl);
2722 bool
2723 named_label_hasher::equal (named_label_entry *a, named_label_entry *b)
2725 return a->label_decl == b->label_decl;
2728 /* Create a new label, named ID. */
2730 static tree
2731 make_label_decl (tree id, int local_p)
2733 struct named_label_entry *ent;
2734 tree decl;
2736 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2738 DECL_CONTEXT (decl) = current_function_decl;
2739 DECL_MODE (decl) = VOIDmode;
2740 C_DECLARED_LABEL_FLAG (decl) = local_p;
2742 /* Say where one reference is to the label, for the sake of the
2743 error if it is not defined. */
2744 DECL_SOURCE_LOCATION (decl) = input_location;
2746 /* Record the fact that this identifier is bound to this label. */
2747 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2749 /* Create the label htab for the function on demand. */
2750 if (!named_labels)
2751 named_labels = hash_table<named_label_hasher>::create_ggc (13);
2753 /* Record this label on the list of labels used in this function.
2754 We do this before calling make_label_decl so that we get the
2755 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2756 ent = ggc_cleared_alloc<named_label_entry> ();
2757 ent->label_decl = decl;
2759 named_label_entry **slot = named_labels->find_slot (ent, INSERT);
2760 gcc_assert (*slot == NULL);
2761 *slot = ent;
2763 return decl;
2766 /* Look for a label named ID in the current function. If one cannot
2767 be found, create one. (We keep track of used, but undefined,
2768 labels, and complain about them at the end of a function.) */
2770 static tree
2771 lookup_label_1 (tree id)
2773 tree decl;
2775 /* You can't use labels at global scope. */
2776 if (current_function_decl == NULL_TREE)
2778 error ("label %qE referenced outside of any function", id);
2779 return NULL_TREE;
2782 /* See if we've already got this label. */
2783 decl = IDENTIFIER_LABEL_VALUE (id);
2784 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2785 return decl;
2787 decl = make_label_decl (id, /*local_p=*/0);
2788 return decl;
2791 /* Wrapper for lookup_label_1. */
2793 tree
2794 lookup_label (tree id)
2796 tree ret;
2797 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2798 ret = lookup_label_1 (id);
2799 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2800 return ret;
2803 /* Declare a local label named ID. */
2805 tree
2806 declare_local_label (tree id)
2808 tree decl;
2809 cp_label_binding bind;
2811 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2812 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2813 bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
2815 decl = make_label_decl (id, /*local_p=*/1);
2816 bind.label = decl;
2817 vec_safe_push (current_binding_level->shadowed_labels, bind);
2819 return decl;
2822 /* Returns nonzero if it is ill-formed to jump past the declaration of
2823 DECL. Returns 2 if it's also a real problem. */
2825 static int
2826 decl_jump_unsafe (tree decl)
2828 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2829 with automatic storage duration is not in scope to a point where it is
2830 in scope is ill-formed unless the variable has scalar type, class type
2831 with a trivial default constructor and a trivial destructor, a
2832 cv-qualified version of one of these types, or an array of one of the
2833 preceding types and is declared without an initializer (8.5). */
2834 tree type = TREE_TYPE (decl);
2836 if (!VAR_P (decl) || TREE_STATIC (decl)
2837 || type == error_mark_node)
2838 return 0;
2840 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
2841 || variably_modified_type_p (type, NULL_TREE))
2842 return 2;
2844 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2845 return 1;
2847 return 0;
2850 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2852 static void
2853 identify_goto (tree decl, const location_t *locus)
2855 if (decl)
2856 permerror (input_location, "jump to label %qD", decl);
2857 else
2858 permerror (input_location, "jump to case label");
2859 if (locus)
2860 permerror (*locus, " from here");
2863 /* Check that a single previously seen jump to a newly defined label
2864 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2865 the jump context; NAMES are the names in scope in LEVEL at the jump
2866 context; LOCUS is the source position of the jump or 0. Returns
2867 true if all is well. */
2869 static bool
2870 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2871 bool exited_omp, const location_t *locus)
2873 cp_binding_level *b;
2874 bool identified = false, saw_eh = false, saw_omp = false;
2876 if (exited_omp)
2878 identify_goto (decl, locus);
2879 error (" exits OpenMP structured block");
2880 identified = saw_omp = true;
2883 for (b = current_binding_level; b ; b = b->level_chain)
2885 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2887 for (new_decls = b->names; new_decls != old_decls;
2888 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2889 : TREE_CHAIN (new_decls)))
2891 int problem = decl_jump_unsafe (new_decls);
2892 if (! problem)
2893 continue;
2895 if (!identified)
2897 identify_goto (decl, locus);
2898 identified = true;
2900 if (problem > 1)
2901 error (" crosses initialization of %q+#D", new_decls);
2902 else
2903 permerror (input_location, " enters scope of %q+#D which has "
2904 "non-trivial destructor", new_decls);
2907 if (b == level)
2908 break;
2909 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2911 if (!identified)
2913 identify_goto (decl, locus);
2914 identified = true;
2916 if (b->kind == sk_try)
2917 error (" enters try block");
2918 else
2919 error (" enters catch block");
2920 saw_eh = true;
2922 if (b->kind == sk_omp && !saw_omp)
2924 if (!identified)
2926 identify_goto (decl, locus);
2927 identified = true;
2929 error (" enters OpenMP structured block");
2930 saw_omp = true;
2934 return !identified;
2937 static void
2938 check_previous_goto (tree decl, struct named_label_use_entry *use)
2940 check_previous_goto_1 (decl, use->binding_level,
2941 use->names_in_scope, use->in_omp_scope,
2942 &use->o_goto_locus);
2945 static bool
2946 check_switch_goto (cp_binding_level* level)
2948 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2951 /* Check that a new jump to a label DECL is OK. Called by
2952 finish_goto_stmt. */
2954 void
2955 check_goto (tree decl)
2957 struct named_label_entry *ent, dummy;
2958 bool saw_catch = false, identified = false;
2959 tree bad;
2960 unsigned ix;
2962 /* We can't know where a computed goto is jumping.
2963 So we assume that it's OK. */
2964 if (TREE_CODE (decl) != LABEL_DECL)
2965 return;
2967 /* We didn't record any information about this label when we created it,
2968 and there's not much point since it's trivial to analyze as a return. */
2969 if (decl == cdtor_label)
2970 return;
2972 dummy.label_decl = decl;
2973 ent = named_labels->find (&dummy);
2974 gcc_assert (ent != NULL);
2976 /* If the label hasn't been defined yet, defer checking. */
2977 if (! DECL_INITIAL (decl))
2979 struct named_label_use_entry *new_use;
2981 /* Don't bother creating another use if the last goto had the
2982 same data, and will therefore create the same set of errors. */
2983 if (ent->uses
2984 && ent->uses->names_in_scope == current_binding_level->names)
2985 return;
2987 new_use = ggc_alloc<named_label_use_entry> ();
2988 new_use->binding_level = current_binding_level;
2989 new_use->names_in_scope = current_binding_level->names;
2990 new_use->o_goto_locus = input_location;
2991 new_use->in_omp_scope = false;
2993 new_use->next = ent->uses;
2994 ent->uses = new_use;
2995 return;
2998 if (ent->in_try_scope || ent->in_catch_scope
2999 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3001 permerror (input_location, "jump to label %q+D", decl);
3002 permerror (input_location, " from here");
3003 identified = true;
3006 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3008 int u = decl_jump_unsafe (bad);
3010 if (u > 1 && DECL_ARTIFICIAL (bad))
3012 /* Can't skip init of __exception_info. */
3013 error_at (DECL_SOURCE_LOCATION (bad), " enters catch block");
3014 saw_catch = true;
3016 else if (u > 1)
3017 error (" skips initialization of %q+#D", bad);
3018 else
3019 permerror (input_location, " enters scope of %q+#D which has "
3020 "non-trivial destructor", bad);
3023 if (ent->in_try_scope)
3024 error (" enters try block");
3025 else if (ent->in_catch_scope && !saw_catch)
3026 error (" enters catch block");
3028 if (ent->in_omp_scope)
3029 error (" enters OpenMP structured block");
3030 else if (flag_openmp)
3032 cp_binding_level *b;
3033 for (b = current_binding_level; b ; b = b->level_chain)
3035 if (b == ent->binding_level)
3036 break;
3037 if (b->kind == sk_omp)
3039 if (!identified)
3041 permerror (input_location, "jump to label %q+D", decl);
3042 permerror (input_location, " from here");
3043 identified = true;
3045 error (" exits OpenMP structured block");
3046 break;
3052 /* Check that a return is ok wrt OpenMP structured blocks.
3053 Called by finish_return_stmt. Returns true if all is well. */
3055 bool
3056 check_omp_return (void)
3058 cp_binding_level *b;
3059 for (b = current_binding_level; b ; b = b->level_chain)
3060 if (b->kind == sk_omp)
3062 error ("invalid exit from OpenMP structured block");
3063 return false;
3065 else if (b->kind == sk_function_parms)
3066 break;
3067 return true;
3070 /* Define a label, specifying the location in the source file.
3071 Return the LABEL_DECL node for the label. */
3073 static tree
3074 define_label_1 (location_t location, tree name)
3076 struct named_label_entry *ent, dummy;
3077 cp_binding_level *p;
3078 tree decl;
3080 decl = lookup_label (name);
3082 dummy.label_decl = decl;
3083 ent = named_labels->find (&dummy);
3084 gcc_assert (ent != NULL);
3086 /* After labels, make any new cleanups in the function go into their
3087 own new (temporary) binding contour. */
3088 for (p = current_binding_level;
3089 p->kind != sk_function_parms;
3090 p = p->level_chain)
3091 p->more_cleanups_ok = 0;
3093 if (name == get_identifier ("wchar_t"))
3094 permerror (input_location, "label named wchar_t");
3096 if (DECL_INITIAL (decl) != NULL_TREE)
3098 error ("duplicate label %qD", decl);
3099 return error_mark_node;
3101 else
3103 struct named_label_use_entry *use;
3105 /* Mark label as having been defined. */
3106 DECL_INITIAL (decl) = error_mark_node;
3107 /* Say where in the source. */
3108 DECL_SOURCE_LOCATION (decl) = location;
3110 ent->binding_level = current_binding_level;
3111 ent->names_in_scope = current_binding_level->names;
3113 for (use = ent->uses; use ; use = use->next)
3114 check_previous_goto (decl, use);
3115 ent->uses = NULL;
3118 return decl;
3121 /* Wrapper for define_label_1. */
3123 tree
3124 define_label (location_t location, tree name)
3126 tree ret;
3127 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3128 ret = define_label_1 (location, name);
3129 timevar_cond_stop (TV_NAME_LOOKUP, running);
3130 return ret;
3134 struct cp_switch
3136 cp_binding_level *level;
3137 struct cp_switch *next;
3138 /* The SWITCH_STMT being built. */
3139 tree switch_stmt;
3140 /* A splay-tree mapping the low element of a case range to the high
3141 element, or NULL_TREE if there is no high element. Used to
3142 determine whether or not a new case label duplicates an old case
3143 label. We need a tree, rather than simply a hash table, because
3144 of the GNU case range extension. */
3145 splay_tree cases;
3148 /* A stack of the currently active switch statements. The innermost
3149 switch statement is on the top of the stack. There is no need to
3150 mark the stack for garbage collection because it is only active
3151 during the processing of the body of a function, and we never
3152 collect at that point. */
3154 static struct cp_switch *switch_stack;
3156 /* Called right after a switch-statement condition is parsed.
3157 SWITCH_STMT is the switch statement being parsed. */
3159 void
3160 push_switch (tree switch_stmt)
3162 struct cp_switch *p = XNEW (struct cp_switch);
3163 p->level = current_binding_level;
3164 p->next = switch_stack;
3165 p->switch_stmt = switch_stmt;
3166 p->cases = splay_tree_new (case_compare, NULL, NULL);
3167 switch_stack = p;
3170 void
3171 pop_switch (void)
3173 struct cp_switch *cs = switch_stack;
3174 location_t switch_location;
3176 /* Emit warnings as needed. */
3177 switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3178 if (!processing_template_decl)
3179 c_do_switch_warnings (cs->cases, switch_location,
3180 SWITCH_STMT_TYPE (cs->switch_stmt),
3181 SWITCH_STMT_COND (cs->switch_stmt));
3183 splay_tree_delete (cs->cases);
3184 switch_stack = switch_stack->next;
3185 free (cs);
3188 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3189 condition. Note that if TYPE and VALUE are already integral we don't
3190 really do the conversion because the language-independent
3191 warning/optimization code will work better that way. */
3193 static tree
3194 case_conversion (tree type, tree value)
3196 if (value == NULL_TREE)
3197 return value;
3199 if (cxx_dialect >= cxx11
3200 && (SCOPED_ENUM_P (type)
3201 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3203 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3204 type = type_promotes_to (type);
3205 value = (perform_implicit_conversion_flags
3206 (type, value, tf_warning_or_error,
3207 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3209 return cxx_constant_value (value);
3212 /* Note that we've seen a definition of a case label, and complain if this
3213 is a bad place for one. */
3215 tree
3216 finish_case_label (location_t loc, tree low_value, tree high_value)
3218 tree cond, r;
3219 cp_binding_level *p;
3220 tree type;
3222 if (processing_template_decl)
3224 tree label;
3226 /* For templates, just add the case label; we'll do semantic
3227 analysis at instantiation-time. */
3228 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3229 return add_stmt (build_case_label (low_value, high_value, label));
3232 /* Find the condition on which this switch statement depends. */
3233 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3234 if (cond && TREE_CODE (cond) == TREE_LIST)
3235 cond = TREE_VALUE (cond);
3237 if (!check_switch_goto (switch_stack->level))
3238 return error_mark_node;
3240 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3242 low_value = case_conversion (type, low_value);
3243 high_value = case_conversion (type, high_value);
3245 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3246 low_value, high_value);
3248 /* After labels, make any new cleanups in the function go into their
3249 own new (temporary) binding contour. */
3250 for (p = current_binding_level;
3251 p->kind != sk_function_parms;
3252 p = p->level_chain)
3253 p->more_cleanups_ok = 0;
3255 return r;
3258 struct typename_info {
3259 tree scope;
3260 tree name;
3261 tree template_id;
3262 bool enum_p;
3263 bool class_p;
3266 struct typename_hasher : ggc_hasher<tree>
3268 typedef typename_info *compare_type;
3270 /* Hash a TYPENAME_TYPE. */
3272 static hashval_t
3273 hash (tree t)
3275 hashval_t hash;
3277 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3278 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3280 return hash;
3283 /* Compare two TYPENAME_TYPEs. */
3285 static bool
3286 equal (tree t1, const typename_info *t2)
3288 return (TYPE_IDENTIFIER (t1) == t2->name
3289 && TYPE_CONTEXT (t1) == t2->scope
3290 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3291 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3292 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3296 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3297 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3299 Returns the new TYPENAME_TYPE. */
3301 static GTY (()) hash_table<typename_hasher> *typename_htab;
3303 static tree
3304 build_typename_type (tree context, tree name, tree fullname,
3305 enum tag_types tag_type)
3307 tree t;
3308 tree d;
3309 typename_info ti;
3310 tree *e;
3311 hashval_t hash;
3313 if (typename_htab == NULL)
3314 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3316 ti.scope = FROB_CONTEXT (context);
3317 ti.name = name;
3318 ti.template_id = fullname;
3319 ti.enum_p = tag_type == enum_type;
3320 ti.class_p = (tag_type == class_type
3321 || tag_type == record_type
3322 || tag_type == union_type);
3323 hash = (htab_hash_pointer (ti.scope)
3324 ^ htab_hash_pointer (ti.name));
3326 /* See if we already have this type. */
3327 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3328 if (*e)
3329 t = *e;
3330 else
3332 /* Build the TYPENAME_TYPE. */
3333 t = cxx_make_type (TYPENAME_TYPE);
3334 TYPE_CONTEXT (t) = ti.scope;
3335 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3336 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3337 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3339 /* Build the corresponding TYPE_DECL. */
3340 d = build_decl (input_location, TYPE_DECL, name, t);
3341 TYPE_NAME (TREE_TYPE (d)) = d;
3342 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3343 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3344 DECL_ARTIFICIAL (d) = 1;
3346 /* Store it in the hash table. */
3347 *e = t;
3349 /* TYPENAME_TYPEs must always be compared structurally, because
3350 they may or may not resolve down to another type depending on
3351 the currently open classes. */
3352 SET_TYPE_STRUCTURAL_EQUALITY (t);
3355 return t;
3358 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3359 provided to name the type. Returns an appropriate type, unless an
3360 error occurs, in which case error_mark_node is returned. If we
3361 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3362 return that, rather than the _TYPE it corresponds to, in other
3363 cases we look through the type decl. If TF_ERROR is set, complain
3364 about errors, otherwise be quiet. */
3366 tree
3367 make_typename_type (tree context, tree name, enum tag_types tag_type,
3368 tsubst_flags_t complain)
3370 tree fullname;
3371 tree t;
3372 bool want_template;
3374 if (name == error_mark_node
3375 || context == NULL_TREE
3376 || context == error_mark_node)
3377 return error_mark_node;
3379 if (TYPE_P (name))
3381 if (!(TYPE_LANG_SPECIFIC (name)
3382 && (CLASSTYPE_IS_TEMPLATE (name)
3383 || CLASSTYPE_USE_TEMPLATE (name))))
3384 name = TYPE_IDENTIFIER (name);
3385 else
3386 /* Create a TEMPLATE_ID_EXPR for the type. */
3387 name = build_nt (TEMPLATE_ID_EXPR,
3388 CLASSTYPE_TI_TEMPLATE (name),
3389 CLASSTYPE_TI_ARGS (name));
3391 else if (TREE_CODE (name) == TYPE_DECL)
3392 name = DECL_NAME (name);
3394 fullname = name;
3396 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3398 name = TREE_OPERAND (name, 0);
3399 if (TREE_CODE (name) == TEMPLATE_DECL)
3400 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3401 else if (TREE_CODE (name) == OVERLOAD)
3403 if (complain & tf_error)
3404 error ("%qD is not a type", name);
3405 return error_mark_node;
3408 if (TREE_CODE (name) == TEMPLATE_DECL)
3410 if (complain & tf_error)
3411 error ("%qD used without template parameters", name);
3412 return error_mark_node;
3414 gcc_assert (identifier_p (name));
3415 gcc_assert (TYPE_P (context));
3417 if (!MAYBE_CLASS_TYPE_P (context))
3419 if (complain & tf_error)
3420 error ("%q#T is not a class", context);
3421 return error_mark_node;
3424 /* When the CONTEXT is a dependent type, NAME could refer to a
3425 dependent base class of CONTEXT. But look inside it anyway
3426 if CONTEXT is a currently open scope, in case it refers to a
3427 member of the current instantiation or a non-dependent base;
3428 lookup will stop when we hit a dependent base. */
3429 if (!dependent_scope_p (context))
3430 /* We should only set WANT_TYPE when we're a nested typename type.
3431 Then we can give better diagnostics if we find a non-type. */
3432 t = lookup_field (context, name, 2, /*want_type=*/true);
3433 else
3434 t = NULL_TREE;
3436 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3437 return build_typename_type (context, name, fullname, tag_type);
3439 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3441 if (!t)
3443 if (complain & tf_error)
3444 error (want_template ? G_("no class template named %q#T in %q#T")
3445 : G_("no type named %q#T in %q#T"), name, context);
3446 return error_mark_node;
3449 /* Pull out the template from an injected-class-name (or multiple). */
3450 if (want_template)
3451 t = maybe_get_template_decl_from_type_decl (t);
3453 if (TREE_CODE (t) == TREE_LIST)
3455 if (complain & tf_error)
3457 error ("lookup of %qT in %qT is ambiguous", name, context);
3458 print_candidates (t);
3460 return error_mark_node;
3463 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3465 if (complain & tf_error)
3466 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3467 context, name, t);
3468 return error_mark_node;
3470 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3472 if (complain & tf_error)
3473 error ("%<typename %T::%D%> names %q#T, which is not a type",
3474 context, name, t);
3475 return error_mark_node;
3478 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3479 return error_mark_node;
3481 /* If we are currently parsing a template and if T is a typedef accessed
3482 through CONTEXT then we need to remember and check access of T at
3483 template instantiation time. */
3484 add_typedef_to_current_template_for_access_check (t, context, input_location);
3486 if (want_template)
3487 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3488 NULL_TREE, context,
3489 /*entering_scope=*/0,
3490 tf_warning_or_error | tf_user);
3492 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3493 t = TREE_TYPE (t);
3495 maybe_record_typedef_use (t);
3497 return t;
3500 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3501 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3502 in which case error_mark_node is returned.
3504 If PARM_LIST is non-NULL, also make sure that the template parameter
3505 list of TEMPLATE_DECL matches.
3507 If COMPLAIN zero, don't complain about any errors that occur. */
3509 tree
3510 make_unbound_class_template (tree context, tree name, tree parm_list,
3511 tsubst_flags_t complain)
3513 tree t;
3514 tree d;
3516 if (TYPE_P (name))
3517 name = TYPE_IDENTIFIER (name);
3518 else if (DECL_P (name))
3519 name = DECL_NAME (name);
3520 gcc_assert (identifier_p (name));
3522 if (!dependent_type_p (context)
3523 || currently_open_class (context))
3525 tree tmpl = NULL_TREE;
3527 if (MAYBE_CLASS_TYPE_P (context))
3528 tmpl = lookup_field (context, name, 0, false);
3530 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3531 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3533 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3535 if (complain & tf_error)
3536 error ("no class template named %q#T in %q#T", name, context);
3537 return error_mark_node;
3540 if (parm_list
3541 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3543 if (complain & tf_error)
3545 error ("template parameters do not match template %qD", tmpl);
3546 inform (DECL_SOURCE_LOCATION (tmpl),
3547 "%qD declared here", tmpl);
3549 return error_mark_node;
3552 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3553 complain))
3554 return error_mark_node;
3556 return tmpl;
3559 /* Build the UNBOUND_CLASS_TEMPLATE. */
3560 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3561 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3562 TREE_TYPE (t) = NULL_TREE;
3563 SET_TYPE_STRUCTURAL_EQUALITY (t);
3565 /* Build the corresponding TEMPLATE_DECL. */
3566 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3567 TYPE_NAME (TREE_TYPE (d)) = d;
3568 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3569 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3570 DECL_ARTIFICIAL (d) = 1;
3571 DECL_TEMPLATE_PARMS (d) = parm_list;
3573 return t;
3578 /* Push the declarations of builtin types into the namespace.
3579 RID_INDEX is the index of the builtin type in the array
3580 RID_POINTERS. NAME is the name used when looking up the builtin
3581 type. TYPE is the _TYPE node for the builtin type. */
3583 void
3584 record_builtin_type (enum rid rid_index,
3585 const char* name,
3586 tree type)
3588 tree rname = NULL_TREE, tname = NULL_TREE;
3589 tree tdecl = NULL_TREE;
3591 if ((int) rid_index < (int) RID_MAX)
3592 rname = ridpointers[(int) rid_index];
3593 if (name)
3594 tname = get_identifier (name);
3596 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3597 eliminated. Built-in types should not be looked up name; their
3598 names are keywords that the parser can recognize. However, there
3599 is code in c-common.c that uses identifier_global_value to look
3600 up built-in types by name. */
3601 if (tname)
3603 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3604 DECL_ARTIFICIAL (tdecl) = 1;
3605 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3607 if (rname)
3609 if (!tdecl)
3611 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3612 DECL_ARTIFICIAL (tdecl) = 1;
3614 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3617 if (!TYPE_NAME (type))
3618 TYPE_NAME (type) = tdecl;
3620 if (tdecl)
3621 debug_hooks->type_decl (tdecl, 0);
3624 /* Record one of the standard Java types.
3625 * Declare it as having the given NAME.
3626 * If SIZE > 0, it is the size of one of the integral types;
3627 * otherwise it is the negative of the size of one of the other types. */
3629 static tree
3630 record_builtin_java_type (const char* name, int size)
3632 tree type, decl;
3633 if (size > 0)
3635 type = build_nonstandard_integer_type (size, 0);
3636 type = build_distinct_type_copy (type);
3638 else if (size > -32)
3640 tree stype;
3641 /* "__java_char" or ""__java_boolean". */
3642 type = build_nonstandard_integer_type (-size, 1);
3643 type = build_distinct_type_copy (type);
3644 /* Get the signed type cached and attached to the unsigned type,
3645 so it doesn't get garbage-collected at "random" times,
3646 causing potential codegen differences out of different UIDs
3647 and different alias set numbers. */
3648 stype = build_nonstandard_integer_type (-size, 0);
3649 stype = build_distinct_type_copy (stype);
3650 TREE_CHAIN (type) = stype;
3651 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3653 else
3654 { /* "__java_float" or ""__java_double". */
3655 type = make_node (REAL_TYPE);
3656 TYPE_PRECISION (type) = - size;
3657 layout_type (type);
3659 record_builtin_type (RID_MAX, name, type);
3660 decl = TYPE_NAME (type);
3662 /* Suppress generate debug symbol entries for these types,
3663 since for normal C++ they are just clutter.
3664 However, push_lang_context undoes this if extern "Java" is seen. */
3665 DECL_IGNORED_P (decl) = 1;
3667 TYPE_FOR_JAVA (type) = 1;
3668 return type;
3671 /* Push a type into the namespace so that the back ends ignore it. */
3673 static void
3674 record_unknown_type (tree type, const char* name)
3676 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3677 TYPE_DECL, get_identifier (name), type));
3678 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3679 DECL_IGNORED_P (decl) = 1;
3680 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3681 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3682 TYPE_ALIGN (type) = 1;
3683 TYPE_USER_ALIGN (type) = 0;
3684 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3687 /* A string for which we should create an IDENTIFIER_NODE at
3688 startup. */
3690 typedef struct predefined_identifier
3692 /* The name of the identifier. */
3693 const char *const name;
3694 /* The place where the IDENTIFIER_NODE should be stored. */
3695 tree *const node;
3696 /* Nonzero if this is the name of a constructor or destructor. */
3697 const int ctor_or_dtor_p;
3698 } predefined_identifier;
3700 /* Create all the predefined identifiers. */
3702 static void
3703 initialize_predefined_identifiers (void)
3705 const predefined_identifier *pid;
3707 /* A table of identifiers to create at startup. */
3708 static const predefined_identifier predefined_identifiers[] = {
3709 { "C++", &lang_name_cplusplus, 0 },
3710 { "C", &lang_name_c, 0 },
3711 { "Java", &lang_name_java, 0 },
3712 /* Some of these names have a trailing space so that it is
3713 impossible for them to conflict with names written by users. */
3714 { "__ct ", &ctor_identifier, 1 },
3715 { "__base_ctor ", &base_ctor_identifier, 1 },
3716 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3717 { "__dt ", &dtor_identifier, 1 },
3718 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3719 { "__base_dtor ", &base_dtor_identifier, 1 },
3720 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3721 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3722 { "nelts", &nelts_identifier, 0 },
3723 { THIS_NAME, &this_identifier, 0 },
3724 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3725 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3726 { "_vptr", &vptr_identifier, 0 },
3727 { "__vtt_parm", &vtt_parm_identifier, 0 },
3728 { "::", &global_scope_name, 0 },
3729 { "std", &std_identifier, 0 },
3730 { NULL, NULL, 0 }
3733 for (pid = predefined_identifiers; pid->name; ++pid)
3735 *pid->node = get_identifier (pid->name);
3736 if (pid->ctor_or_dtor_p)
3737 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3741 /* Create the predefined scalar types of C,
3742 and some nodes representing standard constants (0, 1, (void *)0).
3743 Initialize the global binding level.
3744 Make definitions for built-in primitive functions. */
3746 void
3747 cxx_init_decl_processing (void)
3749 tree void_ftype;
3750 tree void_ftype_ptr;
3752 /* Create all the identifiers we need. */
3753 initialize_predefined_identifiers ();
3755 /* Create the global variables. */
3756 push_to_top_level ();
3758 current_function_decl = NULL_TREE;
3759 current_binding_level = NULL;
3760 /* Enter the global namespace. */
3761 gcc_assert (global_namespace == NULL_TREE);
3762 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3763 void_type_node);
3764 DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3765 TREE_PUBLIC (global_namespace) = 1;
3766 begin_scope (sk_namespace, global_namespace);
3768 if (flag_visibility_ms_compat)
3769 default_visibility = VISIBILITY_HIDDEN;
3771 /* Initially, C. */
3772 current_lang_name = lang_name_c;
3774 /* Create the `std' namespace. */
3775 push_namespace (std_identifier);
3776 std_node = current_namespace;
3777 pop_namespace ();
3779 c_common_nodes_and_builtins ();
3781 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3782 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3783 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3784 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3785 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3786 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3787 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3788 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3790 integer_two_node = build_int_cst (NULL_TREE, 2);
3792 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3793 truthvalue_type_node = boolean_type_node;
3794 truthvalue_false_node = boolean_false_node;
3795 truthvalue_true_node = boolean_true_node;
3797 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3798 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3799 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3801 #if 0
3802 record_builtin_type (RID_MAX, NULL, string_type_node);
3803 #endif
3805 delta_type_node = ptrdiff_type_node;
3806 vtable_index_type = ptrdiff_type_node;
3808 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3809 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3810 void_ftype_ptr = build_function_type_list (void_type_node,
3811 ptr_type_node, NULL_TREE);
3812 void_ftype_ptr
3813 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3815 /* C++ extensions */
3817 unknown_type_node = make_node (LANG_TYPE);
3818 record_unknown_type (unknown_type_node, "unknown type");
3820 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3821 TREE_TYPE (unknown_type_node) = unknown_type_node;
3823 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3824 result. */
3825 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3826 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3828 init_list_type_node = make_node (LANG_TYPE);
3829 record_unknown_type (init_list_type_node, "init list");
3832 /* Make sure we get a unique function type, so we can give
3833 its pointer type a name. (This wins for gdb.) */
3834 tree vfunc_type = make_node (FUNCTION_TYPE);
3835 TREE_TYPE (vfunc_type) = integer_type_node;
3836 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3837 layout_type (vfunc_type);
3839 vtable_entry_type = build_pointer_type (vfunc_type);
3841 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3843 vtbl_type_node
3844 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3845 layout_type (vtbl_type_node);
3846 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3847 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3848 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3849 layout_type (vtbl_ptr_type_node);
3850 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3852 push_namespace (get_identifier ("__cxxabiv1"));
3853 abi_node = current_namespace;
3854 pop_namespace ();
3856 global_type_node = make_node (LANG_TYPE);
3857 record_unknown_type (global_type_node, "global type");
3859 /* Now, C++. */
3860 current_lang_name = lang_name_cplusplus;
3863 tree newattrs, extvisattr;
3864 tree newtype, deltype;
3865 tree ptr_ftype_sizetype;
3866 tree new_eh_spec;
3868 ptr_ftype_sizetype
3869 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3870 if (cxx_dialect == cxx98)
3872 tree bad_alloc_id;
3873 tree bad_alloc_type_node;
3874 tree bad_alloc_decl;
3876 push_namespace (std_identifier);
3877 bad_alloc_id = get_identifier ("bad_alloc");
3878 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3879 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3880 bad_alloc_decl
3881 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3882 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3883 pop_namespace ();
3885 new_eh_spec
3886 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3888 else
3889 new_eh_spec = noexcept_false_spec;
3891 /* Ensure attribs.c is initialized. */
3892 init_attributes ();
3893 extvisattr = build_tree_list (get_identifier ("externally_visible"),
3894 NULL_TREE);
3895 newattrs = tree_cons (get_identifier ("alloc_size"),
3896 build_tree_list (NULL_TREE, integer_one_node),
3897 extvisattr);
3898 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3899 newtype = build_exception_variant (newtype, new_eh_spec);
3900 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3901 deltype = build_exception_variant (deltype, empty_except_spec);
3902 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
3903 DECL_IS_MALLOC (opnew) = 1;
3904 DECL_IS_OPERATOR_NEW (opnew) = 1;
3905 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
3906 DECL_IS_MALLOC (opnew) = 1;
3907 DECL_IS_OPERATOR_NEW (opnew) = 1;
3908 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
3909 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
3911 nullptr_type_node = make_node (NULLPTR_TYPE);
3912 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3913 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3914 TYPE_UNSIGNED (nullptr_type_node) = 1;
3915 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3916 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3917 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3918 nullptr_node = build_int_cst (nullptr_type_node, 0);
3921 abort_fndecl
3922 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
3923 ECF_NORETURN | ECF_NOTHROW);
3925 /* Perform other language dependent initializations. */
3926 init_class_processing ();
3927 init_rtti_processing ();
3928 init_template_processing ();
3930 if (flag_exceptions)
3931 init_exception_processing ();
3933 if (! supports_one_only ())
3934 flag_weak = 0;
3936 make_fname_decl = cp_make_fname_decl;
3937 start_fname_decls ();
3939 /* Show we use EH for cleanups. */
3940 if (flag_exceptions)
3941 using_eh_for_cleanups ();
3944 /* Generate an initializer for a function naming variable from
3945 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3946 filled in with the type of the init. */
3948 tree
3949 cp_fname_init (const char* name, tree *type_p)
3951 tree domain = NULL_TREE;
3952 tree type;
3953 tree init = NULL_TREE;
3954 size_t length = 0;
3956 if (name)
3958 length = strlen (name);
3959 domain = build_index_type (size_int (length));
3960 init = build_string (length + 1, name);
3963 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3964 type = build_cplus_array_type (type, domain);
3966 *type_p = type;
3968 if (init)
3969 TREE_TYPE (init) = type;
3970 else
3971 init = error_mark_node;
3973 return init;
3976 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3977 the decl, LOC is the location to give the decl, NAME is the
3978 initialization string and TYPE_DEP indicates whether NAME depended
3979 on the type of the function. We make use of that to detect
3980 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3981 at the point of first use, so we mustn't push the decl now. */
3983 static tree
3984 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3986 const char *const name = (type_dep && processing_template_decl
3987 ? NULL : fname_as_string (type_dep));
3988 tree type;
3989 tree init = cp_fname_init (name, &type);
3990 tree decl = build_decl (loc, VAR_DECL, id, type);
3992 if (name)
3993 free (CONST_CAST (char *, name));
3995 /* As we're using pushdecl_with_scope, we must set the context. */
3996 DECL_CONTEXT (decl) = current_function_decl;
3998 TREE_STATIC (decl) = 1;
3999 TREE_READONLY (decl) = 1;
4000 DECL_ARTIFICIAL (decl) = 1;
4002 TREE_USED (decl) = 1;
4004 if (current_function_decl)
4006 cp_binding_level *b = current_binding_level;
4007 if (b->kind == sk_function_parms)
4008 return error_mark_node;
4009 while (b->level_chain->kind != sk_function_parms)
4010 b = b->level_chain;
4011 pushdecl_with_scope (decl, b, /*is_friend=*/false);
4012 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4013 LOOKUP_ONLYCONVERTING);
4015 else
4017 DECL_THIS_STATIC (decl) = true;
4018 pushdecl_top_level_and_finish (decl, init);
4021 return decl;
4024 static tree
4025 builtin_function_1 (tree decl, tree context, bool is_global)
4027 tree id = DECL_NAME (decl);
4028 const char *name = IDENTIFIER_POINTER (id);
4030 retrofit_lang_decl (decl);
4032 DECL_ARTIFICIAL (decl) = 1;
4033 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
4034 SET_DECL_LANGUAGE (decl, lang_c);
4035 /* Runtime library routines are, by definition, available in an
4036 external shared object. */
4037 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4038 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4040 DECL_CONTEXT (decl) = context;
4042 if (is_global)
4043 pushdecl_top_level (decl);
4044 else
4045 pushdecl (decl);
4047 /* A function in the user's namespace should have an explicit
4048 declaration before it is used. Mark the built-in function as
4049 anticipated but not actually declared. */
4050 if (name[0] != '_' || name[1] != '_')
4051 DECL_ANTICIPATED (decl) = 1;
4052 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4054 size_t len = strlen (name);
4056 /* Treat __*_chk fortification functions as anticipated as well,
4057 unless they are __builtin_*. */
4058 if (len > strlen ("___chk")
4059 && memcmp (name + len - strlen ("_chk"),
4060 "_chk", strlen ("_chk") + 1) == 0)
4061 DECL_ANTICIPATED (decl) = 1;
4064 return decl;
4067 tree
4068 cxx_builtin_function (tree decl)
4070 tree id = DECL_NAME (decl);
4071 const char *name = IDENTIFIER_POINTER (id);
4072 /* All builtins that don't begin with an '_' should additionally
4073 go in the 'std' namespace. */
4074 if (name[0] != '_')
4076 tree decl2 = copy_node(decl);
4077 push_namespace (std_identifier);
4078 builtin_function_1 (decl2, std_node, false);
4079 pop_namespace ();
4082 return builtin_function_1 (decl, NULL_TREE, false);
4085 /* Like cxx_builtin_function, but guarantee the function is added to the global
4086 scope. This is to allow function specific options to add new machine
4087 dependent builtins when the target ISA changes via attribute((target(...)))
4088 which saves space on program startup if the program does not use non-generic
4089 ISAs. */
4091 tree
4092 cxx_builtin_function_ext_scope (tree decl)
4095 tree id = DECL_NAME (decl);
4096 const char *name = IDENTIFIER_POINTER (id);
4097 /* All builtins that don't begin with an '_' should additionally
4098 go in the 'std' namespace. */
4099 if (name[0] != '_')
4101 tree decl2 = copy_node(decl);
4102 push_namespace (std_identifier);
4103 builtin_function_1 (decl2, std_node, true);
4104 pop_namespace ();
4107 return builtin_function_1 (decl, NULL_TREE, true);
4110 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4111 function. Not called directly. */
4113 static tree
4114 build_library_fn (tree name, enum tree_code operator_code, tree type,
4115 int ecf_flags)
4117 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4118 DECL_EXTERNAL (fn) = 1;
4119 TREE_PUBLIC (fn) = 1;
4120 DECL_ARTIFICIAL (fn) = 1;
4121 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4122 SET_DECL_LANGUAGE (fn, lang_c);
4123 /* Runtime library routines are, by definition, available in an
4124 external shared object. */
4125 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4126 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4127 set_call_expr_flags (fn, ecf_flags);
4128 return fn;
4131 /* Returns the _DECL for a library function with C++ linkage. */
4133 static tree
4134 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4135 int ecf_flags)
4137 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4138 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4139 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4140 return fn;
4143 /* Like build_library_fn, but takes a C string instead of an
4144 IDENTIFIER_NODE. */
4146 tree
4147 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4149 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4152 /* Like build_cp_library_fn, but takes a C string instead of an
4153 IDENTIFIER_NODE. */
4155 tree
4156 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4158 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4159 ecf_flags);
4162 /* Like build_library_fn, but also pushes the function so that we will
4163 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
4164 may throw exceptions listed in RAISES. */
4166 tree
4167 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4169 tree fn;
4171 if (raises)
4172 type = build_exception_variant (type, raises);
4174 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4175 pushdecl_top_level (fn);
4176 return fn;
4179 /* Like build_cp_library_fn, but also pushes the function so that it
4180 will be found by normal lookup. */
4182 static tree
4183 push_cp_library_fn (enum tree_code operator_code, tree type,
4184 int ecf_flags)
4186 tree fn = build_cp_library_fn (ansi_opname (operator_code),
4187 operator_code,
4188 type, ecf_flags);
4189 pushdecl (fn);
4190 if (flag_tm)
4191 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4192 return fn;
4195 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4196 a FUNCTION_TYPE. */
4198 tree
4199 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4201 tree type = build_function_type (void_type_node, parmtypes);
4202 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4205 /* Like push_library_fn, but also note that this function throws
4206 and does not return. Used for __throw_foo and the like. */
4208 tree
4209 push_throw_library_fn (tree name, tree type)
4211 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4212 return fn;
4215 /* When we call finish_struct for an anonymous union, we create
4216 default copy constructors and such. But, an anonymous union
4217 shouldn't have such things; this function undoes the damage to the
4218 anonymous union type T.
4220 (The reason that we create the synthesized methods is that we don't
4221 distinguish `union { int i; }' from `typedef union { int i; } U'.
4222 The first is an anonymous union; the second is just an ordinary
4223 union type.) */
4225 void
4226 fixup_anonymous_aggr (tree t)
4228 tree *q;
4230 /* Wipe out memory of synthesized methods. */
4231 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4232 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4233 TYPE_HAS_COPY_CTOR (t) = 0;
4234 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4235 TYPE_HAS_COPY_ASSIGN (t) = 0;
4236 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4238 /* Splice the implicitly generated functions out of the TYPE_METHODS
4239 list. */
4240 q = &TYPE_METHODS (t);
4241 while (*q)
4243 if (DECL_ARTIFICIAL (*q))
4244 *q = TREE_CHAIN (*q);
4245 else
4246 q = &DECL_CHAIN (*q);
4249 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
4250 if (TYPE_METHODS (t))
4252 tree decl = TYPE_MAIN_DECL (t);
4254 if (TREE_CODE (t) != UNION_TYPE)
4255 error_at (DECL_SOURCE_LOCATION (decl),
4256 "an anonymous struct cannot have function members");
4257 else
4258 error_at (DECL_SOURCE_LOCATION (decl),
4259 "an anonymous union cannot have function members");
4262 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4263 assignment operators (because they cannot have these methods themselves).
4264 For anonymous unions this is already checked because they are not allowed
4265 in any union, otherwise we have to check it. */
4266 if (TREE_CODE (t) != UNION_TYPE)
4268 tree field, type;
4270 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4271 if (TREE_CODE (field) == FIELD_DECL)
4273 type = TREE_TYPE (field);
4274 if (CLASS_TYPE_P (type))
4276 if (TYPE_NEEDS_CONSTRUCTING (type))
4277 error ("member %q+#D with constructor not allowed "
4278 "in anonymous aggregate", field);
4279 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4280 error ("member %q+#D with destructor not allowed "
4281 "in anonymous aggregate", field);
4282 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4283 error ("member %q+#D with copy assignment operator "
4284 "not allowed in anonymous aggregate", field);
4290 /* Warn for an attribute located at LOCATION that appertains to the
4291 class type CLASS_TYPE that has not been properly placed after its
4292 class-key, in it class-specifier. */
4294 void
4295 warn_misplaced_attr_for_class_type (source_location location,
4296 tree class_type)
4298 gcc_assert (OVERLOAD_TYPE_P (class_type));
4300 if (warning_at (location, OPT_Wattributes,
4301 "attribute ignored in declaration "
4302 "of %q#T", class_type))
4303 inform (location,
4304 "attribute for %q#T must follow the %qs keyword",
4305 class_type, class_key_or_enum_as_string (class_type));
4308 /* Make sure that a declaration with no declarator is well-formed, i.e.
4309 just declares a tagged type or anonymous union.
4311 Returns the type declared; or NULL_TREE if none. */
4313 tree
4314 check_tag_decl (cp_decl_specifier_seq *declspecs,
4315 bool explicit_type_instantiation_p)
4317 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4318 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4319 /* If a class, struct, or enum type is declared by the DECLSPECS
4320 (i.e, if a class-specifier, enum-specifier, or non-typename
4321 elaborated-type-specifier appears in the DECLSPECS),
4322 DECLARED_TYPE is set to the corresponding type. */
4323 tree declared_type = NULL_TREE;
4324 bool error_p = false;
4326 if (declspecs->multiple_types_p)
4327 error ("multiple types in one declaration");
4328 else if (declspecs->redefined_builtin_type)
4330 if (!in_system_header_at (input_location))
4331 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4332 "redeclaration of C++ built-in type %qT",
4333 declspecs->redefined_builtin_type);
4334 return NULL_TREE;
4337 if (declspecs->type
4338 && TYPE_P (declspecs->type)
4339 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4340 && MAYBE_CLASS_TYPE_P (declspecs->type))
4341 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4342 declared_type = declspecs->type;
4343 else if (declspecs->type == error_mark_node)
4344 error_p = true;
4345 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4346 permerror (input_location, "declaration does not declare anything");
4347 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4349 error ("%<auto%> can only be specified for variables "
4350 "or function declarations");
4351 return error_mark_node;
4353 /* Check for an anonymous union. */
4354 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4355 && TYPE_ANONYMOUS_P (declared_type))
4357 /* 7/3 In a simple-declaration, the optional init-declarator-list
4358 can be omitted only when declaring a class (clause 9) or
4359 enumeration (7.2), that is, when the decl-specifier-seq contains
4360 either a class-specifier, an elaborated-type-specifier with
4361 a class-key (9.1), or an enum-specifier. In these cases and
4362 whenever a class-specifier or enum-specifier is present in the
4363 decl-specifier-seq, the identifiers in these specifiers are among
4364 the names being declared by the declaration (as class-name,
4365 enum-names, or enumerators, depending on the syntax). In such
4366 cases, and except for the declaration of an unnamed bit-field (9.6),
4367 the decl-specifier-seq shall introduce one or more names into the
4368 program, or shall redeclare a name introduced by a previous
4369 declaration. [Example:
4370 enum { }; // ill-formed
4371 typedef class { }; // ill-formed
4372 --end example] */
4373 if (saw_typedef)
4375 error ("missing type-name in typedef-declaration");
4376 return NULL_TREE;
4378 /* Anonymous unions are objects, so they can have specifiers. */;
4379 SET_ANON_AGGR_TYPE_P (declared_type);
4381 if (TREE_CODE (declared_type) != UNION_TYPE
4382 && !in_system_header_at (input_location))
4383 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4386 else
4388 if (decl_spec_seq_has_spec_p (declspecs, ds_inline)
4389 || decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4390 error ("%qs can only be specified for functions",
4391 decl_spec_seq_has_spec_p (declspecs, ds_inline)
4392 ? "inline" : "virtual");
4393 else if (saw_friend
4394 && (!current_class_type
4395 || current_scope () != current_class_type))
4396 error ("%<friend%> can only be specified inside a class");
4397 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4398 error ("%<explicit%> can only be specified for constructors");
4399 else if (declspecs->storage_class)
4400 error ("a storage class can only be specified for objects "
4401 "and functions");
4402 else if (decl_spec_seq_has_spec_p (declspecs, ds_const)
4403 || decl_spec_seq_has_spec_p (declspecs, ds_volatile)
4404 || decl_spec_seq_has_spec_p (declspecs, ds_restrict)
4405 || decl_spec_seq_has_spec_p (declspecs, ds_thread))
4406 error ("qualifiers can only be specified for objects "
4407 "and functions");
4408 else if (saw_typedef)
4409 warning (0, "%<typedef%> was ignored in this declaration");
4410 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4411 error ("%<constexpr%> cannot be used for type declarations");
4414 if (declspecs->attributes && warn_attributes && declared_type)
4416 location_t loc;
4417 if (!CLASS_TYPE_P (declared_type)
4418 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4419 /* For a non-template class, use the name location. */
4420 loc = location_of (declared_type);
4421 else
4422 /* For a template class (an explicit instantiation), use the
4423 current location. */
4424 loc = input_location;
4426 if (explicit_type_instantiation_p)
4427 /* [dcl.attr.grammar]/4:
4429 No attribute-specifier-seq shall appertain to an explicit
4430 instantiation. */
4432 if (warning_at (loc, OPT_Wattributes,
4433 "attribute ignored in explicit instantiation %q#T",
4434 declared_type))
4435 inform (loc,
4436 "no attribute can be applied to "
4437 "an explicit instantiation");
4439 else
4440 warn_misplaced_attr_for_class_type (loc, declared_type);
4443 return declared_type;
4446 /* Called when a declaration is seen that contains no names to declare.
4447 If its type is a reference to a structure, union or enum inherited
4448 from a containing scope, shadow that tag name for the current scope
4449 with a forward reference.
4450 If its type defines a new named structure or union
4451 or defines an enum, it is valid but we need not do anything here.
4452 Otherwise, it is an error.
4454 C++: may have to grok the declspecs to learn about static,
4455 complain for anonymous unions.
4457 Returns the TYPE declared -- or NULL_TREE if none. */
4459 tree
4460 shadow_tag (cp_decl_specifier_seq *declspecs)
4462 tree t = check_tag_decl (declspecs,
4463 /*explicit_type_instantiation_p=*/false);
4465 if (!t)
4466 return NULL_TREE;
4468 if (maybe_process_partial_specialization (t) == error_mark_node)
4469 return NULL_TREE;
4471 /* This is where the variables in an anonymous union are
4472 declared. An anonymous union declaration looks like:
4473 union { ... } ;
4474 because there is no declarator after the union, the parser
4475 sends that declaration here. */
4476 if (ANON_AGGR_TYPE_P (t))
4478 fixup_anonymous_aggr (t);
4480 if (TYPE_FIELDS (t))
4482 tree decl = grokdeclarator (/*declarator=*/NULL,
4483 declspecs, NORMAL, 0, NULL);
4484 finish_anon_union (decl);
4488 return t;
4491 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4493 tree
4494 groktypename (cp_decl_specifier_seq *type_specifiers,
4495 const cp_declarator *declarator,
4496 bool is_template_arg)
4498 tree attrs;
4499 tree type;
4500 enum decl_context context
4501 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4502 attrs = type_specifiers->attributes;
4503 type_specifiers->attributes = NULL_TREE;
4504 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4505 if (attrs && type != error_mark_node)
4507 if (CLASS_TYPE_P (type))
4508 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4509 "outside of definition", type);
4510 else if (MAYBE_CLASS_TYPE_P (type))
4511 /* A template type parameter or other dependent type. */
4512 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4513 "type %qT without an associated declaration", type);
4514 else
4515 cplus_decl_attributes (&type, attrs, 0);
4517 return type;
4520 /* Process a DECLARATOR for a function-scope variable declaration,
4521 namespace-scope variable declaration, or function declaration.
4522 (Function definitions go through start_function; class member
4523 declarations appearing in the body of the class go through
4524 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4525 If an error occurs, the error_mark_node is returned instead.
4527 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4528 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4529 for an explicitly defaulted function, or SD_DELETED for an explicitly
4530 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4531 implicitly initialized via a default constructor. ATTRIBUTES and
4532 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4534 The scope represented by the context of the returned DECL is pushed
4535 (if it is not the global namespace) and is assigned to
4536 *PUSHED_SCOPE_P. The caller is then responsible for calling
4537 pop_scope on *PUSHED_SCOPE_P if it is set. */
4539 tree
4540 start_decl (const cp_declarator *declarator,
4541 cp_decl_specifier_seq *declspecs,
4542 int initialized,
4543 tree attributes,
4544 tree prefix_attributes,
4545 tree *pushed_scope_p)
4547 tree decl;
4548 tree context;
4549 bool was_public;
4550 int flags;
4551 bool alias;
4553 *pushed_scope_p = NULL_TREE;
4555 /* An object declared as __attribute__((deprecated)) suppresses
4556 warnings of uses of other deprecated items. */
4557 if (lookup_attribute ("deprecated", attributes))
4558 deprecated_state = DEPRECATED_SUPPRESS;
4560 attributes = chainon (attributes, prefix_attributes);
4562 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4563 &attributes);
4565 deprecated_state = DEPRECATED_NORMAL;
4567 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4568 || decl == error_mark_node)
4569 return error_mark_node;
4571 context = CP_DECL_CONTEXT (decl);
4572 if (context != global_namespace)
4573 *pushed_scope_p = push_scope (context);
4575 if (initialized)
4576 /* Is it valid for this decl to have an initializer at all?
4577 If not, set INITIALIZED to zero, which will indirectly
4578 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4579 switch (TREE_CODE (decl))
4581 case TYPE_DECL:
4582 error ("typedef %qD is initialized (use decltype instead)", decl);
4583 return error_mark_node;
4585 case FUNCTION_DECL:
4586 if (initialized == SD_DELETED)
4587 /* We'll handle the rest of the semantics later, but we need to
4588 set this now so it's visible to duplicate_decls. */
4589 DECL_DELETED_FN (decl) = 1;
4590 break;
4592 default:
4593 break;
4596 if (initialized)
4598 if (! toplevel_bindings_p ()
4599 && DECL_EXTERNAL (decl))
4600 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4601 decl);
4602 DECL_EXTERNAL (decl) = 0;
4603 if (toplevel_bindings_p ())
4604 TREE_STATIC (decl) = 1;
4606 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4608 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4609 record_key_method_defined (decl);
4611 /* If this is a typedef that names the class for linkage purposes
4612 (7.1.3p8), apply any attributes directly to the type. */
4613 if (TREE_CODE (decl) == TYPE_DECL
4614 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4615 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4616 flags = ATTR_FLAG_TYPE_IN_PLACE;
4617 else
4618 flags = 0;
4620 /* Set attributes here so if duplicate decl, will have proper attributes. */
4621 cplus_decl_attributes (&decl, attributes, flags);
4623 /* Dllimported symbols cannot be defined. Static data members (which
4624 can be initialized in-class and dllimported) go through grokfield,
4625 not here, so we don't need to exclude those decls when checking for
4626 a definition. */
4627 if (initialized && DECL_DLLIMPORT_P (decl))
4629 error ("definition of %q#D is marked %<dllimport%>", decl);
4630 DECL_DLLIMPORT_P (decl) = 0;
4633 /* If #pragma weak was used, mark the decl weak now. */
4634 if (!processing_template_decl)
4635 maybe_apply_pragma_weak (decl);
4637 if (TREE_CODE (decl) == FUNCTION_DECL
4638 && DECL_DECLARED_INLINE_P (decl)
4639 && DECL_UNINLINABLE (decl)
4640 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4641 warning (0, "inline function %q+D given attribute noinline", decl);
4643 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4645 bool this_tmpl = (processing_template_decl
4646 > template_class_depth (context));
4647 if (VAR_P (decl))
4649 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4650 if (field == NULL_TREE
4651 || !(VAR_P (field) || variable_template_p (field)))
4652 error ("%q+#D is not a static data member of %q#T", decl, context);
4653 else if (variable_template_p (field) && !this_tmpl)
4655 if (DECL_LANG_SPECIFIC (decl)
4656 && DECL_TEMPLATE_SPECIALIZATION (decl))
4657 /* OK, specialization was already checked. */;
4658 else
4660 error_at (DECL_SOURCE_LOCATION (decl),
4661 "non-member-template declaration of %qD", decl);
4662 inform (DECL_SOURCE_LOCATION (field), "does not match "
4663 "member template declaration here");
4664 return error_mark_node;
4667 else
4669 if (variable_template_p (field))
4670 field = DECL_TEMPLATE_RESULT (field);
4672 if (DECL_CONTEXT (field) != context)
4674 if (!same_type_p (DECL_CONTEXT (field), context))
4675 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4676 "to be defined as %<%T::%D%>",
4677 DECL_CONTEXT (field), DECL_NAME (decl),
4678 context, DECL_NAME (decl));
4679 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4681 /* Static data member are tricky; an in-class initialization
4682 still doesn't provide a definition, so the in-class
4683 declaration will have DECL_EXTERNAL set, but will have an
4684 initialization. Thus, duplicate_decls won't warn
4685 about this situation, and so we check here. */
4686 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4687 error ("duplicate initialization of %qD", decl);
4688 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4689 decl = field;
4690 if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4691 && !DECL_DECLARED_CONSTEXPR_P (field))
4692 error ("%qD declared %<constexpr%> outside its class", field);
4695 else
4697 tree field = check_classfn (context, decl,
4698 this_tmpl
4699 ? current_template_parms
4700 : NULL_TREE);
4701 if (field && field != error_mark_node
4702 && duplicate_decls (decl, field,
4703 /*newdecl_is_friend=*/false))
4704 decl = field;
4707 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4708 DECL_IN_AGGR_P (decl) = 0;
4709 /* Do not mark DECL as an explicit specialization if it was not
4710 already marked as an instantiation; a declaration should
4711 never be marked as a specialization unless we know what
4712 template is being specialized. */
4713 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4715 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4716 if (TREE_CODE (decl) == FUNCTION_DECL)
4717 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
4718 && DECL_DECLARED_INLINE_P (decl));
4719 else
4720 DECL_COMDAT (decl) = false;
4722 /* [temp.expl.spec] An explicit specialization of a static data
4723 member of a template is a definition if the declaration
4724 includes an initializer; otherwise, it is a declaration.
4726 We check for processing_specialization so this only applies
4727 to the new specialization syntax. */
4728 if (!initialized && processing_specialization)
4729 DECL_EXTERNAL (decl) = 1;
4732 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4733 /* Aliases are definitions. */
4734 && !alias)
4735 permerror (input_location, "declaration of %q#D outside of class is not definition",
4736 decl);
4739 was_public = TREE_PUBLIC (decl);
4741 /* Enter this declaration into the symbol table. */
4742 decl = maybe_push_decl (decl);
4744 if (processing_template_decl)
4745 decl = push_template_decl (decl);
4746 if (decl == error_mark_node)
4747 return error_mark_node;
4749 if (VAR_P (decl)
4750 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4751 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4753 /* This is a const variable with implicit 'static'. Set
4754 DECL_THIS_STATIC so we can tell it from variables that are
4755 !TREE_PUBLIC because of the anonymous namespace. */
4756 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4757 DECL_THIS_STATIC (decl) = 1;
4760 if (current_function_decl && VAR_P (decl)
4761 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
4763 if (DECL_THREAD_LOCAL_P (decl))
4764 error ("%qD declared %<thread_local%> in %<constexpr%> function",
4765 decl);
4766 else if (TREE_STATIC (decl))
4767 error ("%qD declared %<static%> in %<constexpr%> function", decl);
4770 if (!processing_template_decl && VAR_P (decl))
4771 start_decl_1 (decl, initialized);
4773 return decl;
4776 /* Process the declaration of a variable DECL. INITIALIZED is true
4777 iff DECL is explicitly initialized. (INITIALIZED is false if the
4778 variable is initialized via an implicitly-called constructor.)
4779 This function must be called for ordinary variables (including, for
4780 example, implicit instantiations of templates), but must not be
4781 called for template declarations. */
4783 void
4784 start_decl_1 (tree decl, bool initialized)
4786 tree type;
4787 bool complete_p;
4788 bool aggregate_definition_p;
4790 gcc_assert (!processing_template_decl);
4792 if (error_operand_p (decl))
4793 return;
4795 gcc_assert (VAR_P (decl));
4797 type = TREE_TYPE (decl);
4798 complete_p = COMPLETE_TYPE_P (type);
4799 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4801 /* If an explicit initializer is present, or if this is a definition
4802 of an aggregate, then we need a complete type at this point.
4803 (Scalars are always complete types, so there is nothing to
4804 check.) This code just sets COMPLETE_P; errors (if necessary)
4805 are issued below. */
4806 if ((initialized || aggregate_definition_p)
4807 && !complete_p
4808 && COMPLETE_TYPE_P (complete_type (type)))
4810 complete_p = true;
4811 /* We will not yet have set TREE_READONLY on DECL if the type
4812 was "const", but incomplete, before this point. But, now, we
4813 have a complete type, so we can try again. */
4814 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4817 if (initialized)
4818 /* Is it valid for this decl to have an initializer at all? */
4820 /* Don't allow initializations for incomplete types except for
4821 arrays which might be completed by the initialization. */
4822 if (complete_p)
4823 ; /* A complete type is ok. */
4824 else if (type_uses_auto (type))
4825 ; /* An auto type is ok. */
4826 else if (TREE_CODE (type) != ARRAY_TYPE)
4828 error ("variable %q#D has initializer but incomplete type", decl);
4829 type = TREE_TYPE (decl) = error_mark_node;
4831 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4833 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4834 error ("elements of array %q#D have incomplete type", decl);
4835 /* else we already gave an error in start_decl. */
4838 else if (aggregate_definition_p && !complete_p)
4840 if (type_uses_auto (type))
4841 error ("declaration of %q#D has no initializer", decl);
4842 else
4843 error ("aggregate %q#D has incomplete type and cannot be defined",
4844 decl);
4845 /* Change the type so that assemble_variable will give
4846 DECL an rtl we can live with: (mem (const_int 0)). */
4847 type = TREE_TYPE (decl) = error_mark_node;
4850 /* Create a new scope to hold this declaration if necessary.
4851 Whether or not a new scope is necessary cannot be determined
4852 until after the type has been completed; if the type is a
4853 specialization of a class template it is not until after
4854 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4855 will be set correctly. */
4856 maybe_push_cleanup_level (type);
4859 /* Handle initialization of references. DECL, TYPE, and INIT have the
4860 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4861 but will be set to a new CLEANUP_STMT if a temporary is created
4862 that must be destroyed subsequently.
4864 Returns an initializer expression to use to initialize DECL, or
4865 NULL if the initialization can be performed statically.
4867 Quotes on semantics can be found in ARM 8.4.3. */
4869 static tree
4870 grok_reference_init (tree decl, tree type, tree init, int flags)
4872 if (init == NULL_TREE)
4874 if ((DECL_LANG_SPECIFIC (decl) == 0
4875 || DECL_IN_AGGR_P (decl) == 0)
4876 && ! DECL_THIS_EXTERN (decl))
4877 error ("%qD declared as reference but not initialized", decl);
4878 return NULL_TREE;
4881 if (TREE_CODE (init) == TREE_LIST)
4882 init = build_x_compound_expr_from_list (init, ELK_INIT,
4883 tf_warning_or_error);
4885 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4886 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4887 /* Note: default conversion is only called in very special cases. */
4888 init = decay_conversion (init, tf_warning_or_error);
4890 /* Convert INIT to the reference type TYPE. This may involve the
4891 creation of a temporary, whose lifetime must be the same as that
4892 of the reference. If so, a DECL_EXPR for the temporary will be
4893 added just after the DECL_EXPR for DECL. That's why we don't set
4894 DECL_INITIAL for local references (instead assigning to them
4895 explicitly); we need to allow the temporary to be initialized
4896 first. */
4897 return initialize_reference (type, init, flags,
4898 tf_warning_or_error);
4901 /* Designated initializers in arrays are not supported in GNU C++.
4902 The parser cannot detect this error since it does not know whether
4903 a given brace-enclosed initializer is for a class type or for an
4904 array. This function checks that CE does not use a designated
4905 initializer. If it does, an error is issued. Returns true if CE
4906 is valid, i.e., does not have a designated initializer. */
4908 static bool
4909 check_array_designated_initializer (constructor_elt *ce,
4910 unsigned HOST_WIDE_INT index)
4912 /* Designated initializers for array elements are not supported. */
4913 if (ce->index)
4915 /* The parser only allows identifiers as designated
4916 initializers. */
4917 if (ce->index == error_mark_node)
4919 error ("name used in a GNU-style designated "
4920 "initializer for an array");
4921 return false;
4923 else if (identifier_p (ce->index))
4925 error ("name %qD used in a GNU-style designated "
4926 "initializer for an array", ce->index);
4927 return false;
4930 ce->index = cxx_constant_value (ce->index);
4932 if (TREE_CODE (ce->index) == INTEGER_CST)
4934 /* A C99 designator is OK if it matches the current index. */
4935 if (wi::eq_p (ce->index, index))
4936 return true;
4937 else
4938 sorry ("non-trivial designated initializers not supported");
4940 else
4941 gcc_unreachable ();
4943 return false;
4946 return true;
4949 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4950 array until we finish parsing the initializer. If that's the
4951 situation we're in, update DECL accordingly. */
4953 static void
4954 maybe_deduce_size_from_array_init (tree decl, tree init)
4956 tree type = TREE_TYPE (decl);
4958 if (TREE_CODE (type) == ARRAY_TYPE
4959 && TYPE_DOMAIN (type) == NULL_TREE
4960 && TREE_CODE (decl) != TYPE_DECL)
4962 /* do_default is really a C-ism to deal with tentative definitions.
4963 But let's leave it here to ease the eventual merge. */
4964 int do_default = !DECL_EXTERNAL (decl);
4965 tree initializer = init ? init : DECL_INITIAL (decl);
4966 int failure = 0;
4968 /* Check that there are no designated initializers in INIT, as
4969 those are not supported in GNU C++, and as the middle-end
4970 will crash if presented with a non-numeric designated
4971 initializer. */
4972 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
4974 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
4975 constructor_elt *ce;
4976 HOST_WIDE_INT i;
4977 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
4978 if (!check_array_designated_initializer (ce, i))
4979 failure = 1;
4982 if (!failure)
4984 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4985 do_default);
4986 if (failure == 1)
4988 error ("initializer fails to determine size of %qD", decl);
4990 else if (failure == 2)
4992 if (do_default)
4994 error ("array size missing in %qD", decl);
4996 /* If a `static' var's size isn't known, make it extern as
4997 well as static, so it does not get allocated. If it's not
4998 `static', then don't mark it extern; finish_incomplete_decl
4999 will give it a default size and it will get allocated. */
5000 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5001 DECL_EXTERNAL (decl) = 1;
5003 else if (failure == 3)
5005 error ("zero-size array %qD", decl);
5009 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5011 relayout_decl (decl);
5015 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5016 any appropriate error messages regarding the layout. */
5018 static void
5019 layout_var_decl (tree decl)
5021 tree type;
5023 type = TREE_TYPE (decl);
5024 if (type == error_mark_node)
5025 return;
5027 /* If we haven't already laid out this declaration, do so now.
5028 Note that we must not call complete type for an external object
5029 because it's type might involve templates that we are not
5030 supposed to instantiate yet. (And it's perfectly valid to say
5031 `extern X x' for some incomplete type `X'.) */
5032 if (!DECL_EXTERNAL (decl))
5033 complete_type (type);
5034 if (!DECL_SIZE (decl)
5035 && TREE_TYPE (decl) != error_mark_node
5036 && (COMPLETE_TYPE_P (type)
5037 || (TREE_CODE (type) == ARRAY_TYPE
5038 && !TYPE_DOMAIN (type)
5039 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
5040 layout_decl (decl, 0);
5042 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5044 /* An automatic variable with an incomplete type: that is an error.
5045 Don't talk about array types here, since we took care of that
5046 message in grokdeclarator. */
5047 error ("storage size of %qD isn%'t known", decl);
5048 TREE_TYPE (decl) = error_mark_node;
5050 #if 0
5051 /* Keep this code around in case we later want to control debug info
5052 based on whether a type is "used". (jason 1999-11-11) */
5054 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5055 /* Let debugger know it should output info for this type. */
5056 note_debug_info_needed (ttype);
5058 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5059 note_debug_info_needed (DECL_CONTEXT (decl));
5060 #endif
5062 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5063 && DECL_SIZE (decl) != NULL_TREE
5064 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5066 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5067 constant_expression_warning (DECL_SIZE (decl));
5068 else
5070 error ("storage size of %qD isn%'t constant", decl);
5071 TREE_TYPE (decl) = error_mark_node;
5076 /* If a local static variable is declared in an inline function, or if
5077 we have a weak definition, we must endeavor to create only one
5078 instance of the variable at link-time. */
5080 void
5081 maybe_commonize_var (tree decl)
5083 /* Static data in a function with comdat linkage also has comdat
5084 linkage. */
5085 if (TREE_STATIC (decl)
5086 /* Don't mess with __FUNCTION__. */
5087 && ! DECL_ARTIFICIAL (decl)
5088 && DECL_FUNCTION_SCOPE_P (decl)
5089 && vague_linkage_p (DECL_CONTEXT (decl)))
5091 if (flag_weak)
5093 /* With weak symbols, we simply make the variable COMDAT;
5094 that will cause copies in multiple translations units to
5095 be merged. */
5096 comdat_linkage (decl);
5098 else
5100 if (DECL_INITIAL (decl) == NULL_TREE
5101 || DECL_INITIAL (decl) == error_mark_node)
5103 /* Without weak symbols, we can use COMMON to merge
5104 uninitialized variables. */
5105 TREE_PUBLIC (decl) = 1;
5106 DECL_COMMON (decl) = 1;
5108 else
5110 /* While for initialized variables, we must use internal
5111 linkage -- which means that multiple copies will not
5112 be merged. */
5113 TREE_PUBLIC (decl) = 0;
5114 DECL_COMMON (decl) = 0;
5115 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5116 "sorry: semantics of inline function static "
5117 "data %q#D are wrong (you%'ll wind up "
5118 "with multiple copies)", decl))
5119 inform (DECL_SOURCE_LOCATION (decl),
5120 "you can work around this by removing the initializer");
5126 /* Issue an error message if DECL is an uninitialized const variable. */
5128 static void
5129 check_for_uninitialized_const_var (tree decl)
5131 tree type = strip_array_types (TREE_TYPE (decl));
5133 /* ``Unless explicitly declared extern, a const object does not have
5134 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5135 7.1.6 */
5136 if (VAR_P (decl)
5137 && TREE_CODE (type) != REFERENCE_TYPE
5138 && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5139 && !DECL_INITIAL (decl))
5141 tree field = default_init_uninitialized_part (type);
5142 if (!field)
5143 return;
5145 if (CP_TYPE_CONST_P (type))
5146 permerror (DECL_SOURCE_LOCATION (decl),
5147 "uninitialized const %qD", decl);
5148 else
5149 error_at (DECL_SOURCE_LOCATION (decl),
5150 "uninitialized variable %qD in %<constexpr%> function",
5151 decl);
5153 if (CLASS_TYPE_P (type))
5155 tree defaulted_ctor;
5157 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5158 "%q#T has no user-provided default constructor", type);
5159 defaulted_ctor = in_class_defaulted_default_constructor (type);
5160 if (defaulted_ctor)
5161 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5162 "constructor is not user-provided because it is "
5163 "explicitly defaulted in the class body");
5164 inform (0, "and the implicitly-defined constructor does not "
5165 "initialize %q+#D", field);
5170 /* Structure holding the current initializer being processed by reshape_init.
5171 CUR is a pointer to the current element being processed, END is a pointer
5172 after the last element present in the initializer. */
5173 typedef struct reshape_iterator_t
5175 constructor_elt *cur;
5176 constructor_elt *end;
5177 } reshape_iter;
5179 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5181 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5182 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5183 initialized. If there are no more such fields, the return value
5184 will be NULL. */
5186 tree
5187 next_initializable_field (tree field)
5189 while (field
5190 && (TREE_CODE (field) != FIELD_DECL
5191 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5192 || DECL_ARTIFICIAL (field)))
5193 field = DECL_CHAIN (field);
5195 return field;
5198 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5199 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5200 INTEGER_CST representing the size of the array minus one (the maximum index),
5201 or NULL_TREE if the array was declared without specifying the size. D is
5202 the iterator within the constructor. */
5204 static tree
5205 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5206 tsubst_flags_t complain)
5208 tree new_init;
5209 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5210 unsigned HOST_WIDE_INT max_index_cst = 0;
5211 unsigned HOST_WIDE_INT index;
5213 /* The initializer for an array is always a CONSTRUCTOR. */
5214 new_init = build_constructor (init_list_type_node, NULL);
5216 if (sized_array_p)
5218 /* Minus 1 is used for zero sized arrays. */
5219 if (integer_all_onesp (max_index))
5220 return new_init;
5222 if (tree_fits_uhwi_p (max_index))
5223 max_index_cst = tree_to_uhwi (max_index);
5224 /* sizetype is sign extended, not zero extended. */
5225 else
5226 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5229 /* Loop until there are no more initializers. */
5230 for (index = 0;
5231 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5232 ++index)
5234 tree elt_init;
5235 constructor_elt *old_cur = d->cur;
5237 check_array_designated_initializer (d->cur, index);
5238 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5239 complain);
5240 if (elt_init == error_mark_node)
5241 return error_mark_node;
5242 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5243 size_int (index), elt_init);
5244 if (!TREE_CONSTANT (elt_init))
5245 TREE_CONSTANT (new_init) = false;
5247 /* This can happen with an invalid initializer (c++/54501). */
5248 if (d->cur == old_cur && !sized_array_p)
5249 break;
5252 return new_init;
5255 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5256 Parameters are the same of reshape_init_r. */
5258 static tree
5259 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5261 tree max_index = NULL_TREE;
5263 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5265 if (TYPE_DOMAIN (type))
5266 max_index = array_type_nelts (type);
5268 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5271 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5272 Parameters are the same of reshape_init_r. */
5274 static tree
5275 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5277 tree max_index = NULL_TREE;
5279 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5281 if (COMPOUND_LITERAL_P (d->cur->value))
5283 tree value = d->cur->value;
5284 if (!same_type_p (TREE_TYPE (value), type))
5286 if (complain & tf_error)
5287 error ("invalid type %qT as initializer for a vector of type %qT",
5288 TREE_TYPE (d->cur->value), type);
5289 value = error_mark_node;
5291 ++d->cur;
5292 return value;
5295 /* For a vector, we initialize it as an array of the appropriate size. */
5296 if (TREE_CODE (type) == VECTOR_TYPE)
5297 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5299 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5302 /* Subroutine of reshape_init_r, processes the initializers for classes
5303 or union. Parameters are the same of reshape_init_r. */
5305 static tree
5306 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5307 tsubst_flags_t complain)
5309 tree field;
5310 tree new_init;
5312 gcc_assert (CLASS_TYPE_P (type));
5314 /* The initializer for a class is always a CONSTRUCTOR. */
5315 new_init = build_constructor (init_list_type_node, NULL);
5316 field = next_initializable_field (TYPE_FIELDS (type));
5318 if (!field)
5320 /* [dcl.init.aggr]
5322 An initializer for an aggregate member that is an
5323 empty class shall have the form of an empty
5324 initializer-list {}. */
5325 if (!first_initializer_p)
5327 if (complain & tf_error)
5328 error ("initializer for %qT must be brace-enclosed", type);
5329 return error_mark_node;
5331 return new_init;
5334 /* Loop through the initializable fields, gathering initializers. */
5335 while (d->cur != d->end)
5337 tree field_init;
5338 constructor_elt *old_cur = d->cur;
5340 /* Handle designated initializers, as an extension. */
5341 if (d->cur->index)
5343 if (d->cur->index == error_mark_node)
5344 return error_mark_node;
5346 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5347 /* We already reshaped this. */
5348 gcc_assert (d->cur->index == field);
5349 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5350 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5351 else
5353 if (complain & tf_error)
5354 error ("%<[%E] =%> used in a GNU-style designated initializer"
5355 " for class %qT", d->cur->index, type);
5356 return error_mark_node;
5359 if (!field || TREE_CODE (field) != FIELD_DECL)
5361 if (complain & tf_error)
5362 error ("%qT has no non-static data member named %qD", type,
5363 d->cur->index);
5364 return error_mark_node;
5368 /* If we processed all the member of the class, we are done. */
5369 if (!field)
5370 break;
5372 field_init = reshape_init_r (TREE_TYPE (field), d,
5373 /*first_initializer_p=*/false, complain);
5374 if (field_init == error_mark_node)
5375 return error_mark_node;
5377 if (d->cur == old_cur && d->cur->index)
5379 /* This can happen with an invalid initializer for a flexible
5380 array member (c++/54441). */
5381 if (complain & tf_error)
5382 error ("invalid initializer for %q#D", field);
5383 return error_mark_node;
5386 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5388 /* [dcl.init.aggr]
5390 When a union is initialized with a brace-enclosed
5391 initializer, the braces shall only contain an
5392 initializer for the first member of the union. */
5393 if (TREE_CODE (type) == UNION_TYPE)
5394 break;
5396 field = next_initializable_field (DECL_CHAIN (field));
5399 return new_init;
5402 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5403 designators are not valid; either complain or return true to indicate
5404 that reshape_init_r should return error_mark_node. */
5406 static bool
5407 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5409 if (d->cur->index)
5411 if (complain & tf_error)
5412 error ("C99 designator %qE outside aggregate initializer",
5413 d->cur->index);
5414 else
5415 return true;
5417 return false;
5420 /* Subroutine of reshape_init, which processes a single initializer (part of
5421 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5422 iterator within the CONSTRUCTOR which points to the initializer to process.
5423 FIRST_INITIALIZER_P is true if this is the first initializer of the
5424 outermost CONSTRUCTOR node. */
5426 static tree
5427 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5428 tsubst_flags_t complain)
5430 tree init = d->cur->value;
5432 if (error_operand_p (init))
5433 return error_mark_node;
5435 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5436 && has_designator_problem (d, complain))
5437 return error_mark_node;
5439 if (TREE_CODE (type) == COMPLEX_TYPE)
5441 /* A complex type can be initialized from one or two initializers,
5442 but braces are not elided. */
5443 d->cur++;
5444 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5446 if (CONSTRUCTOR_NELTS (init) > 2)
5448 if (complain & tf_error)
5449 error ("too many initializers for %qT", type);
5450 else
5451 return error_mark_node;
5454 else if (first_initializer_p && d->cur != d->end)
5456 vec<constructor_elt, va_gc> *v = 0;
5457 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5458 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5459 if (has_designator_problem (d, complain))
5460 return error_mark_node;
5461 d->cur++;
5462 init = build_constructor (init_list_type_node, v);
5464 return init;
5467 /* A non-aggregate type is always initialized with a single
5468 initializer. */
5469 if (!CP_AGGREGATE_TYPE_P (type))
5471 /* It is invalid to initialize a non-aggregate type with a
5472 brace-enclosed initializer before C++0x.
5473 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5474 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5475 a CONSTRUCTOR (with a record type). */
5476 if (TREE_CODE (init) == CONSTRUCTOR
5477 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5479 if (SCALAR_TYPE_P (type))
5481 if (complain & tf_error)
5482 error ("braces around scalar initializer for type %qT", type);
5483 init = error_mark_node;
5485 else
5486 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5489 d->cur++;
5490 return init;
5493 /* "If T is a class type and the initializer list has a single element of
5494 type cv U, where U is T or a class derived from T, the object is
5495 initialized from that element." Even if T is an aggregate. */
5496 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5497 && first_initializer_p
5498 && d->end - d->cur == 1
5499 && reference_related_p (type, TREE_TYPE (init)))
5501 d->cur++;
5502 return init;
5505 /* [dcl.init.aggr]
5507 All implicit type conversions (clause _conv_) are considered when
5508 initializing the aggregate member with an initializer from an
5509 initializer-list. If the initializer can initialize a member,
5510 the member is initialized. Otherwise, if the member is itself a
5511 non-empty subaggregate, brace elision is assumed and the
5512 initializer is considered for the initialization of the first
5513 member of the subaggregate. */
5514 if (TREE_CODE (init) != CONSTRUCTOR
5515 /* But don't try this for the first initializer, since that would be
5516 looking through the outermost braces; A a2 = { a1 }; is not a
5517 valid aggregate initialization. */
5518 && !first_initializer_p
5519 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5520 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5521 complain)))
5523 d->cur++;
5524 return init;
5527 /* [dcl.init.string]
5529 A char array (whether plain char, signed char, or unsigned char)
5530 can be initialized by a string-literal (optionally enclosed in
5531 braces); a wchar_t array can be initialized by a wide
5532 string-literal (optionally enclosed in braces). */
5533 if (TREE_CODE (type) == ARRAY_TYPE
5534 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5536 tree str_init = init;
5538 /* Strip one level of braces if and only if they enclose a single
5539 element (as allowed by [dcl.init.string]). */
5540 if (!first_initializer_p
5541 && TREE_CODE (str_init) == CONSTRUCTOR
5542 && vec_safe_length (CONSTRUCTOR_ELTS (str_init)) == 1)
5544 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5547 /* If it's a string literal, then it's the initializer for the array
5548 as a whole. Otherwise, continue with normal initialization for
5549 array types (one value per array element). */
5550 if (TREE_CODE (str_init) == STRING_CST)
5552 if (has_designator_problem (d, complain))
5553 return error_mark_node;
5554 d->cur++;
5555 return str_init;
5559 /* The following cases are about aggregates. If we are not within a full
5560 initializer already, and there is not a CONSTRUCTOR, it means that there
5561 is a missing set of braces (that is, we are processing the case for
5562 which reshape_init exists). */
5563 if (!first_initializer_p)
5565 if (TREE_CODE (init) == CONSTRUCTOR)
5567 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5568 /* There is no need to reshape pointer-to-member function
5569 initializers, as they are always constructed correctly
5570 by the front end. */
5572 else if (COMPOUND_LITERAL_P (init))
5573 /* For a nested compound literal, there is no need to reshape since
5574 brace elision is not allowed. Even if we decided to allow it,
5575 we should add a call to reshape_init in finish_compound_literal,
5576 before calling digest_init, so changing this code would still
5577 not be necessary. */
5578 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5579 else
5581 ++d->cur;
5582 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5583 return reshape_init (type, init, complain);
5587 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5588 type);
5591 /* Dispatch to specialized routines. */
5592 if (CLASS_TYPE_P (type))
5593 return reshape_init_class (type, d, first_initializer_p, complain);
5594 else if (TREE_CODE (type) == ARRAY_TYPE)
5595 return reshape_init_array (type, d, complain);
5596 else if (TREE_CODE (type) == VECTOR_TYPE)
5597 return reshape_init_vector (type, d, complain);
5598 else
5599 gcc_unreachable();
5602 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5603 brace-enclosed aggregate initializer.
5605 INIT is the CONSTRUCTOR containing the list of initializers describing
5606 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5607 It may not presently match the shape of the TYPE; for example:
5609 struct S { int a; int b; };
5610 struct S a[] = { 1, 2, 3, 4 };
5612 Here INIT will hold a vector of four elements, rather than a
5613 vector of two elements, each itself a vector of two elements. This
5614 routine transforms INIT from the former form into the latter. The
5615 revised CONSTRUCTOR node is returned. */
5617 tree
5618 reshape_init (tree type, tree init, tsubst_flags_t complain)
5620 vec<constructor_elt, va_gc> *v;
5621 reshape_iter d;
5622 tree new_init;
5624 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5626 v = CONSTRUCTOR_ELTS (init);
5628 /* An empty constructor does not need reshaping, and it is always a valid
5629 initializer. */
5630 if (vec_safe_is_empty (v))
5631 return init;
5633 /* Recurse on this CONSTRUCTOR. */
5634 d.cur = &(*v)[0];
5635 d.end = d.cur + v->length ();
5637 new_init = reshape_init_r (type, &d, true, complain);
5638 if (new_init == error_mark_node)
5639 return error_mark_node;
5641 /* Make sure all the element of the constructor were used. Otherwise,
5642 issue an error about exceeding initializers. */
5643 if (d.cur != d.end)
5645 if (complain & tf_error)
5646 error ("too many initializers for %qT", type);
5647 else
5648 return error_mark_node;
5651 return new_init;
5654 /* Verify array initializer. Returns true if errors have been reported. */
5656 bool
5657 check_array_initializer (tree decl, tree type, tree init)
5659 tree element_type = TREE_TYPE (type);
5661 /* The array type itself need not be complete, because the
5662 initializer may tell us how many elements are in the array.
5663 But, the elements of the array must be complete. */
5664 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5666 if (decl)
5667 error ("elements of array %q#D have incomplete type", decl);
5668 else
5669 error ("elements of array %q#T have incomplete type", type);
5670 return true;
5672 /* A compound literal can't have variable size. */
5673 if (init && !decl
5674 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5675 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5677 error ("variable-sized compound literal");
5678 return true;
5680 return false;
5683 /* Subroutine of check_initializer; args are passed down from that function.
5684 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5686 static tree
5687 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5690 gcc_assert (stmts_are_full_exprs_p ());
5691 return build_aggr_init (decl, init, flags, tf_warning_or_error);
5694 /* Verify INIT (the initializer for DECL), and record the
5695 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5696 grok_reference_init.
5698 If the return value is non-NULL, it is an expression that must be
5699 evaluated dynamically to initialize DECL. */
5701 static tree
5702 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
5704 tree type = TREE_TYPE (decl);
5705 tree init_code = NULL;
5706 tree core_type;
5708 /* Things that are going to be initialized need to have complete
5709 type. */
5710 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5712 if (DECL_HAS_VALUE_EXPR_P (decl))
5714 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5715 it doesn't have storage to be initialized. */
5716 gcc_assert (init == NULL_TREE);
5717 return NULL_TREE;
5720 if (type == error_mark_node)
5721 /* We will have already complained. */
5722 return NULL_TREE;
5724 if (TREE_CODE (type) == ARRAY_TYPE)
5726 if (check_array_initializer (decl, type, init))
5727 return NULL_TREE;
5729 else if (!COMPLETE_TYPE_P (type))
5731 error ("%q#D has incomplete type", decl);
5732 TREE_TYPE (decl) = error_mark_node;
5733 return NULL_TREE;
5735 else
5736 /* There is no way to make a variable-sized class type in GNU C++. */
5737 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5739 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5741 int init_len = vec_safe_length (CONSTRUCTOR_ELTS (init));
5742 if (SCALAR_TYPE_P (type))
5744 if (init_len == 0)
5746 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5747 init = build_zero_init (type, NULL_TREE, false);
5749 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5751 error ("scalar object %qD requires one element in initializer",
5752 decl);
5753 TREE_TYPE (decl) = error_mark_node;
5754 return NULL_TREE;
5759 if (TREE_CODE (decl) == CONST_DECL)
5761 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5763 DECL_INITIAL (decl) = init;
5765 gcc_assert (init != NULL_TREE);
5766 init = NULL_TREE;
5768 else if (!init && DECL_REALLY_EXTERN (decl))
5770 else if (init || type_build_ctor_call (type)
5771 || TREE_CODE (type) == REFERENCE_TYPE)
5773 if (TREE_CODE (type) == REFERENCE_TYPE)
5775 init = grok_reference_init (decl, type, init, flags);
5776 flags |= LOOKUP_ALREADY_DIGESTED;
5778 else if (!init)
5779 check_for_uninitialized_const_var (decl);
5780 /* Do not reshape constructors of vectors (they don't need to be
5781 reshaped. */
5782 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5784 if (is_std_init_list (type))
5786 init = perform_implicit_conversion (type, init,
5787 tf_warning_or_error);
5788 flags |= LOOKUP_ALREADY_DIGESTED;
5790 else if (TYPE_NON_AGGREGATE_CLASS (type))
5792 /* Don't reshape if the class has constructors. */
5793 if (cxx_dialect == cxx98)
5794 error ("in C++98 %qD must be initialized by constructor, "
5795 "not by %<{...}%>",
5796 decl);
5798 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5800 error ("opaque vector types cannot be initialized");
5801 init = error_mark_node;
5803 else
5805 init = reshape_init (type, init, tf_warning_or_error);
5806 flags |= LOOKUP_NO_NARROWING;
5809 else if (TREE_CODE (init) == TREE_LIST
5810 && TREE_TYPE (init) != unknown_type_node
5811 && !MAYBE_CLASS_TYPE_P (type))
5813 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5815 /* We get here with code like `int a (2);' */
5816 init = build_x_compound_expr_from_list (init, ELK_INIT,
5817 tf_warning_or_error);
5820 /* If DECL has an array type without a specific bound, deduce the
5821 array size from the initializer. */
5822 maybe_deduce_size_from_array_init (decl, init);
5823 type = TREE_TYPE (decl);
5824 if (type == error_mark_node)
5825 return NULL_TREE;
5827 if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5828 && !(flags & LOOKUP_ALREADY_DIGESTED)
5829 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5830 && CP_AGGREGATE_TYPE_P (type)
5831 && (CLASS_TYPE_P (type)
5832 || !TYPE_NEEDS_CONSTRUCTING (type)
5833 || type_has_extended_temps (type))))
5835 init_code = build_aggr_init_full_exprs (decl, init, flags);
5837 /* A constructor call is a non-trivial initializer even if
5838 it isn't explicitly written. */
5839 if (TREE_SIDE_EFFECTS (init_code))
5840 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
5842 /* If this is a constexpr initializer, expand_default_init will
5843 have returned an INIT_EXPR rather than a CALL_EXPR. In that
5844 case, pull the initializer back out and pass it down into
5845 store_init_value. */
5846 while (TREE_CODE (init_code) == EXPR_STMT
5847 || TREE_CODE (init_code) == CONVERT_EXPR)
5848 init_code = TREE_OPERAND (init_code, 0);
5849 if (TREE_CODE (init_code) == INIT_EXPR)
5851 init = TREE_OPERAND (init_code, 1);
5852 init_code = NULL_TREE;
5853 /* Don't call digest_init; it's unnecessary and will complain
5854 about aggregate initialization of non-aggregate classes. */
5855 flags |= LOOKUP_ALREADY_DIGESTED;
5857 else if (DECL_DECLARED_CONSTEXPR_P (decl))
5859 /* Declared constexpr, but no suitable initializer; massage
5860 init appropriately so we can pass it into store_init_value
5861 for the error. */
5862 if (CLASS_TYPE_P (type)
5863 && (!init || TREE_CODE (init) == TREE_LIST))
5865 init = build_functional_cast (type, init, tf_none);
5866 if (TREE_CODE (init) == TARGET_EXPR)
5867 TARGET_EXPR_DIRECT_INIT_P (init) = true;
5869 init_code = NULL_TREE;
5871 else
5872 init = NULL_TREE;
5875 if (init && TREE_CODE (init) != TREE_VEC)
5877 /* In aggregate initialization of a variable, each element
5878 initialization is a full-expression because there is no
5879 enclosing expression. */
5880 gcc_assert (stmts_are_full_exprs_p ());
5882 init_code = store_init_value (decl, init, cleanups, flags);
5884 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5885 && DECL_INITIAL (decl)
5886 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5887 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5888 warning (0, "array %qD initialized by parenthesized string literal %qE",
5889 decl, DECL_INITIAL (decl));
5890 init = NULL;
5893 else
5895 if (CLASS_TYPE_P (core_type = strip_array_types (type))
5896 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5897 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5898 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5899 /*complain=*/true);
5901 check_for_uninitialized_const_var (decl);
5904 if (init && init != error_mark_node)
5905 init_code = build2 (INIT_EXPR, type, decl, init);
5907 if (init_code)
5909 /* We might have set these in cp_finish_decl. */
5910 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
5911 TREE_CONSTANT (decl) = false;
5914 if (init_code && DECL_IN_AGGR_P (decl))
5916 static int explained = 0;
5918 if (cxx_dialect < cxx11)
5919 error ("initializer invalid for static member with constructor");
5920 else
5921 error ("non-constant in-class initialization invalid for static "
5922 "member %qD", decl);
5923 if (!explained)
5925 inform (input_location,
5926 "(an out of class initialization is required)");
5927 explained = 1;
5929 return NULL_TREE;
5932 return init_code;
5935 /* If DECL is not a local variable, give it RTL. */
5937 static void
5938 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5940 int toplev = toplevel_bindings_p ();
5941 int defer_p;
5942 const char *filename;
5944 /* Set the DECL_ASSEMBLER_NAME for the object. */
5945 if (asmspec)
5947 /* The `register' keyword, when used together with an
5948 asm-specification, indicates that the variable should be
5949 placed in a particular register. */
5950 if (VAR_P (decl) && DECL_REGISTER (decl))
5952 set_user_assembler_name (decl, asmspec);
5953 DECL_HARD_REGISTER (decl) = 1;
5955 else
5957 if (TREE_CODE (decl) == FUNCTION_DECL
5958 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5959 set_builtin_user_assembler_name (decl, asmspec);
5960 set_user_assembler_name (decl, asmspec);
5964 /* Handle non-variables up front. */
5965 if (!VAR_P (decl))
5967 rest_of_decl_compilation (decl, toplev, at_eof);
5968 return;
5971 /* If we see a class member here, it should be a static data
5972 member. */
5973 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5975 gcc_assert (TREE_STATIC (decl));
5976 /* An in-class declaration of a static data member should be
5977 external; it is only a declaration, and not a definition. */
5978 if (init == NULL_TREE)
5979 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5982 /* We don't create any RTL for local variables. */
5983 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5984 return;
5986 /* We defer emission of local statics until the corresponding
5987 DECL_EXPR is expanded. */
5988 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5990 /* We try to defer namespace-scope static constants so that they are
5991 not emitted into the object file unnecessarily. */
5992 filename = LOCATION_FILE (input_location);
5993 if (!DECL_VIRTUAL_P (decl)
5994 && TREE_READONLY (decl)
5995 && DECL_INITIAL (decl) != NULL_TREE
5996 && DECL_INITIAL (decl) != error_mark_node
5997 && filename != NULL
5998 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5999 && toplev
6000 && !TREE_PUBLIC (decl))
6002 /* Fool with the linkage of static consts according to #pragma
6003 interface. */
6004 struct c_fileinfo *finfo = get_fileinfo (filename);
6005 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
6007 TREE_PUBLIC (decl) = 1;
6008 DECL_EXTERNAL (decl) = finfo->interface_only;
6011 defer_p = 1;
6013 /* Likewise for template instantiations. */
6014 else if (DECL_LANG_SPECIFIC (decl)
6015 && DECL_IMPLICIT_INSTANTIATION (decl))
6016 defer_p = 1;
6018 /* If we're not deferring, go ahead and assemble the variable. */
6019 if (!defer_p)
6020 rest_of_decl_compilation (decl, toplev, at_eof);
6023 /* walk_tree helper for wrap_temporary_cleanups, below. */
6025 static tree
6026 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6028 /* Stop at types or full-expression boundaries. */
6029 if (TYPE_P (*stmt_p)
6030 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6032 *walk_subtrees = 0;
6033 return NULL_TREE;
6036 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6038 tree guard = (tree)data;
6039 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6041 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6042 /* Tell honor_protect_cleanup_actions to handle this as a separate
6043 cleanup. */
6044 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6046 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6049 return NULL_TREE;
6052 /* We're initializing a local variable which has a cleanup GUARD. If there
6053 are any temporaries used in the initializer INIT of this variable, we
6054 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6055 variable will be cleaned up properly if one of them throws.
6057 Unfortunately, there's no way to express this properly in terms of
6058 nesting, as the regions for the temporaries overlap the region for the
6059 variable itself; if there are two temporaries, the variable needs to be
6060 the first thing destroyed if either of them throws. However, we only
6061 want to run the variable's cleanup if it actually got constructed. So
6062 we need to guard the temporary cleanups with the variable's cleanup if
6063 they are run on the normal path, but not if they are run on the
6064 exceptional path. We implement this by telling
6065 honor_protect_cleanup_actions to strip the variable cleanup from the
6066 exceptional path. */
6068 static void
6069 wrap_temporary_cleanups (tree init, tree guard)
6071 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6074 /* Generate code to initialize DECL (a local variable). */
6076 static void
6077 initialize_local_var (tree decl, tree init)
6079 tree type = TREE_TYPE (decl);
6080 tree cleanup;
6081 int already_used;
6083 gcc_assert (VAR_P (decl)
6084 || TREE_CODE (decl) == RESULT_DECL);
6085 gcc_assert (!TREE_STATIC (decl));
6087 if (DECL_SIZE (decl) == NULL_TREE)
6089 /* If we used it already as memory, it must stay in memory. */
6090 DECL_INITIAL (decl) = NULL_TREE;
6091 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6092 return;
6095 if (type == error_mark_node)
6096 return;
6098 /* Compute and store the initial value. */
6099 already_used = TREE_USED (decl) || TREE_USED (type);
6100 if (TREE_USED (type))
6101 DECL_READ_P (decl) = 1;
6103 /* Generate a cleanup, if necessary. */
6104 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6106 /* Perform the initialization. */
6107 if (init)
6109 if (TREE_CODE (init) == INIT_EXPR
6110 && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
6112 /* Stick simple initializers in DECL_INITIAL so that
6113 -Wno-init-self works (c++/34772). */
6114 gcc_assert (TREE_OPERAND (init, 0) == decl);
6115 DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
6117 else
6119 int saved_stmts_are_full_exprs_p;
6121 /* If we're only initializing a single object, guard the
6122 destructors of any temporaries used in its initializer with
6123 its destructor. This isn't right for arrays because each
6124 element initialization is a full-expression. */
6125 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6126 wrap_temporary_cleanups (init, cleanup);
6128 gcc_assert (building_stmt_list_p ());
6129 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6130 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6131 finish_expr_stmt (init);
6132 current_stmt_tree ()->stmts_are_full_exprs_p =
6133 saved_stmts_are_full_exprs_p;
6137 /* Set this to 0 so we can tell whether an aggregate which was
6138 initialized was ever used. Don't do this if it has a
6139 destructor, so we don't complain about the 'resource
6140 allocation is initialization' idiom. Now set
6141 attribute((unused)) on types so decls of that type will be
6142 marked used. (see TREE_USED, above.) */
6143 if (TYPE_NEEDS_CONSTRUCTING (type)
6144 && ! already_used
6145 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6146 && DECL_NAME (decl))
6147 TREE_USED (decl) = 0;
6148 else if (already_used)
6149 TREE_USED (decl) = 1;
6151 if (cleanup)
6152 finish_decl_cleanup (decl, cleanup);
6155 /* DECL is a VAR_DECL for a compiler-generated variable with static
6156 storage duration (like a virtual table) whose initializer is a
6157 compile-time constant. Initialize the variable and provide it to the
6158 back end. */
6160 void
6161 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6163 tree init;
6164 gcc_assert (DECL_ARTIFICIAL (decl));
6165 init = build_constructor (TREE_TYPE (decl), v);
6166 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6167 DECL_INITIAL (decl) = init;
6168 DECL_INITIALIZED_P (decl) = 1;
6169 determine_visibility (decl);
6170 layout_var_decl (decl);
6171 maybe_commonize_var (decl);
6172 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6175 /* INIT is the initializer for a variable, as represented by the
6176 parser. Returns true iff INIT is type-dependent. */
6178 static bool
6179 type_dependent_init_p (tree init)
6181 if (TREE_CODE (init) == TREE_LIST)
6182 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6183 return any_type_dependent_elements_p (init);
6184 else if (TREE_CODE (init) == CONSTRUCTOR)
6185 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6187 vec<constructor_elt, va_gc> *elts;
6188 size_t nelts;
6189 size_t i;
6191 elts = CONSTRUCTOR_ELTS (init);
6192 nelts = vec_safe_length (elts);
6193 for (i = 0; i < nelts; ++i)
6194 if (type_dependent_init_p ((*elts)[i].value))
6195 return true;
6197 else
6198 /* It must be a simple expression, e.g., int i = 3; */
6199 return type_dependent_expression_p (init);
6201 return false;
6204 /* INIT is the initializer for a variable, as represented by the
6205 parser. Returns true iff INIT is value-dependent. */
6207 static bool
6208 value_dependent_init_p (tree init)
6210 if (TREE_CODE (init) == TREE_LIST)
6211 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6212 return any_value_dependent_elements_p (init);
6213 else if (TREE_CODE (init) == CONSTRUCTOR)
6214 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6216 vec<constructor_elt, va_gc> *elts;
6217 size_t nelts;
6218 size_t i;
6220 elts = CONSTRUCTOR_ELTS (init);
6221 nelts = vec_safe_length (elts);
6222 for (i = 0; i < nelts; ++i)
6223 if (value_dependent_init_p ((*elts)[i].value))
6224 return true;
6226 else
6227 /* It must be a simple expression, e.g., int i = 3; */
6228 return value_dependent_expression_p (init);
6230 return false;
6233 /* Finish processing of a declaration;
6234 install its line number and initial value.
6235 If the length of an array type is not known before,
6236 it must be determined now, from the initial value, or it is an error.
6238 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6239 true, then INIT is an integral constant expression.
6241 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6242 if the (init) syntax was used. */
6244 void
6245 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6246 tree asmspec_tree, int flags)
6248 tree type;
6249 vec<tree, va_gc> *cleanups = NULL;
6250 const char *asmspec = NULL;
6251 int was_readonly = 0;
6252 bool var_definition_p = false;
6253 tree auto_node;
6255 if (decl == error_mark_node)
6256 return;
6257 else if (! decl)
6259 if (init)
6260 error ("assignment (not initialization) in declaration");
6261 return;
6264 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6265 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6266 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6268 type = TREE_TYPE (decl);
6269 if (type == error_mark_node)
6270 return;
6272 /* If a name was specified, get the string. */
6273 if (at_namespace_scope_p ())
6274 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6275 if (asmspec_tree && asmspec_tree != error_mark_node)
6276 asmspec = TREE_STRING_POINTER (asmspec_tree);
6278 if (current_class_type
6279 && CP_DECL_CONTEXT (decl) == current_class_type
6280 && TYPE_BEING_DEFINED (current_class_type)
6281 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6282 && (DECL_INITIAL (decl) || init))
6283 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6285 if (TREE_CODE (decl) != FUNCTION_DECL
6286 && (auto_node = type_uses_auto (type)))
6288 tree d_init;
6289 if (init == NULL_TREE)
6291 if (DECL_LANG_SPECIFIC (decl)
6292 && DECL_TEMPLATE_INSTANTIATION (decl)
6293 && !DECL_TEMPLATE_INSTANTIATED (decl))
6295 /* init is null because we're deferring instantiating the
6296 initializer until we need it. Well, we need it now. */
6297 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6298 return;
6301 error ("declaration of %q#D has no initializer", decl);
6302 TREE_TYPE (decl) = error_mark_node;
6303 return;
6305 d_init = init;
6306 if (TREE_CODE (d_init) == TREE_LIST)
6307 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6308 tf_warning_or_error);
6309 d_init = resolve_nondeduced_context (d_init);
6310 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6311 auto_node);
6312 if (type == error_mark_node)
6313 return;
6314 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6317 if (!ensure_literal_type_for_constexpr_object (decl))
6318 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6320 if (VAR_P (decl)
6321 && DECL_CLASS_SCOPE_P (decl)
6322 && DECL_INITIALIZED_IN_CLASS_P (decl))
6323 check_static_variable_definition (decl, type);
6325 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6327 tree clone;
6328 if (init == ridpointers[(int)RID_DELETE])
6330 /* FIXME check this is 1st decl. */
6331 DECL_DELETED_FN (decl) = 1;
6332 DECL_DECLARED_INLINE_P (decl) = 1;
6333 DECL_INITIAL (decl) = error_mark_node;
6334 FOR_EACH_CLONE (clone, decl)
6336 DECL_DELETED_FN (clone) = 1;
6337 DECL_DECLARED_INLINE_P (clone) = 1;
6338 DECL_INITIAL (clone) = error_mark_node;
6340 init = NULL_TREE;
6342 else if (init == ridpointers[(int)RID_DEFAULT])
6344 if (defaultable_fn_check (decl))
6345 DECL_DEFAULTED_FN (decl) = 1;
6346 else
6347 DECL_INITIAL (decl) = NULL_TREE;
6351 if (init && VAR_P (decl))
6353 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6354 /* If DECL is a reference, then we want to know whether init is a
6355 reference constant; init_const_expr_p as passed tells us whether
6356 it's an rvalue constant. */
6357 if (TREE_CODE (type) == REFERENCE_TYPE)
6358 init_const_expr_p = potential_constant_expression (init);
6359 if (init_const_expr_p)
6361 /* Set these flags now for templates. We'll update the flags in
6362 store_init_value for instantiations. */
6363 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6364 if (decl_maybe_constant_var_p (decl))
6365 TREE_CONSTANT (decl) = 1;
6369 if (processing_template_decl)
6371 bool type_dependent_p;
6373 /* Add this declaration to the statement-tree. */
6374 if (at_function_scope_p ())
6375 add_decl_expr (decl);
6377 type_dependent_p = dependent_type_p (type);
6379 if (check_for_bare_parameter_packs (init))
6381 init = NULL_TREE;
6382 DECL_INITIAL (decl) = NULL_TREE;
6385 /* Generally, initializers in templates are expanded when the
6386 template is instantiated. But, if DECL is a variable constant
6387 then it can be used in future constant expressions, so its value
6388 must be available. */
6390 if (!VAR_P (decl) || dependent_type_p (type))
6391 /* We can't do anything if the decl has dependent type. */;
6392 else if (init
6393 && init_const_expr_p
6394 && !type_dependent_p
6395 && decl_maybe_constant_var_p (decl)
6396 && !type_dependent_init_p (init)
6397 && !value_dependent_init_p (init))
6399 /* This variable seems to be a non-dependent constant, so process
6400 its initializer. If check_initializer returns non-null the
6401 initialization wasn't constant after all. */
6402 tree init_code;
6403 cleanups = make_tree_vector ();
6404 init_code = check_initializer (decl, init, flags, &cleanups);
6405 if (init_code == NULL_TREE)
6406 init = NULL_TREE;
6407 release_tree_vector (cleanups);
6409 else if (!DECL_PRETTY_FUNCTION_P (decl))
6411 /* Deduce array size even if the initializer is dependent. */
6412 maybe_deduce_size_from_array_init (decl, init);
6413 /* And complain about multiple initializers. */
6414 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6415 && !MAYBE_CLASS_TYPE_P (type))
6416 init = build_x_compound_expr_from_list (init, ELK_INIT,
6417 tf_warning_or_error);
6420 if (init)
6421 DECL_INITIAL (decl) = init;
6422 return;
6425 /* Just store non-static data member initializers for later. */
6426 if (init && TREE_CODE (decl) == FIELD_DECL)
6427 DECL_INITIAL (decl) = init;
6429 /* Take care of TYPE_DECLs up front. */
6430 if (TREE_CODE (decl) == TYPE_DECL)
6432 if (type != error_mark_node
6433 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6435 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6436 warning (0, "shadowing previous type declaration of %q#D", decl);
6437 set_identifier_type_value (DECL_NAME (decl), decl);
6440 /* If we have installed this as the canonical typedef for this
6441 type, and that type has not been defined yet, delay emitting
6442 the debug information for it, as we will emit it later. */
6443 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6444 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6445 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6447 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6448 at_eof);
6449 return;
6452 /* A reference will be modified here, as it is initialized. */
6453 if (! DECL_EXTERNAL (decl)
6454 && TREE_READONLY (decl)
6455 && TREE_CODE (type) == REFERENCE_TYPE)
6457 was_readonly = 1;
6458 TREE_READONLY (decl) = 0;
6461 if (VAR_P (decl))
6463 /* If this is a local variable that will need a mangled name,
6464 register it now. We must do this before processing the
6465 initializer for the variable, since the initialization might
6466 require a guard variable, and since the mangled name of the
6467 guard variable will depend on the mangled name of this
6468 variable. */
6469 if (DECL_FUNCTION_SCOPE_P (decl)
6470 && TREE_STATIC (decl)
6471 && !DECL_ARTIFICIAL (decl))
6473 push_local_name (decl);
6474 if (DECL_CONSTRUCTOR_P (current_function_decl)
6475 || DECL_DESTRUCTOR_P (current_function_decl))
6476 /* Normally local_decls is populated during GIMPLE lowering,
6477 but [cd]tors are never actually compiled directly. We need
6478 to put statics on the list so we can deal with the label
6479 address extension. FIXME. */
6480 add_local_decl (cfun, decl);
6483 /* Convert the initializer to the type of DECL, if we have not
6484 already initialized DECL. */
6485 if (!DECL_INITIALIZED_P (decl)
6486 /* If !DECL_EXTERNAL then DECL is being defined. In the
6487 case of a static data member initialized inside the
6488 class-specifier, there can be an initializer even if DECL
6489 is *not* defined. */
6490 && (!DECL_EXTERNAL (decl) || init))
6492 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6494 tree jclass
6495 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6496 /* Allow libjava/prims.cc define primitive classes. */
6497 if (init != NULL_TREE
6498 || jclass == NULL_TREE
6499 || TREE_CODE (jclass) != TYPE_DECL
6500 || !POINTER_TYPE_P (TREE_TYPE (jclass))
6501 || !same_type_ignoring_top_level_qualifiers_p
6502 (type, TREE_TYPE (TREE_TYPE (jclass))))
6503 error ("Java object %qD not allocated with %<new%>", decl);
6504 init = NULL_TREE;
6506 cleanups = make_tree_vector ();
6507 init = check_initializer (decl, init, flags, &cleanups);
6509 /* Handle:
6511 [dcl.init]
6513 The memory occupied by any object of static storage
6514 duration is zero-initialized at program startup before
6515 any other initialization takes place.
6517 We cannot create an appropriate initializer until after
6518 the type of DECL is finalized. If DECL_INITIAL is set,
6519 then the DECL is statically initialized, and any
6520 necessary zero-initialization has already been performed. */
6521 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6522 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6523 /*nelts=*/NULL_TREE,
6524 /*static_storage_p=*/true);
6525 /* Remember that the initialization for this variable has
6526 taken place. */
6527 DECL_INITIALIZED_P (decl) = 1;
6528 /* This declaration is the definition of this variable,
6529 unless we are initializing a static data member within
6530 the class specifier. */
6531 if (!DECL_EXTERNAL (decl))
6532 var_definition_p = true;
6534 /* If the variable has an array type, lay out the type, even if
6535 there is no initializer. It is valid to index through the
6536 array, and we must get TYPE_ALIGN set correctly on the array
6537 type. */
6538 else if (TREE_CODE (type) == ARRAY_TYPE)
6539 layout_type (type);
6541 if (TREE_STATIC (decl)
6542 && !at_function_scope_p ()
6543 && current_function_decl == NULL)
6544 /* So decl is a global variable or a static member of a
6545 non local class. Record the types it uses
6546 so that we can decide later to emit debug info for them. */
6547 record_types_used_by_current_var_decl (decl);
6549 else if (TREE_CODE (decl) == FIELD_DECL
6550 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6551 error ("non-static data member %qD has Java class type", decl);
6553 /* Add this declaration to the statement-tree. This needs to happen
6554 after the call to check_initializer so that the DECL_EXPR for a
6555 reference temp is added before the DECL_EXPR for the reference itself. */
6556 if (DECL_FUNCTION_SCOPE_P (decl))
6558 /* If we're building a variable sized type, and we might be
6559 reachable other than via the top of the current binding
6560 level, then create a new BIND_EXPR so that we deallocate
6561 the object at the right time. */
6562 if (VAR_P (decl)
6563 && DECL_SIZE (decl)
6564 && !TREE_CONSTANT (DECL_SIZE (decl))
6565 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
6567 tree bind;
6568 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
6569 TREE_SIDE_EFFECTS (bind) = 1;
6570 add_stmt (bind);
6571 BIND_EXPR_BODY (bind) = push_stmt_list ();
6573 add_decl_expr (decl);
6576 /* Let the middle end know about variables and functions -- but not
6577 static data members in uninstantiated class templates. */
6578 if (VAR_OR_FUNCTION_DECL_P (decl))
6580 if (VAR_P (decl))
6582 layout_var_decl (decl);
6583 maybe_commonize_var (decl);
6586 /* This needs to happen after the linkage is set. */
6587 determine_visibility (decl);
6589 if (var_definition_p && TREE_STATIC (decl))
6591 /* If a TREE_READONLY variable needs initialization
6592 at runtime, it is no longer readonly and we need to
6593 avoid MEM_READONLY_P being set on RTL created for it. */
6594 if (init)
6596 if (TREE_READONLY (decl))
6597 TREE_READONLY (decl) = 0;
6598 was_readonly = 0;
6600 else if (was_readonly)
6601 TREE_READONLY (decl) = 1;
6603 /* Likewise if it needs destruction. */
6604 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6605 TREE_READONLY (decl) = 0;
6608 make_rtl_for_nonlocal_decl (decl, init, asmspec);
6610 /* Check for abstractness of the type. Notice that there is no
6611 need to strip array types here since the check for those types
6612 is already done within create_array_type_for_decl. */
6613 abstract_virtuals_error (decl, type);
6615 if (TREE_TYPE (decl) == error_mark_node)
6616 /* No initialization required. */
6618 else if (TREE_CODE (decl) == FUNCTION_DECL)
6620 if (init)
6622 if (init == ridpointers[(int)RID_DEFAULT])
6624 /* An out-of-class default definition is defined at
6625 the point where it is explicitly defaulted. */
6626 if (DECL_DELETED_FN (decl))
6627 maybe_explain_implicit_delete (decl);
6628 else if (DECL_INITIAL (decl) == error_mark_node)
6629 synthesize_method (decl);
6631 else
6632 error ("function %q#D is initialized like a variable", decl);
6634 /* else no initialization required. */
6636 else if (DECL_EXTERNAL (decl)
6637 && ! (DECL_LANG_SPECIFIC (decl)
6638 && DECL_NOT_REALLY_EXTERN (decl)))
6640 if (init)
6641 DECL_INITIAL (decl) = init;
6643 /* A variable definition. */
6644 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6645 /* Initialize the local variable. */
6646 initialize_local_var (decl, init);
6648 /* If a variable is defined, and then a subsequent
6649 definition with external linkage is encountered, we will
6650 get here twice for the same variable. We want to avoid
6651 calling expand_static_init more than once. For variables
6652 that are not static data members, we can call
6653 expand_static_init only when we actually process the
6654 initializer. It is not legal to redeclare a static data
6655 member, so this issue does not arise in that case. */
6656 else if (var_definition_p && TREE_STATIC (decl))
6657 expand_static_init (decl, init);
6660 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6661 reference, insert it in the statement-tree now. */
6662 if (cleanups)
6664 unsigned i; tree t;
6665 FOR_EACH_VEC_ELT (*cleanups, i, t)
6666 push_cleanup (decl, t, false);
6667 release_tree_vector (cleanups);
6670 if (was_readonly)
6671 TREE_READONLY (decl) = 1;
6673 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6676 /* Returns a declaration for a VAR_DECL as if:
6678 extern "C" TYPE NAME;
6680 had been seen. Used to create compiler-generated global
6681 variables. */
6683 static tree
6684 declare_global_var (tree name, tree type)
6686 tree decl;
6688 push_to_top_level ();
6689 decl = build_decl (input_location, VAR_DECL, name, type);
6690 TREE_PUBLIC (decl) = 1;
6691 DECL_EXTERNAL (decl) = 1;
6692 DECL_ARTIFICIAL (decl) = 1;
6693 /* If the user has explicitly declared this variable (perhaps
6694 because the code we are compiling is part of a low-level runtime
6695 library), then it is possible that our declaration will be merged
6696 with theirs by pushdecl. */
6697 decl = pushdecl (decl);
6698 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6699 pop_from_top_level ();
6701 return decl;
6704 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6705 if "__cxa_atexit" is not being used) corresponding to the function
6706 to be called when the program exits. */
6708 static tree
6709 get_atexit_fn_ptr_type (void)
6711 tree fn_type;
6713 if (!atexit_fn_ptr_type_node)
6715 tree arg_type;
6716 if (flag_use_cxa_atexit
6717 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6718 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
6719 arg_type = ptr_type_node;
6720 else
6721 /* The parameter to "atexit" is "void (*)(void)". */
6722 arg_type = NULL_TREE;
6724 fn_type = build_function_type_list (void_type_node,
6725 arg_type, NULL_TREE);
6726 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6729 return atexit_fn_ptr_type_node;
6732 /* Returns a pointer to the `atexit' function. Note that if
6733 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6734 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6736 static tree
6737 get_atexit_node (void)
6739 tree atexit_fndecl;
6740 tree fn_type;
6741 tree fn_ptr_type;
6742 const char *name;
6743 bool use_aeabi_atexit;
6745 if (atexit_node)
6746 return atexit_node;
6748 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6750 /* The declaration for `__cxa_atexit' is:
6752 int __cxa_atexit (void (*)(void *), void *, void *)
6754 We build up the argument types and then the function type
6755 itself. */
6756 tree argtype0, argtype1, argtype2;
6758 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6759 /* First, build the pointer-to-function type for the first
6760 argument. */
6761 fn_ptr_type = get_atexit_fn_ptr_type ();
6762 /* Then, build the rest of the argument types. */
6763 argtype2 = ptr_type_node;
6764 if (use_aeabi_atexit)
6766 argtype1 = fn_ptr_type;
6767 argtype0 = ptr_type_node;
6769 else
6771 argtype1 = ptr_type_node;
6772 argtype0 = fn_ptr_type;
6774 /* And the final __cxa_atexit type. */
6775 fn_type = build_function_type_list (integer_type_node,
6776 argtype0, argtype1, argtype2,
6777 NULL_TREE);
6778 if (use_aeabi_atexit)
6779 name = "__aeabi_atexit";
6780 else
6781 name = "__cxa_atexit";
6783 else
6785 /* The declaration for `atexit' is:
6787 int atexit (void (*)());
6789 We build up the argument types and then the function type
6790 itself. */
6791 fn_ptr_type = get_atexit_fn_ptr_type ();
6792 /* Build the final atexit type. */
6793 fn_type = build_function_type_list (integer_type_node,
6794 fn_ptr_type, NULL_TREE);
6795 name = "atexit";
6798 /* Now, build the function declaration. */
6799 push_lang_context (lang_name_c);
6800 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
6801 mark_used (atexit_fndecl);
6802 pop_lang_context ();
6803 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
6805 return atexit_node;
6808 /* Like get_atexit_node, but for thread-local cleanups. */
6810 static tree
6811 get_thread_atexit_node (void)
6813 /* The declaration for `__cxa_thread_atexit' is:
6815 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
6816 tree fn_type = build_function_type_list (integer_type_node,
6817 get_atexit_fn_ptr_type (),
6818 ptr_type_node, ptr_type_node,
6819 NULL_TREE);
6821 /* Now, build the function declaration. */
6822 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
6823 ECF_LEAF | ECF_NOTHROW);
6824 return decay_conversion (atexit_fndecl, tf_warning_or_error);
6827 /* Returns the __dso_handle VAR_DECL. */
6829 static tree
6830 get_dso_handle_node (void)
6832 if (dso_handle_node)
6833 return dso_handle_node;
6835 /* Declare the variable. */
6836 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6837 ptr_type_node);
6839 #ifdef HAVE_GAS_HIDDEN
6840 if (dso_handle_node != error_mark_node)
6842 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6843 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6845 #endif
6847 return dso_handle_node;
6850 /* Begin a new function with internal linkage whose job will be simply
6851 to destroy some particular variable. */
6853 static GTY(()) int start_cleanup_cnt;
6855 static tree
6856 start_cleanup_fn (void)
6858 char name[32];
6859 tree fntype;
6860 tree fndecl;
6861 bool use_cxa_atexit = flag_use_cxa_atexit
6862 && !targetm.cxx.use_atexit_for_cxa_atexit ();
6864 push_to_top_level ();
6866 /* No need to mangle this. */
6867 push_lang_context (lang_name_c);
6869 /* Build the name of the function. */
6870 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6871 /* Build the function declaration. */
6872 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6873 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6874 /* It's a function with internal linkage, generated by the
6875 compiler. */
6876 TREE_PUBLIC (fndecl) = 0;
6877 DECL_ARTIFICIAL (fndecl) = 1;
6878 /* Make the function `inline' so that it is only emitted if it is
6879 actually needed. It is unlikely that it will be inlined, since
6880 it is only called via a function pointer, but we avoid unnecessary
6881 emissions this way. */
6882 DECL_DECLARED_INLINE_P (fndecl) = 1;
6883 DECL_INTERFACE_KNOWN (fndecl) = 1;
6884 /* Build the parameter. */
6885 if (use_cxa_atexit)
6887 tree parmdecl;
6889 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6890 DECL_CONTEXT (parmdecl) = fndecl;
6891 TREE_USED (parmdecl) = 1;
6892 DECL_READ_P (parmdecl) = 1;
6893 DECL_ARGUMENTS (fndecl) = parmdecl;
6896 pushdecl (fndecl);
6897 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6899 pop_lang_context ();
6901 return current_function_decl;
6904 /* Finish the cleanup function begun by start_cleanup_fn. */
6906 static void
6907 end_cleanup_fn (void)
6909 expand_or_defer_fn (finish_function (0));
6911 pop_from_top_level ();
6914 /* Generate code to handle the destruction of DECL, an object with
6915 static storage duration. */
6917 tree
6918 register_dtor_fn (tree decl)
6920 tree cleanup;
6921 tree addr;
6922 tree compound_stmt;
6923 tree fcall;
6924 tree type;
6925 bool ob_parm, dso_parm, use_dtor;
6926 tree arg0, arg1, arg2;
6927 tree atex_node;
6929 type = TREE_TYPE (decl);
6930 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6931 return void_node;
6933 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
6934 "__aeabi_atexit"), and DECL is a class object, we can just pass the
6935 destructor to "__cxa_atexit"; we don't have to build a temporary
6936 function to do the cleanup. */
6937 dso_parm = (flag_use_cxa_atexit
6938 && !targetm.cxx.use_atexit_for_cxa_atexit ());
6939 ob_parm = (DECL_THREAD_LOCAL_P (decl) || dso_parm);
6940 use_dtor = ob_parm && CLASS_TYPE_P (type);
6941 if (use_dtor)
6943 int idx;
6945 /* Find the destructor. */
6946 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6947 gcc_assert (idx >= 0);
6948 cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
6949 /* Make sure it is accessible. */
6950 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
6951 tf_warning_or_error);
6953 else
6955 /* Call build_cleanup before we enter the anonymous function so
6956 that any access checks will be done relative to the current
6957 scope, rather than the scope of the anonymous function. */
6958 build_cleanup (decl);
6960 /* Now start the function. */
6961 cleanup = start_cleanup_fn ();
6963 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6964 to the original function, rather than the anonymous one. That
6965 will make the back end think that nested functions are in use,
6966 which causes confusion. */
6967 push_deferring_access_checks (dk_no_check);
6968 fcall = build_cleanup (decl);
6969 pop_deferring_access_checks ();
6971 /* Create the body of the anonymous function. */
6972 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6973 finish_expr_stmt (fcall);
6974 finish_compound_stmt (compound_stmt);
6975 end_cleanup_fn ();
6978 /* Call atexit with the cleanup function. */
6979 mark_used (cleanup);
6980 cleanup = build_address (cleanup);
6982 if (DECL_THREAD_LOCAL_P (decl))
6983 atex_node = get_thread_atexit_node ();
6984 else
6985 atex_node = get_atexit_node ();
6987 if (use_dtor)
6989 /* We must convert CLEANUP to the type that "__cxa_atexit"
6990 expects. */
6991 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6992 /* "__cxa_atexit" will pass the address of DECL to the
6993 cleanup function. */
6994 mark_used (decl);
6995 addr = build_address (decl);
6996 /* The declared type of the parameter to "__cxa_atexit" is
6997 "void *". For plain "T*", we could just let the
6998 machinery in cp_build_function_call convert it -- but if the
6999 type is "cv-qualified T *", then we need to convert it
7000 before passing it in, to avoid spurious errors. */
7001 addr = build_nop (ptr_type_node, addr);
7003 else
7004 /* Since the cleanup functions we build ignore the address
7005 they're given, there's no reason to pass the actual address
7006 in, and, in general, it's cheaper to pass NULL than any
7007 other value. */
7008 addr = null_pointer_node;
7010 if (dso_parm)
7011 arg2 = cp_build_addr_expr (get_dso_handle_node (),
7012 tf_warning_or_error);
7013 else if (ob_parm)
7014 /* Just pass NULL to the dso handle parm if we don't actually
7015 have a DSO handle on this target. */
7016 arg2 = null_pointer_node;
7017 else
7018 arg2 = NULL_TREE;
7020 if (ob_parm)
7022 if (!DECL_THREAD_LOCAL_P (decl)
7023 && targetm.cxx.use_aeabi_atexit ())
7025 arg1 = cleanup;
7026 arg0 = addr;
7028 else
7030 arg1 = addr;
7031 arg0 = cleanup;
7034 else
7036 arg0 = cleanup;
7037 arg1 = NULL_TREE;
7039 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
7040 arg0, arg1, arg2, NULL_TREE);
7043 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
7044 is its initializer. Generate code to handle the construction
7045 and destruction of DECL. */
7047 static void
7048 expand_static_init (tree decl, tree init)
7050 gcc_assert (VAR_P (decl));
7051 gcc_assert (TREE_STATIC (decl));
7053 /* Some variables require no dynamic initialization. */
7054 if (!init
7055 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
7057 /* Make sure the destructor is callable. */
7058 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7059 return;
7062 if (DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
7063 && !DECL_FUNCTION_SCOPE_P (decl))
7065 if (init)
7066 error ("non-local variable %qD declared %<__thread%> "
7067 "needs dynamic initialization", decl);
7068 else
7069 error ("non-local variable %qD declared %<__thread%> "
7070 "has a non-trivial destructor", decl);
7071 static bool informed;
7072 if (!informed)
7074 inform (DECL_SOURCE_LOCATION (decl),
7075 "C++11 %<thread_local%> allows dynamic initialization "
7076 "and destruction");
7077 informed = true;
7079 return;
7082 if (DECL_FUNCTION_SCOPE_P (decl))
7084 /* Emit code to perform this initialization but once. */
7085 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
7086 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
7087 tree guard, guard_addr;
7088 tree flag, begin;
7089 /* We don't need thread-safety code for thread-local vars. */
7090 bool thread_guard = (flag_threadsafe_statics
7091 && !DECL_THREAD_LOCAL_P (decl));
7093 /* Emit code to perform this initialization but once. This code
7094 looks like:
7096 static <type> guard;
7097 if (!guard.first_byte) {
7098 if (__cxa_guard_acquire (&guard)) {
7099 bool flag = false;
7100 try {
7101 // Do initialization.
7102 flag = true; __cxa_guard_release (&guard);
7103 // Register variable for destruction at end of program.
7104 } catch {
7105 if (!flag) __cxa_guard_abort (&guard);
7109 Note that the `flag' variable is only set to 1 *after* the
7110 initialization is complete. This ensures that an exception,
7111 thrown during the construction, will cause the variable to
7112 reinitialized when we pass through this code again, as per:
7114 [stmt.dcl]
7116 If the initialization exits by throwing an exception, the
7117 initialization is not complete, so it will be tried again
7118 the next time control enters the declaration.
7120 This process should be thread-safe, too; multiple threads
7121 should not be able to initialize the variable more than
7122 once. */
7124 /* Create the guard variable. */
7125 guard = get_guard (decl);
7127 /* This optimization isn't safe on targets with relaxed memory
7128 consistency. On such targets we force synchronization in
7129 __cxa_guard_acquire. */
7130 if (!targetm.relaxed_ordering || !thread_guard)
7132 /* Begin the conditional initialization. */
7133 if_stmt = begin_if_stmt ();
7134 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
7135 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7138 if (thread_guard)
7140 tree vfntype = NULL_TREE;
7141 tree acquire_name, release_name, abort_name;
7142 tree acquire_fn, release_fn, abort_fn;
7143 guard_addr = build_address (guard);
7145 acquire_name = get_identifier ("__cxa_guard_acquire");
7146 release_name = get_identifier ("__cxa_guard_release");
7147 abort_name = get_identifier ("__cxa_guard_abort");
7148 acquire_fn = identifier_global_value (acquire_name);
7149 release_fn = identifier_global_value (release_name);
7150 abort_fn = identifier_global_value (abort_name);
7151 if (!acquire_fn)
7152 acquire_fn = push_library_fn
7153 (acquire_name, build_function_type_list (integer_type_node,
7154 TREE_TYPE (guard_addr),
7155 NULL_TREE),
7156 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
7157 if (!release_fn || !abort_fn)
7158 vfntype = build_function_type_list (void_type_node,
7159 TREE_TYPE (guard_addr),
7160 NULL_TREE);
7161 if (!release_fn)
7162 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
7163 ECF_NOTHROW | ECF_LEAF);
7164 if (!abort_fn)
7165 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
7166 ECF_NOTHROW | ECF_LEAF);
7168 inner_if_stmt = begin_if_stmt ();
7169 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
7170 inner_if_stmt);
7172 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7173 begin = get_target_expr (boolean_false_node);
7174 flag = TARGET_EXPR_SLOT (begin);
7176 TARGET_EXPR_CLEANUP (begin)
7177 = build3 (COND_EXPR, void_type_node, flag,
7178 void_node,
7179 build_call_n (abort_fn, 1, guard_addr));
7180 CLEANUP_EH_ONLY (begin) = 1;
7182 /* Do the initialization itself. */
7183 init = add_stmt_to_compound (begin, init);
7184 init = add_stmt_to_compound
7185 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7186 init = add_stmt_to_compound
7187 (init, build_call_n (release_fn, 1, guard_addr));
7189 else
7190 init = add_stmt_to_compound (init, set_guard (guard));
7192 /* Use atexit to register a function for destroying this static
7193 variable. */
7194 init = add_stmt_to_compound (init, register_dtor_fn (decl));
7196 finish_expr_stmt (init);
7198 if (thread_guard)
7200 finish_compound_stmt (inner_then_clause);
7201 finish_then_clause (inner_if_stmt);
7202 finish_if_stmt (inner_if_stmt);
7205 if (!targetm.relaxed_ordering || !thread_guard)
7207 finish_compound_stmt (then_clause);
7208 finish_then_clause (if_stmt);
7209 finish_if_stmt (if_stmt);
7212 else if (DECL_THREAD_LOCAL_P (decl))
7213 tls_aggregates = tree_cons (init, decl, tls_aggregates);
7214 else
7215 static_aggregates = tree_cons (init, decl, static_aggregates);
7219 /* Make TYPE a complete type based on INITIAL_VALUE.
7220 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7221 2 if there was no information (in which case assume 0 if DO_DEFAULT),
7222 3 if the initializer list is empty (in pedantic mode). */
7225 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7227 int failure;
7228 tree type, elt_type;
7230 /* Don't get confused by a CONSTRUCTOR for some other type. */
7231 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
7232 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value))
7233 return 1;
7235 if (initial_value)
7237 unsigned HOST_WIDE_INT i;
7238 tree value;
7240 /* An array of character type can be initialized from a
7241 brace-enclosed string constant.
7243 FIXME: this code is duplicated from reshape_init. Probably
7244 we should just call reshape_init here? */
7245 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7246 && TREE_CODE (initial_value) == CONSTRUCTOR
7247 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
7249 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
7250 tree value = (*v)[0].value;
7252 if (TREE_CODE (value) == STRING_CST
7253 && v->length () == 1)
7254 initial_value = value;
7257 /* If any of the elements are parameter packs, we can't actually
7258 complete this type now because the array size is dependent. */
7259 if (TREE_CODE (initial_value) == CONSTRUCTOR)
7261 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
7262 i, value)
7264 if (PACK_EXPANSION_P (value))
7265 return 0;
7270 failure = complete_array_type (ptype, initial_value, do_default);
7272 /* We can create the array before the element type is complete, which
7273 means that we didn't have these two bits set in the original type
7274 either. In completing the type, we are expected to propagate these
7275 bits. See also complete_type which does the same thing for arrays
7276 of fixed size. */
7277 type = *ptype;
7278 if (TYPE_DOMAIN (type))
7280 elt_type = TREE_TYPE (type);
7281 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7282 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7283 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7286 return failure;
7289 /* As above, but either give an error or reject zero-size arrays, depending
7290 on COMPLAIN. */
7293 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7294 bool do_default, tsubst_flags_t complain)
7296 int failure;
7297 bool sfinae = !(complain & tf_error);
7298 /* In SFINAE context we can't be lenient about zero-size arrays. */
7299 if (sfinae)
7300 ++pedantic;
7301 failure = cp_complete_array_type (ptype, initial_value, do_default);
7302 if (sfinae)
7303 --pedantic;
7304 if (failure)
7306 if (sfinae)
7307 /* Not an error. */;
7308 else if (failure == 1)
7309 error ("initializer fails to determine size of %qT", *ptype);
7310 else if (failure == 2)
7312 if (do_default)
7313 error ("array size missing in %qT", *ptype);
7315 else if (failure == 3)
7316 error ("zero-size array %qT", *ptype);
7317 *ptype = error_mark_node;
7319 return failure;
7322 /* Return zero if something is declared to be a member of type
7323 CTYPE when in the context of CUR_TYPE. STRING is the error
7324 message to print in that case. Otherwise, quietly return 1. */
7326 static int
7327 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7329 if (ctype && ctype != cur_type)
7331 if (flags == DTOR_FLAG)
7332 error ("destructor for alien class %qT cannot be a member", ctype);
7333 else
7334 error ("constructor for alien class %qT cannot be a member", ctype);
7335 return 0;
7337 return 1;
7340 /* Subroutine of `grokdeclarator'. */
7342 /* Generate errors possibly applicable for a given set of specifiers.
7343 This is for ARM $7.1.2. */
7345 static void
7346 bad_specifiers (tree object,
7347 enum bad_spec_place type,
7348 int virtualp,
7349 int quals,
7350 int inlinep,
7351 int friendp,
7352 int raises)
7354 switch (type)
7356 case BSP_VAR:
7357 if (virtualp)
7358 error ("%qD declared as a %<virtual%> variable", object);
7359 if (inlinep)
7360 error ("%qD declared as an %<inline%> variable", object);
7361 if (quals)
7362 error ("%<const%> and %<volatile%> function specifiers on "
7363 "%qD invalid in variable declaration", object);
7364 break;
7365 case BSP_PARM:
7366 if (virtualp)
7367 error ("%qD declared as a %<virtual%> parameter", object);
7368 if (inlinep)
7369 error ("%qD declared as an %<inline%> parameter", object);
7370 if (quals)
7371 error ("%<const%> and %<volatile%> function specifiers on "
7372 "%qD invalid in parameter declaration", object);
7373 break;
7374 case BSP_TYPE:
7375 if (virtualp)
7376 error ("%qD declared as a %<virtual%> type", object);
7377 if (inlinep)
7378 error ("%qD declared as an %<inline%> type", object);
7379 if (quals)
7380 error ("%<const%> and %<volatile%> function specifiers on "
7381 "%qD invalid in type declaration", object);
7382 break;
7383 case BSP_FIELD:
7384 if (virtualp)
7385 error ("%qD declared as a %<virtual%> field", object);
7386 if (inlinep)
7387 error ("%qD declared as an %<inline%> field", object);
7388 if (quals)
7389 error ("%<const%> and %<volatile%> function specifiers on "
7390 "%qD invalid in field declaration", object);
7391 break;
7392 default:
7393 gcc_unreachable();
7395 if (friendp)
7396 error ("%q+D declared as a friend", object);
7397 if (raises
7398 && (TREE_CODE (object) == TYPE_DECL
7399 || (!TYPE_PTRFN_P (TREE_TYPE (object))
7400 && !TYPE_REFFN_P (TREE_TYPE (object))
7401 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7402 error ("%q+D declared with an exception specification", object);
7405 /* DECL is a member function or static data member and is presently
7406 being defined. Check that the definition is taking place in a
7407 valid namespace. */
7409 static void
7410 check_class_member_definition_namespace (tree decl)
7412 /* These checks only apply to member functions and static data
7413 members. */
7414 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
7415 /* We check for problems with specializations in pt.c in
7416 check_specialization_namespace, where we can issue better
7417 diagnostics. */
7418 if (processing_specialization)
7419 return;
7420 /* There are no restrictions on the placement of
7421 explicit instantiations. */
7422 if (processing_explicit_instantiation)
7423 return;
7424 /* [class.mfct]
7426 A member function definition that appears outside of the
7427 class definition shall appear in a namespace scope enclosing
7428 the class definition.
7430 [class.static.data]
7432 The definition for a static data member shall appear in a
7433 namespace scope enclosing the member's class definition. */
7434 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7435 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7436 decl, DECL_CONTEXT (decl));
7439 /* Build a PARM_DECL for the "this" parameter. TYPE is the
7440 METHOD_TYPE for a non-static member function; QUALS are the
7441 cv-qualifiers that apply to the function. */
7443 tree
7444 build_this_parm (tree type, cp_cv_quals quals)
7446 tree this_type;
7447 tree qual_type;
7448 tree parm;
7449 cp_cv_quals this_quals;
7451 if (CLASS_TYPE_P (type))
7453 this_type
7454 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7455 this_type = build_pointer_type (this_type);
7457 else
7458 this_type = type_of_this_parm (type);
7459 /* The `this' parameter is implicitly `const'; it cannot be
7460 assigned to. */
7461 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7462 qual_type = cp_build_qualified_type (this_type, this_quals);
7463 parm = build_artificial_parm (this_identifier, qual_type);
7464 cp_apply_type_quals_to_decl (this_quals, parm);
7465 return parm;
7468 /* DECL is a static member function. Complain if it was declared
7469 with function-cv-quals. */
7471 static void
7472 check_static_quals (tree decl, cp_cv_quals quals)
7474 if (quals != TYPE_UNQUALIFIED)
7475 error ("static member function %q#D declared with type qualifiers",
7476 decl);
7479 /* Helper function. Replace the temporary this parameter injected
7480 during cp_finish_omp_declare_simd with the real this parameter. */
7482 static tree
7483 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
7485 tree this_parm = (tree) data;
7486 if (TREE_CODE (*tp) == PARM_DECL
7487 && DECL_NAME (*tp) == this_identifier
7488 && *tp != this_parm)
7489 *tp = this_parm;
7490 else if (TYPE_P (*tp))
7491 *walk_subtrees = 0;
7492 return NULL_TREE;
7495 /* CTYPE is class type, or null if non-class.
7496 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7497 or METHOD_TYPE.
7498 DECLARATOR is the function's name.
7499 PARMS is a chain of PARM_DECLs for the function.
7500 VIRTUALP is truthvalue of whether the function is virtual or not.
7501 FLAGS are to be passed through to `grokclassfn'.
7502 QUALS are qualifiers indicating whether the function is `const'
7503 or `volatile'.
7504 RAISES is a list of exceptions that this function can raise.
7505 CHECK is 1 if we must find this method in CTYPE, 0 if we should
7506 not look, and -1 if we should not call `grokclassfn' at all.
7508 SFK is the kind of special function (if any) for the new function.
7510 Returns `NULL_TREE' if something goes wrong, after issuing
7511 applicable error messages. */
7513 static tree
7514 grokfndecl (tree ctype,
7515 tree type,
7516 tree declarator,
7517 tree parms,
7518 tree orig_declarator,
7519 int virtualp,
7520 enum overload_flags flags,
7521 cp_cv_quals quals,
7522 cp_ref_qualifier rqual,
7523 tree raises,
7524 int check,
7525 int friendp,
7526 int publicp,
7527 int inlinep,
7528 special_function_kind sfk,
7529 bool funcdef_flag,
7530 int template_count,
7531 tree in_namespace,
7532 tree* attrlist,
7533 location_t location)
7535 tree decl;
7536 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7537 tree t;
7539 if (rqual)
7540 type = build_ref_qualified_type (type, rqual);
7541 if (raises)
7542 type = build_exception_variant (type, raises);
7544 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7546 /* If we have an explicit location, use it, otherwise use whatever
7547 build_lang_decl used (probably input_location). */
7548 if (location != UNKNOWN_LOCATION)
7549 DECL_SOURCE_LOCATION (decl) = location;
7551 if (TREE_CODE (type) == METHOD_TYPE)
7553 tree parm;
7554 parm = build_this_parm (type, quals);
7555 DECL_CHAIN (parm) = parms;
7556 parms = parm;
7558 DECL_ARGUMENTS (decl) = parms;
7559 for (t = parms; t; t = DECL_CHAIN (t))
7560 DECL_CONTEXT (t) = decl;
7561 /* Propagate volatile out from type to decl. */
7562 if (TYPE_VOLATILE (type))
7563 TREE_THIS_VOLATILE (decl) = 1;
7565 /* Setup decl according to sfk. */
7566 switch (sfk)
7568 case sfk_constructor:
7569 case sfk_copy_constructor:
7570 case sfk_move_constructor:
7571 DECL_CONSTRUCTOR_P (decl) = 1;
7572 break;
7573 case sfk_destructor:
7574 DECL_DESTRUCTOR_P (decl) = 1;
7575 break;
7576 default:
7577 break;
7580 /* If pointers to member functions use the least significant bit to
7581 indicate whether a function is virtual, ensure a pointer
7582 to this function will have that bit clear. */
7583 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7584 && TREE_CODE (type) == METHOD_TYPE
7585 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7586 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7588 if (friendp
7589 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7591 if (funcdef_flag)
7592 error
7593 ("defining explicit specialization %qD in friend declaration",
7594 orig_declarator);
7595 else
7597 tree fns = TREE_OPERAND (orig_declarator, 0);
7598 tree args = TREE_OPERAND (orig_declarator, 1);
7600 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7602 /* Something like `template <class T> friend void f<T>()'. */
7603 error ("invalid use of template-id %qD in declaration "
7604 "of primary template",
7605 orig_declarator);
7606 return NULL_TREE;
7610 /* A friend declaration of the form friend void f<>(). Record
7611 the information in the TEMPLATE_ID_EXPR. */
7612 SET_DECL_IMPLICIT_INSTANTIATION (decl);
7614 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
7615 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7617 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7618 if (TREE_PURPOSE (t)
7619 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7621 error ("default arguments are not allowed in declaration "
7622 "of friend template specialization %qD",
7623 decl);
7624 return NULL_TREE;
7627 if (inlinep & 1)
7628 error ("%<inline%> is not allowed in declaration of friend "
7629 "template specialization %qD",
7630 decl);
7631 if (inlinep & 2)
7632 error ("%<constexpr%> is not allowed in declaration of friend "
7633 "template specialization %qD",
7634 decl);
7635 if (inlinep)
7636 return NULL_TREE;
7640 /* If this decl has namespace scope, set that up. */
7641 if (in_namespace)
7642 set_decl_namespace (decl, in_namespace, friendp);
7643 else if (!ctype)
7644 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7646 /* `main' and builtins have implicit 'C' linkage. */
7647 if ((MAIN_NAME_P (declarator)
7648 || (IDENTIFIER_LENGTH (declarator) > 10
7649 && IDENTIFIER_POINTER (declarator)[0] == '_'
7650 && IDENTIFIER_POINTER (declarator)[1] == '_'
7651 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
7652 || (targetcm.cxx_implicit_extern_c
7653 && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
7654 && current_lang_name == lang_name_cplusplus
7655 && ctype == NULL_TREE
7656 && DECL_FILE_SCOPE_P (decl))
7657 SET_DECL_LANGUAGE (decl, lang_c);
7659 /* Should probably propagate const out from type to decl I bet (mrs). */
7660 if (staticp)
7662 DECL_STATIC_FUNCTION_P (decl) = 1;
7663 DECL_CONTEXT (decl) = ctype;
7666 if (ctype)
7668 DECL_CONTEXT (decl) = ctype;
7669 if (funcdef_flag)
7670 check_class_member_definition_namespace (decl);
7673 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7675 if (PROCESSING_REAL_TEMPLATE_DECL_P())
7676 error ("cannot declare %<::main%> to be a template");
7677 if (inlinep & 1)
7678 error ("cannot declare %<::main%> to be inline");
7679 if (inlinep & 2)
7680 error ("cannot declare %<::main%> to be constexpr");
7681 if (!publicp)
7682 error ("cannot declare %<::main%> to be static");
7683 inlinep = 0;
7684 publicp = 1;
7687 /* Members of anonymous types and local classes have no linkage; make
7688 them internal. If a typedef is made later, this will be changed. */
7689 if (ctype && (TYPE_ANONYMOUS_P (ctype)
7690 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7691 publicp = 0;
7693 if (publicp && cxx_dialect == cxx98)
7695 /* [basic.link]: A name with no linkage (notably, the name of a class
7696 or enumeration declared in a local scope) shall not be used to
7697 declare an entity with linkage.
7699 DR 757 relaxes this restriction for C++0x. */
7700 no_linkage_error (decl);
7703 TREE_PUBLIC (decl) = publicp;
7704 if (! publicp)
7706 DECL_INTERFACE_KNOWN (decl) = 1;
7707 DECL_NOT_REALLY_EXTERN (decl) = 1;
7710 /* If the declaration was declared inline, mark it as such. */
7711 if (inlinep)
7713 DECL_DECLARED_INLINE_P (decl) = 1;
7714 if (publicp)
7715 DECL_COMDAT (decl) = 1;
7717 if (inlinep & 2)
7718 DECL_DECLARED_CONSTEXPR_P (decl) = true;
7720 DECL_EXTERNAL (decl) = 1;
7721 if (TREE_CODE (type) == FUNCTION_TYPE)
7723 if (quals)
7725 error (ctype
7726 ? G_("static member function %qD cannot have cv-qualifier")
7727 : G_("non-member function %qD cannot have cv-qualifier"),
7728 decl);
7729 quals = TYPE_UNQUALIFIED;
7732 if (rqual)
7734 error (ctype
7735 ? G_("static member function %qD cannot have ref-qualifier")
7736 : G_("non-member function %qD cannot have ref-qualifier"),
7737 decl);
7738 rqual = REF_QUAL_NONE;
7742 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7743 && !grok_op_properties (decl, /*complain=*/true))
7744 return NULL_TREE;
7745 else if (UDLIT_OPER_P (DECL_NAME (decl)))
7747 bool long_long_unsigned_p;
7748 bool long_double_p;
7749 const char *suffix = NULL;
7750 /* [over.literal]/6: Literal operators shall not have C linkage. */
7751 if (DECL_LANGUAGE (decl) == lang_c)
7753 error ("literal operator with C linkage");
7754 return NULL_TREE;
7757 if (DECL_NAMESPACE_SCOPE_P (decl))
7759 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7760 &long_double_p))
7762 error ("%qD has invalid argument list", decl);
7763 return NULL_TREE;
7766 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7767 if (long_long_unsigned_p)
7769 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
7770 warning (0, "integer suffix %<%s%>"
7771 " shadowed by implementation", suffix);
7773 else if (long_double_p)
7775 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
7776 warning (0, "floating point suffix %<%s%>"
7777 " shadowed by implementation", suffix);
7780 else
7782 error ("%qD must be a non-member function", decl);
7783 return NULL_TREE;
7787 if (funcdef_flag)
7788 /* Make the init_value nonzero so pushdecl knows this is not
7789 tentative. error_mark_node is replaced later with the BLOCK. */
7790 DECL_INITIAL (decl) = error_mark_node;
7792 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7793 TREE_NOTHROW (decl) = 1;
7795 if (flag_openmp || flag_cilkplus)
7797 /* Adjust "omp declare simd" attributes. */
7798 tree ods = lookup_attribute ("omp declare simd", *attrlist);
7799 if (ods)
7801 tree attr;
7802 for (attr = ods; attr;
7803 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
7805 if (TREE_CODE (type) == METHOD_TYPE)
7806 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
7807 DECL_ARGUMENTS (decl), NULL);
7808 if (TREE_VALUE (attr) != NULL_TREE)
7810 tree cl = TREE_VALUE (TREE_VALUE (attr));
7811 cl = c_omp_declare_simd_clauses_to_numbers
7812 (DECL_ARGUMENTS (decl), cl);
7813 if (cl)
7814 TREE_VALUE (TREE_VALUE (attr)) = cl;
7815 else
7816 TREE_VALUE (attr) = NULL_TREE;
7822 /* Caller will do the rest of this. */
7823 if (check < 0)
7824 return decl;
7826 if (ctype != NULL_TREE)
7827 grokclassfn (ctype, decl, flags);
7829 /* 12.4/3 */
7830 if (cxx_dialect >= cxx11
7831 && DECL_DESTRUCTOR_P (decl)
7832 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
7833 && !processing_template_decl)
7834 deduce_noexcept_on_destructor (decl);
7836 decl = check_explicit_specialization (orig_declarator, decl,
7837 template_count,
7838 2 * funcdef_flag +
7839 4 * (friendp != 0));
7840 if (decl == error_mark_node)
7841 return NULL_TREE;
7843 if (DECL_STATIC_FUNCTION_P (decl))
7844 check_static_quals (decl, quals);
7846 if (attrlist)
7848 cplus_decl_attributes (&decl, *attrlist, 0);
7849 *attrlist = NULL_TREE;
7852 /* Check main's type after attributes have been applied. */
7853 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7855 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7856 integer_type_node))
7858 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7859 tree newtype;
7860 error ("%<::main%> must return %<int%>");
7861 newtype = build_function_type (integer_type_node, oldtypeargs);
7862 TREE_TYPE (decl) = newtype;
7864 if (warn_main)
7865 check_main_parameter_types (decl);
7868 if (ctype != NULL_TREE
7869 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7870 && check)
7872 tree old_decl = check_classfn (ctype, decl,
7873 (processing_template_decl
7874 > template_class_depth (ctype))
7875 ? current_template_parms
7876 : NULL_TREE);
7878 if (old_decl == error_mark_node)
7879 return NULL_TREE;
7881 if (old_decl)
7883 tree ok;
7884 tree pushed_scope;
7886 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7887 /* Because grokfndecl is always supposed to return a
7888 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7889 here. We depend on our callers to figure out that its
7890 really a template that's being returned. */
7891 old_decl = DECL_TEMPLATE_RESULT (old_decl);
7893 if (DECL_STATIC_FUNCTION_P (old_decl)
7894 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7896 /* Remove the `this' parm added by grokclassfn. */
7897 revert_static_member_fn (decl);
7898 check_static_quals (decl, quals);
7900 if (DECL_ARTIFICIAL (old_decl))
7902 error ("definition of implicitly-declared %qD", old_decl);
7903 return NULL_TREE;
7905 else if (DECL_DEFAULTED_FN (old_decl))
7907 error ("definition of explicitly-defaulted %q+D", decl);
7908 error ("%q+#D explicitly defaulted here", old_decl);
7909 return NULL_TREE;
7912 /* Since we've smashed OLD_DECL to its
7913 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
7914 if (TREE_CODE (decl) == TEMPLATE_DECL)
7915 decl = DECL_TEMPLATE_RESULT (decl);
7917 /* Attempt to merge the declarations. This can fail, in
7918 the case of some invalid specialization declarations. */
7919 pushed_scope = push_scope (ctype);
7920 ok = duplicate_decls (decl, old_decl, friendp);
7921 if (pushed_scope)
7922 pop_scope (pushed_scope);
7923 if (!ok)
7925 error ("no %q#D member function declared in class %qT",
7926 decl, ctype);
7927 return NULL_TREE;
7929 if (ok == error_mark_node)
7930 return NULL_TREE;
7931 return old_decl;
7935 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7936 return NULL_TREE;
7938 if (ctype == NULL_TREE || check)
7939 return decl;
7941 if (virtualp)
7942 DECL_VIRTUAL_P (decl) = 1;
7944 return decl;
7947 /* decl is a FUNCTION_DECL.
7948 specifiers are the parsed virt-specifiers.
7950 Set flags to reflect the virt-specifiers.
7952 Returns decl. */
7954 static tree
7955 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7957 if (decl == NULL_TREE)
7958 return decl;
7959 if (specifiers & VIRT_SPEC_OVERRIDE)
7960 DECL_OVERRIDE_P (decl) = 1;
7961 if (specifiers & VIRT_SPEC_FINAL)
7962 DECL_FINAL_P (decl) = 1;
7963 return decl;
7966 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
7967 the linkage that DECL will receive in the object file. */
7969 static void
7970 set_linkage_for_static_data_member (tree decl)
7972 /* A static data member always has static storage duration and
7973 external linkage. Note that static data members are forbidden in
7974 local classes -- the only situation in which a class has
7975 non-external linkage. */
7976 TREE_PUBLIC (decl) = 1;
7977 TREE_STATIC (decl) = 1;
7978 /* For non-template classes, static data members are always put
7979 out in exactly those files where they are defined, just as
7980 with ordinary namespace-scope variables. */
7981 if (!processing_template_decl)
7982 DECL_INTERFACE_KNOWN (decl) = 1;
7985 /* Create a VAR_DECL named NAME with the indicated TYPE.
7987 If SCOPE is non-NULL, it is the class type or namespace containing
7988 the variable. If SCOPE is NULL, the variable should is created in
7989 the innermost enclosing scope. */
7991 static tree
7992 grokvardecl (tree type,
7993 tree name,
7994 tree orig_declarator,
7995 const cp_decl_specifier_seq *declspecs,
7996 int initialized,
7997 int constp,
7998 int template_count,
7999 tree scope)
8001 tree decl;
8002 tree explicit_scope;
8004 gcc_assert (!name || identifier_p (name));
8006 /* Compute the scope in which to place the variable, but remember
8007 whether or not that scope was explicitly specified by the user. */
8008 explicit_scope = scope;
8009 if (!scope)
8011 /* An explicit "extern" specifier indicates a namespace-scope
8012 variable. */
8013 if (declspecs->storage_class == sc_extern)
8014 scope = current_decl_namespace ();
8015 else if (!at_function_scope_p ())
8016 scope = current_scope ();
8019 if (scope
8020 && (/* If the variable is a namespace-scope variable declared in a
8021 template, we need DECL_LANG_SPECIFIC. */
8022 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
8023 /* Similarly for namespace-scope variables with language linkage
8024 other than C++. */
8025 || (TREE_CODE (scope) == NAMESPACE_DECL
8026 && current_lang_name != lang_name_cplusplus)
8027 /* Similarly for static data members. */
8028 || TYPE_P (scope)
8029 /* Similarly for explicit specializations. */
8030 || (orig_declarator
8031 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
8032 decl = build_lang_decl (VAR_DECL, name, type);
8033 else
8034 decl = build_decl (input_location, VAR_DECL, name, type);
8036 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
8037 set_decl_namespace (decl, explicit_scope, 0);
8038 else
8039 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
8041 if (declspecs->storage_class == sc_extern)
8043 DECL_THIS_EXTERN (decl) = 1;
8044 DECL_EXTERNAL (decl) = !initialized;
8047 if (DECL_CLASS_SCOPE_P (decl))
8049 set_linkage_for_static_data_member (decl);
8050 /* This function is only called with out-of-class definitions. */
8051 DECL_EXTERNAL (decl) = 0;
8052 check_class_member_definition_namespace (decl);
8054 /* At top level, either `static' or no s.c. makes a definition
8055 (perhaps tentative), and absence of `static' makes it public. */
8056 else if (toplevel_bindings_p ())
8058 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
8059 && (DECL_THIS_EXTERN (decl) || ! constp));
8060 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8062 /* Not at top level, only `static' makes a static definition. */
8063 else
8065 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8066 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8069 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
8071 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8072 set_decl_tls_model (decl, decl_default_tls_model (decl));
8073 if (declspecs->gnu_thread_keyword_p)
8074 DECL_GNU_TLS_P (decl) = true;
8077 /* If the type of the decl has no linkage, make sure that we'll
8078 notice that in mark_used. */
8079 if (cxx_dialect > cxx98
8080 && decl_linkage (decl) != lk_none
8081 && DECL_LANG_SPECIFIC (decl) == NULL
8082 && !DECL_EXTERN_C_P (decl)
8083 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
8084 retrofit_lang_decl (decl);
8086 if (TREE_PUBLIC (decl))
8088 /* [basic.link]: A name with no linkage (notably, the name of a class
8089 or enumeration declared in a local scope) shall not be used to
8090 declare an entity with linkage.
8092 DR 757 relaxes this restriction for C++0x. */
8093 if (cxx_dialect < cxx11)
8094 no_linkage_error (decl);
8096 else
8097 DECL_INTERFACE_KNOWN (decl) = 1;
8099 // Handle explicit specializations and instantiations of variable templates.
8100 if (orig_declarator)
8101 decl = check_explicit_specialization (orig_declarator, decl,
8102 template_count, 0);
8104 return decl != error_mark_node ? decl : NULL_TREE;
8107 /* Create and return a canonical pointer to member function type, for
8108 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8110 tree
8111 build_ptrmemfunc_type (tree type)
8113 tree field, fields;
8114 tree t;
8115 tree unqualified_variant = NULL_TREE;
8117 if (type == error_mark_node)
8118 return type;
8120 /* If a canonical type already exists for this type, use it. We use
8121 this method instead of type_hash_canon, because it only does a
8122 simple equality check on the list of field members. */
8124 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8125 return t;
8127 /* Make sure that we always have the unqualified pointer-to-member
8128 type first. */
8129 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
8130 unqualified_variant
8131 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8133 t = make_node (RECORD_TYPE);
8135 /* Let the front end know this is a pointer to member function. */
8136 TYPE_PTRMEMFUNC_FLAG (t) = 1;
8138 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
8139 fields = field;
8141 field = build_decl (input_location, FIELD_DECL, delta_identifier,
8142 delta_type_node);
8143 DECL_CHAIN (field) = fields;
8144 fields = field;
8146 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8148 /* Zap out the name so that the back end will give us the debugging
8149 information for this anonymous RECORD_TYPE. */
8150 TYPE_NAME (t) = NULL_TREE;
8152 /* If this is not the unqualified form of this pointer-to-member
8153 type, set the TYPE_MAIN_VARIANT for this type to be the
8154 unqualified type. Since they are actually RECORD_TYPEs that are
8155 not variants of each other, we must do this manually.
8156 As we just built a new type there is no need to do yet another copy. */
8157 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
8159 int type_quals = cp_type_quals (type);
8160 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
8161 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
8162 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
8163 TYPE_MAIN_VARIANT (t) = unqualified_variant;
8164 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8165 TYPE_NEXT_VARIANT (unqualified_variant) = t;
8168 /* Cache this pointer-to-member type so that we can find it again
8169 later. */
8170 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8172 if (TYPE_STRUCTURAL_EQUALITY_P (type))
8173 SET_TYPE_STRUCTURAL_EQUALITY (t);
8174 else if (TYPE_CANONICAL (type) != type)
8175 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
8177 return t;
8180 /* Create and return a pointer to data member type. */
8182 tree
8183 build_ptrmem_type (tree class_type, tree member_type)
8185 if (TREE_CODE (member_type) == METHOD_TYPE)
8187 cp_cv_quals quals = type_memfn_quals (member_type);
8188 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
8189 member_type = build_memfn_type (member_type, class_type, quals, rqual);
8190 return build_ptrmemfunc_type (build_pointer_type (member_type));
8192 else
8194 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
8195 return build_offset_type (class_type, member_type);
8199 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8200 Check to see that the definition is valid. Issue appropriate error
8201 messages. Return 1 if the definition is particularly bad, or 0
8202 otherwise. */
8204 static int
8205 check_static_variable_definition (tree decl, tree type)
8207 /* Can't check yet if we don't know the type. */
8208 if (dependent_type_p (type))
8209 return 0;
8210 /* If DECL is declared constexpr, we'll do the appropriate checks
8211 in check_initializer. */
8212 if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8213 return 0;
8214 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8216 if (!COMPLETE_TYPE_P (type))
8217 error ("in-class initialization of static data member %q#D of "
8218 "incomplete type", decl);
8219 else if (literal_type_p (type))
8220 permerror (input_location,
8221 "%<constexpr%> needed for in-class initialization of "
8222 "static data member %q#D of non-integral type", decl);
8223 else
8224 error ("in-class initialization of static data member %q#D of "
8225 "non-literal type", decl);
8226 return 1;
8229 /* Motion 10 at San Diego: If a static const integral data member is
8230 initialized with an integral constant expression, the initializer
8231 may appear either in the declaration (within the class), or in
8232 the definition, but not both. If it appears in the class, the
8233 member is a member constant. The file-scope definition is always
8234 required. */
8235 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8237 error ("invalid in-class initialization of static data member "
8238 "of non-integral type %qT",
8239 type);
8240 return 1;
8242 else if (!CP_TYPE_CONST_P (type))
8243 error ("ISO C++ forbids in-class initialization of non-const "
8244 "static member %qD",
8245 decl);
8246 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8247 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8248 "%qD of non-integral type %qT", decl, type);
8250 return 0;
8253 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
8254 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8255 expressions out into temporary variables so that walk_tree doesn't
8256 step into them (c++/15764). */
8258 static tree
8259 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8261 hash_set<tree> *pset = (hash_set<tree> *)data;
8262 tree expr = *expr_p;
8263 if (TREE_CODE (expr) == SAVE_EXPR)
8265 tree op = TREE_OPERAND (expr, 0);
8266 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8267 if (TREE_SIDE_EFFECTS (op))
8268 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8269 *walk_subtrees = 0;
8271 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8272 *walk_subtrees = 0;
8273 return NULL;
8276 /* Entry point for the above. */
8278 static void
8279 stabilize_vla_size (tree size)
8281 hash_set<tree> pset;
8282 /* Break out any function calls into temporary variables. */
8283 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
8286 /* Helper function for compute_array_index_type. Look for SIZEOF_EXPR
8287 not inside of SAVE_EXPR and fold them. */
8289 static tree
8290 fold_sizeof_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8292 tree expr = *expr_p;
8293 if (TREE_CODE (expr) == SAVE_EXPR || TYPE_P (expr))
8294 *walk_subtrees = 0;
8295 else if (TREE_CODE (expr) == SIZEOF_EXPR)
8297 *(bool *)data = true;
8298 if (SIZEOF_EXPR_TYPE_P (expr))
8299 expr = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (expr, 0)),
8300 SIZEOF_EXPR, false);
8301 else if (TYPE_P (TREE_OPERAND (expr, 0)))
8302 expr = cxx_sizeof_or_alignof_type (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8303 false);
8304 else
8305 expr = cxx_sizeof_or_alignof_expr (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8306 false);
8307 if (expr == error_mark_node)
8308 expr = size_one_node;
8309 *expr_p = expr;
8310 *walk_subtrees = 0;
8312 return NULL;
8315 /* Given the SIZE (i.e., number of elements) in an array, compute an
8316 appropriate index type for the array. If non-NULL, NAME is the
8317 name of the thing being declared. */
8319 tree
8320 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8322 tree itype;
8323 tree osize = size;
8325 if (error_operand_p (size))
8326 return error_mark_node;
8328 if (!type_dependent_expression_p (size))
8330 tree type = TREE_TYPE (size);
8332 mark_rvalue_use (size);
8334 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
8335 && TREE_SIDE_EFFECTS (size))
8336 /* In C++98, we mark a non-constant array bound with a magic
8337 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
8338 else
8340 size = fold_non_dependent_expr_sfinae (size, complain);
8342 if (CLASS_TYPE_P (type)
8343 && CLASSTYPE_LITERAL_P (type))
8345 size = build_expr_type_conversion (WANT_INT, size, true);
8346 if (!size)
8348 if (!(complain & tf_error))
8349 return error_mark_node;
8350 if (name)
8351 error ("size of array %qD has non-integral type %qT",
8352 name, type);
8353 else
8354 error ("size of array has non-integral type %qT", type);
8355 size = integer_one_node;
8357 if (size == error_mark_node)
8358 return error_mark_node;
8359 type = TREE_TYPE (size);
8362 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8363 size = maybe_constant_value (size);
8365 if (!TREE_CONSTANT (size))
8366 size = osize;
8369 if (error_operand_p (size))
8370 return error_mark_node;
8372 /* The array bound must be an integer type. */
8373 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8375 if (!(complain & tf_error))
8376 return error_mark_node;
8377 if (name)
8378 error ("size of array %qD has non-integral type %qT", name, type);
8379 else
8380 error ("size of array has non-integral type %qT", type);
8381 size = integer_one_node;
8382 type = TREE_TYPE (size);
8386 /* A type is dependent if it is...an array type constructed from any
8387 dependent type or whose size is specified by a constant expression
8388 that is value-dependent. */
8389 /* We can only call value_dependent_expression_p on integral constant
8390 expressions; treat non-constant expressions as dependent, too. */
8391 if (processing_template_decl
8392 && (type_dependent_expression_p (size)
8393 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8395 /* We cannot do any checking for a SIZE that isn't known to be
8396 constant. Just build the index type and mark that it requires
8397 structural equality checks. */
8398 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8399 size, size_one_node));
8400 TYPE_DEPENDENT_P (itype) = 1;
8401 TYPE_DEPENDENT_P_VALID (itype) = 1;
8402 SET_TYPE_STRUCTURAL_EQUALITY (itype);
8403 return itype;
8406 /* Normally, the array-bound will be a constant. */
8407 if (TREE_CODE (size) == INTEGER_CST)
8409 /* Check to see if the array bound overflowed. Make that an
8410 error, no matter how generous we're being. */
8411 constant_expression_error (size);
8413 /* An array must have a positive number of elements. */
8414 if (tree_int_cst_lt (size, integer_zero_node))
8416 if (!(complain & tf_error))
8417 return error_mark_node;
8418 if (name)
8419 error ("size of array %qD is negative", name);
8420 else
8421 error ("size of array is negative");
8422 size = integer_one_node;
8424 /* As an extension we allow zero-sized arrays. */
8425 else if (integer_zerop (size))
8427 if (!(complain & tf_error))
8428 /* We must fail if performing argument deduction (as
8429 indicated by the state of complain), so that
8430 another substitution can be found. */
8431 return error_mark_node;
8432 else if (in_system_header_at (input_location))
8433 /* Allow them in system headers because glibc uses them. */;
8434 else if (name)
8435 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8436 else
8437 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8440 else if (TREE_CONSTANT (size)
8441 /* We don't allow VLAs at non-function scopes, or during
8442 tentative template substitution. */
8443 || !at_function_scope_p ()
8444 || (cxx_dialect < cxx14 && !(complain & tf_error)))
8446 if (!(complain & tf_error))
8447 return error_mark_node;
8448 /* `(int) &fn' is not a valid array bound. */
8449 if (name)
8450 error ("size of array %qD is not an integral constant-expression",
8451 name);
8452 else
8453 error ("size of array is not an integral constant-expression");
8454 size = integer_one_node;
8456 else if (cxx_dialect < cxx14 && pedantic && warn_vla != 0)
8458 if (name)
8459 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8460 else
8461 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8463 else if (warn_vla > 0)
8465 if (name)
8466 warning (OPT_Wvla,
8467 "variable length array %qD is used", name);
8468 else
8469 warning (OPT_Wvla,
8470 "variable length array is used");
8473 if (processing_template_decl && !TREE_CONSTANT (size))
8474 /* A variable sized array. */
8475 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8476 else
8478 HOST_WIDE_INT saved_processing_template_decl;
8480 /* Compute the index of the largest element in the array. It is
8481 one less than the number of elements in the array. We save
8482 and restore PROCESSING_TEMPLATE_DECL so that computations in
8483 cp_build_binary_op will be appropriately folded. */
8484 saved_processing_template_decl = processing_template_decl;
8485 processing_template_decl = 0;
8486 itype = cp_build_binary_op (input_location,
8487 MINUS_EXPR,
8488 cp_convert (ssizetype, size, complain),
8489 cp_convert (ssizetype, integer_one_node,
8490 complain),
8491 complain);
8492 itype = fold (itype);
8493 processing_template_decl = saved_processing_template_decl;
8495 if (!TREE_CONSTANT (itype))
8497 /* A variable sized array. */
8498 itype = variable_size (itype);
8500 if (TREE_CODE (itype) != SAVE_EXPR)
8502 /* Look for SIZEOF_EXPRs in itype and fold them, otherwise
8503 they might survive till gimplification. */
8504 tree newitype = itype;
8505 bool found = false;
8506 cp_walk_tree_without_duplicates (&newitype,
8507 fold_sizeof_expr_r, &found);
8508 if (found)
8509 itype = variable_size (fold (newitype));
8512 stabilize_vla_size (itype);
8514 if (cxx_dialect >= cxx14 && flag_exceptions)
8516 /* If the VLA bound is larger than half the address space,
8517 or less than zero, throw std::bad_array_length. */
8518 tree comp = build2 (LT_EXPR, boolean_type_node, itype,
8519 ssize_int (-1));
8520 comp = build3 (COND_EXPR, void_type_node, comp,
8521 throw_bad_array_length (), void_node);
8522 finish_expr_stmt (comp);
8524 else if (flag_sanitize & SANITIZE_VLA
8525 && current_function_decl != NULL_TREE
8526 && !lookup_attribute ("no_sanitize_undefined",
8527 DECL_ATTRIBUTES
8528 (current_function_decl)))
8530 /* From C++14 onwards, we throw an exception on a negative
8531 length size of an array; see above. */
8533 /* We have to add 1 -- in the ubsan routine we generate
8534 LE_EXPR rather than LT_EXPR. */
8535 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
8536 build_one_cst (TREE_TYPE (itype)));
8537 t = ubsan_instrument_vla (input_location, t);
8538 finish_expr_stmt (t);
8541 /* Make sure that there was no overflow when creating to a signed
8542 index type. (For example, on a 32-bit machine, an array with
8543 size 2^32 - 1 is too big.) */
8544 else if (TREE_CODE (itype) == INTEGER_CST
8545 && TREE_OVERFLOW (itype))
8547 if (!(complain & tf_error))
8548 return error_mark_node;
8549 error ("overflow in array dimension");
8550 TREE_OVERFLOW (itype) = 0;
8554 /* Create and return the appropriate index type. */
8555 itype = build_index_type (itype);
8557 /* If the index type were dependent, we would have returned early, so
8558 remember that it isn't. */
8559 TYPE_DEPENDENT_P (itype) = 0;
8560 TYPE_DEPENDENT_P_VALID (itype) = 1;
8561 return itype;
8564 /* Returns the scope (if any) in which the entity declared by
8565 DECLARATOR will be located. If the entity was declared with an
8566 unqualified name, NULL_TREE is returned. */
8568 tree
8569 get_scope_of_declarator (const cp_declarator *declarator)
8571 while (declarator && declarator->kind != cdk_id)
8572 declarator = declarator->declarator;
8574 /* If the declarator-id is a SCOPE_REF, the scope in which the
8575 declaration occurs is the first operand. */
8576 if (declarator
8577 && declarator->u.id.qualifying_scope)
8578 return declarator->u.id.qualifying_scope;
8580 /* Otherwise, the declarator is not a qualified name; the entity will
8581 be declared in the current scope. */
8582 return NULL_TREE;
8585 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8586 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
8587 with this type. */
8589 static tree
8590 create_array_type_for_decl (tree name, tree type, tree size)
8592 tree itype = NULL_TREE;
8594 /* If things have already gone awry, bail now. */
8595 if (type == error_mark_node || size == error_mark_node)
8596 return error_mark_node;
8598 /* 8.3.4/1: If the type of the identifier of D contains the auto
8599 type-specifier, the program is ill-formed. */
8600 if (type_uses_auto (type))
8602 error ("%qD declared as array of %qT", name, type);
8603 return error_mark_node;
8606 /* If there are some types which cannot be array elements,
8607 issue an error-message and return. */
8608 switch (TREE_CODE (type))
8610 case VOID_TYPE:
8611 if (name)
8612 error ("declaration of %qD as array of void", name);
8613 else
8614 error ("creating array of void");
8615 return error_mark_node;
8617 case FUNCTION_TYPE:
8618 if (name)
8619 error ("declaration of %qD as array of functions", name);
8620 else
8621 error ("creating array of functions");
8622 return error_mark_node;
8624 case REFERENCE_TYPE:
8625 if (name)
8626 error ("declaration of %qD as array of references", name);
8627 else
8628 error ("creating array of references");
8629 return error_mark_node;
8631 case METHOD_TYPE:
8632 if (name)
8633 error ("declaration of %qD as array of function members", name);
8634 else
8635 error ("creating array of function members");
8636 return error_mark_node;
8638 default:
8639 break;
8642 /* [dcl.array]
8644 The constant expressions that specify the bounds of the arrays
8645 can be omitted only for the first member of the sequence. */
8646 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8648 if (name)
8649 error ("declaration of %qD as multidimensional array must "
8650 "have bounds for all dimensions except the first",
8651 name);
8652 else
8653 error ("multidimensional array must have bounds for all "
8654 "dimensions except the first");
8656 return error_mark_node;
8659 if (cxx_dialect >= cxx14 && array_of_runtime_bound_p (type)
8660 && (flag_iso || warn_vla > 0))
8661 pedwarn (input_location, OPT_Wvla, "array of array of runtime bound");
8663 /* Figure out the index type for the array. */
8664 if (size)
8665 itype = compute_array_index_type (name, size, tf_warning_or_error);
8667 /* [dcl.array]
8668 T is called the array element type; this type shall not be [...] an
8669 abstract class type. */
8670 abstract_virtuals_error (name, type);
8672 return build_cplus_array_type (type, itype);
8675 /* Check that it's OK to declare a function with the indicated TYPE.
8676 SFK indicates the kind of special function (if any) that this
8677 function is. OPTYPE is the type given in a conversion operator
8678 declaration, or the class type for a constructor/destructor.
8679 Returns the actual return type of the function; that
8680 may be different than TYPE if an error occurs, or for certain
8681 special functions. */
8683 static tree
8684 check_special_function_return_type (special_function_kind sfk,
8685 tree type,
8686 tree optype)
8688 switch (sfk)
8690 case sfk_constructor:
8691 if (type)
8692 error ("return type specification for constructor invalid");
8694 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8695 type = build_pointer_type (optype);
8696 else
8697 type = void_type_node;
8698 break;
8700 case sfk_destructor:
8701 if (type)
8702 error ("return type specification for destructor invalid");
8703 /* We can't use the proper return type here because we run into
8704 problems with ambiguous bases and covariant returns.
8705 Java classes are left unchanged because (void *) isn't a valid
8706 Java type, and we don't want to change the Java ABI. */
8707 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8708 type = build_pointer_type (void_type_node);
8709 else
8710 type = void_type_node;
8711 break;
8713 case sfk_conversion:
8714 if (type)
8715 error ("return type specified for %<operator %T%>", optype);
8716 type = optype;
8717 break;
8719 default:
8720 gcc_unreachable ();
8723 return type;
8726 /* A variable or data member (whose unqualified name is IDENTIFIER)
8727 has been declared with the indicated TYPE. If the TYPE is not
8728 acceptable, issue an error message and return a type to use for
8729 error-recovery purposes. */
8731 tree
8732 check_var_type (tree identifier, tree type)
8734 if (VOID_TYPE_P (type))
8736 if (!identifier)
8737 error ("unnamed variable or field declared void");
8738 else if (identifier_p (identifier))
8740 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8741 error ("variable or field %qE declared void", identifier);
8743 else
8744 error ("variable or field declared void");
8745 type = error_mark_node;
8748 return type;
8751 /* Given declspecs and a declarator (abstract or otherwise), determine
8752 the name and type of the object declared and construct a DECL node
8753 for it.
8755 DECLSPECS points to the representation of declaration-specifier
8756 sequence that precedes declarator.
8758 DECL_CONTEXT says which syntactic context this declaration is in:
8759 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8760 FUNCDEF for a function definition. Like NORMAL but a few different
8761 error messages in each case. Return value may be zero meaning
8762 this definition is too screwy to try to parse.
8763 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8764 handle member functions (which have FIELD context).
8765 Return value may be zero meaning this definition is too screwy to
8766 try to parse.
8767 PARM for a parameter declaration (either within a function prototype
8768 or before a function body). Make a PARM_DECL, or return void_type_node.
8769 TPARM for a template parameter declaration.
8770 CATCHPARM for a parameter declaration before a catch clause.
8771 TYPENAME if for a typename (in a cast or sizeof).
8772 Don't make a DECL node; just return the ..._TYPE node.
8773 FIELD for a struct or union field; make a FIELD_DECL.
8774 BITFIELD for a field with specified width.
8776 INITIALIZED is as for start_decl.
8778 ATTRLIST is a pointer to the list of attributes, which may be NULL
8779 if there are none; *ATTRLIST may be modified if attributes from inside
8780 the declarator should be applied to the declaration.
8782 When this function is called, scoping variables (such as
8783 CURRENT_CLASS_TYPE) should reflect the scope in which the
8784 declaration occurs, not the scope in which the new declaration will
8785 be placed. For example, on:
8787 void S::f() { ... }
8789 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8790 should not be `S'.
8792 Returns a DECL (if a declarator is present), a TYPE (if there is no
8793 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8794 error occurs. */
8796 tree
8797 grokdeclarator (const cp_declarator *declarator,
8798 cp_decl_specifier_seq *declspecs,
8799 enum decl_context decl_context,
8800 int initialized,
8801 tree* attrlist)
8803 tree type = NULL_TREE;
8804 int longlong = 0;
8805 int explicit_int128 = 0;
8806 int virtualp, explicitp, friendp, inlinep, staticp;
8807 int explicit_int = 0;
8808 int explicit_char = 0;
8809 int defaulted_int = 0;
8811 tree typedef_decl = NULL_TREE;
8812 const char *name = NULL;
8813 tree typedef_type = NULL_TREE;
8814 /* True if this declarator is a function definition. */
8815 bool funcdef_flag = false;
8816 cp_declarator_kind innermost_code = cdk_error;
8817 int bitfield = 0;
8818 #if 0
8819 /* See the code below that used this. */
8820 tree decl_attr = NULL_TREE;
8821 #endif
8823 /* Keep track of what sort of function is being processed
8824 so that we can warn about default return values, or explicit
8825 return values which do not match prescribed defaults. */
8826 special_function_kind sfk = sfk_none;
8828 tree dname = NULL_TREE;
8829 tree ctor_return_type = NULL_TREE;
8830 enum overload_flags flags = NO_SPECIAL;
8831 /* cv-qualifiers that apply to the declarator, for a declaration of
8832 a member function. */
8833 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8834 /* virt-specifiers that apply to the declarator, for a declaration of
8835 a member function. */
8836 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8837 /* ref-qualifier that applies to the declarator, for a declaration of
8838 a member function. */
8839 cp_ref_qualifier rqual = REF_QUAL_NONE;
8840 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
8841 int type_quals;
8842 tree raises = NULL_TREE;
8843 int template_count = 0;
8844 tree returned_attrs = NULL_TREE;
8845 tree parms = NULL_TREE;
8846 const cp_declarator *id_declarator;
8847 /* The unqualified name of the declarator; either an
8848 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
8849 tree unqualified_id;
8850 /* The class type, if any, in which this entity is located,
8851 or NULL_TREE if none. Note that this value may be different from
8852 the current class type; for example if an attempt is made to declare
8853 "A::f" inside "B", this value will be "A". */
8854 tree ctype = current_class_type;
8855 /* The NAMESPACE_DECL for the namespace in which this entity is
8856 located. If an unqualified name is used to declare the entity,
8857 this value will be NULL_TREE, even if the entity is located at
8858 namespace scope. */
8859 tree in_namespace = NULL_TREE;
8860 cp_storage_class storage_class;
8861 bool unsigned_p, signed_p, short_p, long_p, thread_p;
8862 bool type_was_error_mark_node = false;
8863 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8864 bool template_type_arg = false;
8865 bool template_parm_flag = false;
8866 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
8867 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
8868 bool late_return_type_p = false;
8869 bool array_parameter_p = false;
8870 source_location saved_loc = input_location;
8871 const char *errmsg;
8873 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
8874 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
8875 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
8876 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
8877 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
8878 explicit_int128 = declspecs->explicit_int128_p;
8879 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
8881 if (decl_context == FUNCDEF)
8882 funcdef_flag = true, decl_context = NORMAL;
8883 else if (decl_context == MEMFUNCDEF)
8884 funcdef_flag = true, decl_context = FIELD;
8885 else if (decl_context == BITFIELD)
8886 bitfield = 1, decl_context = FIELD;
8887 else if (decl_context == TEMPLATE_TYPE_ARG)
8888 template_type_arg = true, decl_context = TYPENAME;
8889 else if (decl_context == TPARM)
8890 template_parm_flag = true, decl_context = PARM;
8892 if (initialized > 1)
8893 funcdef_flag = true;
8895 /* Look inside a declarator for the name being declared
8896 and get it as a string, for an error message. */
8897 for (id_declarator = declarator;
8898 id_declarator;
8899 id_declarator = id_declarator->declarator)
8901 if (id_declarator->kind != cdk_id)
8902 innermost_code = id_declarator->kind;
8904 switch (id_declarator->kind)
8906 case cdk_function:
8907 if (id_declarator->declarator
8908 && id_declarator->declarator->kind == cdk_id)
8910 sfk = id_declarator->declarator->u.id.sfk;
8911 if (sfk == sfk_destructor)
8912 flags = DTOR_FLAG;
8914 break;
8916 case cdk_id:
8918 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8919 tree decl = id_declarator->u.id.unqualified_name;
8920 if (!decl)
8921 break;
8922 if (qualifying_scope)
8924 if (at_function_scope_p ())
8926 /* [dcl.meaning]
8928 A declarator-id shall not be qualified except
8929 for ...
8931 None of the cases are permitted in block
8932 scope. */
8933 if (qualifying_scope == global_namespace)
8934 error ("invalid use of qualified-name %<::%D%>",
8935 decl);
8936 else if (TYPE_P (qualifying_scope))
8937 error ("invalid use of qualified-name %<%T::%D%>",
8938 qualifying_scope, decl);
8939 else
8940 error ("invalid use of qualified-name %<%D::%D%>",
8941 qualifying_scope, decl);
8942 return error_mark_node;
8944 else if (TYPE_P (qualifying_scope))
8946 ctype = qualifying_scope;
8947 if (!MAYBE_CLASS_TYPE_P (ctype))
8949 error ("%q#T is not a class or a namespace", ctype);
8950 ctype = NULL_TREE;
8952 else if (innermost_code != cdk_function
8953 && current_class_type
8954 && !uniquely_derived_from_p (ctype,
8955 current_class_type))
8957 error ("invalid use of qualified-name %<%T::%D%>",
8958 qualifying_scope, decl);
8959 return error_mark_node;
8962 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8963 in_namespace = qualifying_scope;
8965 switch (TREE_CODE (decl))
8967 case BIT_NOT_EXPR:
8969 tree type;
8971 if (innermost_code != cdk_function)
8973 error ("declaration of %qD as non-function", decl);
8974 return error_mark_node;
8976 else if (!qualifying_scope
8977 && !(current_class_type && at_class_scope_p ()))
8979 error ("declaration of %qD as non-member", decl);
8980 return error_mark_node;
8983 type = TREE_OPERAND (decl, 0);
8984 if (TYPE_P (type))
8985 type = constructor_name (type);
8986 name = identifier_to_locale (IDENTIFIER_POINTER (type));
8987 dname = decl;
8989 break;
8991 case TEMPLATE_ID_EXPR:
8993 tree fns = TREE_OPERAND (decl, 0);
8995 dname = fns;
8996 if (!identifier_p (dname))
8998 if (variable_template_p (dname))
8999 dname = DECL_NAME (dname);
9000 else
9002 gcc_assert (is_overloaded_fn (dname));
9003 dname = DECL_NAME (get_first_fn (dname));
9007 /* Fall through. */
9009 case IDENTIFIER_NODE:
9010 if (identifier_p (decl))
9011 dname = decl;
9013 if (C_IS_RESERVED_WORD (dname))
9015 error ("declarator-id missing; using reserved word %qD",
9016 dname);
9017 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9019 else if (!IDENTIFIER_TYPENAME_P (dname))
9020 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9021 else
9023 gcc_assert (flags == NO_SPECIAL);
9024 flags = TYPENAME_FLAG;
9025 ctor_return_type = TREE_TYPE (dname);
9026 sfk = sfk_conversion;
9027 if (is_typename_at_global_scope (dname))
9028 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9029 else
9030 name = "<invalid operator>";
9032 break;
9034 default:
9035 gcc_unreachable ();
9037 break;
9040 case cdk_array:
9041 case cdk_pointer:
9042 case cdk_reference:
9043 case cdk_ptrmem:
9044 break;
9046 case cdk_error:
9047 return error_mark_node;
9049 default:
9050 gcc_unreachable ();
9052 if (id_declarator->kind == cdk_id)
9053 break;
9056 /* [dcl.fct.edf]
9058 The declarator in a function-definition shall have the form
9059 D1 ( parameter-declaration-clause) ... */
9060 if (funcdef_flag && innermost_code != cdk_function)
9062 error ("function definition does not declare parameters");
9063 return error_mark_node;
9066 if (flags == TYPENAME_FLAG
9067 && innermost_code != cdk_function
9068 && ! (ctype && !declspecs->any_specifiers_p))
9070 error ("declaration of %qD as non-function", dname);
9071 return error_mark_node;
9074 if (dname
9075 && identifier_p (dname)
9076 && UDLIT_OPER_P (dname)
9077 && innermost_code != cdk_function)
9079 error ("declaration of %qD as non-function", dname);
9080 return error_mark_node;
9083 if (dname && IDENTIFIER_OPNAME_P (dname))
9085 if (typedef_p)
9087 error ("declaration of %qD as %<typedef%>", dname);
9088 return error_mark_node;
9090 else if (decl_context == PARM || decl_context == CATCHPARM)
9092 error ("declaration of %qD as parameter", dname);
9093 return error_mark_node;
9097 /* Anything declared one level down from the top level
9098 must be one of the parameters of a function
9099 (because the body is at least two levels down). */
9101 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9102 by not allowing C++ class definitions to specify their parameters
9103 with xdecls (must be spec.d in the parmlist).
9105 Since we now wait to push a class scope until we are sure that
9106 we are in a legitimate method context, we must set oldcname
9107 explicitly (since current_class_name is not yet alive).
9109 We also want to avoid calling this a PARM if it is in a namespace. */
9111 if (decl_context == NORMAL && !toplevel_bindings_p ())
9113 cp_binding_level *b = current_binding_level;
9114 current_binding_level = b->level_chain;
9115 if (current_binding_level != 0 && toplevel_bindings_p ())
9116 decl_context = PARM;
9117 current_binding_level = b;
9120 if (name == NULL)
9121 name = decl_context == PARM ? "parameter" : "type name";
9123 if (constexpr_p && typedef_p)
9125 error ("%<constexpr%> cannot appear in a typedef declaration");
9126 return error_mark_node;
9129 /* If there were multiple types specified in the decl-specifier-seq,
9130 issue an error message. */
9131 if (declspecs->multiple_types_p)
9133 error ("two or more data types in declaration of %qs", name);
9134 return error_mark_node;
9137 if (declspecs->conflicting_specifiers_p)
9139 error ("conflicting specifiers in declaration of %qs", name);
9140 return error_mark_node;
9143 /* Extract the basic type from the decl-specifier-seq. */
9144 type = declspecs->type;
9145 if (type == error_mark_node)
9147 type = NULL_TREE;
9148 type_was_error_mark_node = true;
9150 /* If the entire declaration is itself tagged as deprecated then
9151 suppress reports of deprecated items. */
9152 if (type && TREE_DEPRECATED (type)
9153 && deprecated_state != DEPRECATED_SUPPRESS)
9154 warn_deprecated_use (type, NULL_TREE);
9155 if (type && TREE_CODE (type) == TYPE_DECL)
9157 typedef_decl = type;
9158 type = TREE_TYPE (typedef_decl);
9159 if (TREE_DEPRECATED (type)
9160 && DECL_ARTIFICIAL (typedef_decl)
9161 && deprecated_state != DEPRECATED_SUPPRESS)
9162 warn_deprecated_use (type, NULL_TREE);
9164 /* No type at all: default to `int', and set DEFAULTED_INT
9165 because it was not a user-defined typedef. */
9166 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
9168 /* These imply 'int'. */
9169 type = integer_type_node;
9170 defaulted_int = 1;
9172 /* Gather flags. */
9173 explicit_int = declspecs->explicit_int_p;
9174 explicit_char = declspecs->explicit_char_p;
9176 #if 0
9177 /* See the code below that used this. */
9178 if (typedef_decl)
9179 decl_attr = DECL_ATTRIBUTES (typedef_decl);
9180 #endif
9181 typedef_type = type;
9184 if (sfk != sfk_conversion)
9185 ctor_return_type = ctype;
9187 if (sfk != sfk_none)
9188 type = check_special_function_return_type (sfk, type,
9189 ctor_return_type);
9190 else if (type == NULL_TREE)
9192 int is_main;
9194 explicit_int = -1;
9196 /* We handle `main' specially here, because 'main () { }' is so
9197 common. With no options, it is allowed. With -Wreturn-type,
9198 it is a warning. It is only an error with -pedantic-errors. */
9199 is_main = (funcdef_flag
9200 && dname && identifier_p (dname)
9201 && MAIN_NAME_P (dname)
9202 && ctype == NULL_TREE
9203 && in_namespace == NULL_TREE
9204 && current_namespace == global_namespace);
9206 if (type_was_error_mark_node)
9207 /* We've already issued an error, don't complain more. */;
9208 else if (in_system_header_at (input_location) || flag_ms_extensions)
9209 /* Allow it, sigh. */;
9210 else if (! is_main)
9211 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
9212 else if (pedantic)
9213 pedwarn (input_location, OPT_Wpedantic,
9214 "ISO C++ forbids declaration of %qs with no type", name);
9215 else
9216 warning (OPT_Wreturn_type,
9217 "ISO C++ forbids declaration of %qs with no type", name);
9219 type = integer_type_node;
9222 ctype = NULL_TREE;
9224 if (explicit_int128)
9226 if (int128_integer_type_node == NULL_TREE)
9228 error ("%<__int128%> is not supported by this target");
9229 explicit_int128 = false;
9231 else if (pedantic && ! in_system_header_at (input_location))
9232 pedwarn (input_location, OPT_Wpedantic,
9233 "ISO C++ does not support %<__int128%> for %qs", name);
9236 /* Now process the modifiers that were specified
9237 and check for invalid combinations. */
9239 /* Long double is a special combination. */
9240 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9242 long_p = false;
9243 type = cp_build_qualified_type (long_double_type_node,
9244 cp_type_quals (type));
9247 /* Check all other uses of type modifiers. */
9249 if (unsigned_p || signed_p || long_p || short_p)
9251 int ok = 0;
9253 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9254 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9255 else if (signed_p && unsigned_p)
9256 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9257 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9258 error ("%<long long%> invalid for %qs", name);
9259 else if (long_p && TREE_CODE (type) == REAL_TYPE)
9260 error ("%<long%> invalid for %qs", name);
9261 else if (short_p && TREE_CODE (type) == REAL_TYPE)
9262 error ("%<short%> invalid for %qs", name);
9263 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9264 error ("%<long%> or %<short%> invalid for %qs", name);
9265 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
9266 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9267 else if ((long_p || short_p) && explicit_char)
9268 error ("%<long%> or %<short%> specified with char for %qs", name);
9269 else if (long_p && short_p)
9270 error ("%<long%> and %<short%> specified together for %qs", name);
9271 else if (type == char16_type_node || type == char32_type_node)
9273 if (signed_p || unsigned_p)
9274 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9275 else if (short_p || long_p)
9276 error ("%<short%> or %<long%> invalid for %qs", name);
9278 else
9280 ok = 1;
9281 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
9283 pedwarn (input_location, OPT_Wpedantic,
9284 "long, short, signed or unsigned used invalidly for %qs",
9285 name);
9286 if (flag_pedantic_errors)
9287 ok = 0;
9291 /* Discard the type modifiers if they are invalid. */
9292 if (! ok)
9294 unsigned_p = false;
9295 signed_p = false;
9296 long_p = false;
9297 short_p = false;
9298 longlong = 0;
9302 /* Decide whether an integer type is signed or not.
9303 Optionally treat bitfields as signed by default. */
9304 if (unsigned_p
9305 /* [class.bit]
9307 It is implementation-defined whether a plain (neither
9308 explicitly signed or unsigned) char, short, int, or long
9309 bit-field is signed or unsigned.
9311 Naturally, we extend this to long long as well. Note that
9312 this does not include wchar_t. */
9313 || (bitfield && !flag_signed_bitfields
9314 && !signed_p
9315 /* A typedef for plain `int' without `signed' can be
9316 controlled just like plain `int', but a typedef for
9317 `signed int' cannot be so controlled. */
9318 && !(typedef_decl
9319 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9320 && TREE_CODE (type) == INTEGER_TYPE
9321 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9323 if (explicit_int128)
9324 type = int128_unsigned_type_node;
9325 else if (longlong)
9326 type = long_long_unsigned_type_node;
9327 else if (long_p)
9328 type = long_unsigned_type_node;
9329 else if (short_p)
9330 type = short_unsigned_type_node;
9331 else if (type == char_type_node)
9332 type = unsigned_char_type_node;
9333 else if (typedef_decl)
9334 type = unsigned_type_for (type);
9335 else
9336 type = unsigned_type_node;
9338 else if (signed_p && type == char_type_node)
9339 type = signed_char_type_node;
9340 else if (explicit_int128)
9341 type = int128_integer_type_node;
9342 else if (longlong)
9343 type = long_long_integer_type_node;
9344 else if (long_p)
9345 type = long_integer_type_node;
9346 else if (short_p)
9347 type = short_integer_type_node;
9349 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9351 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9352 error ("complex invalid for %qs", name);
9353 /* If we just have "complex", it is equivalent to
9354 "complex double", but if any modifiers at all are specified it is
9355 the complex form of TYPE. E.g, "complex short" is
9356 "complex short int". */
9357 else if (defaulted_int && ! longlong && ! explicit_int128
9358 && ! (long_p || short_p || signed_p || unsigned_p))
9359 type = complex_double_type_node;
9360 else if (type == integer_type_node)
9361 type = complex_integer_type_node;
9362 else if (type == float_type_node)
9363 type = complex_float_type_node;
9364 else if (type == double_type_node)
9365 type = complex_double_type_node;
9366 else if (type == long_double_type_node)
9367 type = complex_long_double_type_node;
9368 else
9369 type = build_complex_type (type);
9372 type_quals = TYPE_UNQUALIFIED;
9373 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9374 type_quals |= TYPE_QUAL_CONST;
9375 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9376 type_quals |= TYPE_QUAL_VOLATILE;
9377 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9378 type_quals |= TYPE_QUAL_RESTRICT;
9379 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
9380 error ("qualifiers are not allowed on declaration of %<operator %T%>",
9381 ctor_return_type);
9383 /* If we're using the injected-class-name to form a compound type or a
9384 declaration, replace it with the underlying class so we don't get
9385 redundant typedefs in the debug output. But if we are returning the
9386 type unchanged, leave it alone so that it's available to
9387 maybe_get_template_decl_from_type_decl. */
9388 if (CLASS_TYPE_P (type)
9389 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9390 && type == TREE_TYPE (TYPE_NAME (type))
9391 && (declarator || type_quals))
9392 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9394 type_quals |= cp_type_quals (type);
9395 type = cp_build_qualified_type_real
9396 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
9397 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9398 /* We might have ignored or rejected some of the qualifiers. */
9399 type_quals = cp_type_quals (type);
9401 staticp = 0;
9402 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9403 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9404 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9406 storage_class = declspecs->storage_class;
9407 if (storage_class == sc_static)
9408 staticp = 1 + (decl_context == FIELD);
9410 if (virtualp && staticp == 2)
9412 error ("member %qD cannot be declared both virtual and static", dname);
9413 storage_class = sc_none;
9414 staticp = 0;
9416 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9418 /* Issue errors about use of storage classes for parameters. */
9419 if (decl_context == PARM)
9421 if (typedef_p)
9423 error ("typedef declaration invalid in parameter declaration");
9424 return error_mark_node;
9426 else if (template_parm_flag && storage_class != sc_none)
9428 error ("storage class specified for template parameter %qs", name);
9429 return error_mark_node;
9431 else if (storage_class == sc_static
9432 || storage_class == sc_extern
9433 || thread_p)
9434 error ("storage class specifiers invalid in parameter declarations");
9436 /* Function parameters cannot be constexpr. If we saw one, moan
9437 and pretend it wasn't there. */
9438 if (constexpr_p)
9440 error ("a parameter cannot be declared %<constexpr%>");
9441 constexpr_p = 0;
9445 /* Give error if `virtual' is used outside of class declaration. */
9446 if (virtualp
9447 && (current_class_name == NULL_TREE || decl_context != FIELD))
9449 error ("%<virtual%> outside class declaration");
9450 virtualp = 0;
9453 /* Static anonymous unions are dealt with here. */
9454 if (staticp && decl_context == TYPENAME
9455 && declspecs->type
9456 && ANON_AGGR_TYPE_P (declspecs->type))
9457 decl_context = FIELD;
9459 /* Warn about storage classes that are invalid for certain
9460 kinds of declarations (parameters, typenames, etc.). */
9461 if (thread_p
9462 && ((storage_class
9463 && storage_class != sc_extern
9464 && storage_class != sc_static)
9465 || typedef_p))
9467 error ("multiple storage classes in declaration of %qs", name);
9468 thread_p = false;
9470 if (decl_context != NORMAL
9471 && ((storage_class != sc_none
9472 && storage_class != sc_mutable)
9473 || thread_p))
9475 if ((decl_context == PARM || decl_context == CATCHPARM)
9476 && (storage_class == sc_register
9477 || storage_class == sc_auto))
9479 else if (typedef_p)
9481 else if (decl_context == FIELD
9482 /* C++ allows static class elements. */
9483 && storage_class == sc_static)
9484 /* C++ also allows inlines and signed and unsigned elements,
9485 but in those cases we don't come in here. */
9487 else
9489 if (decl_context == FIELD)
9490 error ("storage class specified for %qs", name);
9491 else
9493 if (decl_context == PARM || decl_context == CATCHPARM)
9494 error ("storage class specified for parameter %qs", name);
9495 else
9496 error ("storage class specified for typename");
9498 if (storage_class == sc_register
9499 || storage_class == sc_auto
9500 || storage_class == sc_extern
9501 || thread_p)
9502 storage_class = sc_none;
9505 else if (storage_class == sc_extern && funcdef_flag
9506 && ! toplevel_bindings_p ())
9507 error ("nested function %qs declared %<extern%>", name);
9508 else if (toplevel_bindings_p ())
9510 if (storage_class == sc_auto)
9511 error ("top-level declaration of %qs specifies %<auto%>", name);
9513 else if (thread_p
9514 && storage_class != sc_extern
9515 && storage_class != sc_static)
9517 if (declspecs->gnu_thread_keyword_p)
9518 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9519 "declared %<__thread%>", name);
9521 /* When thread_local is applied to a variable of block scope the
9522 storage-class-specifier static is implied if it does not appear
9523 explicitly. */
9524 storage_class = declspecs->storage_class = sc_static;
9525 staticp = 1;
9528 if (storage_class && friendp)
9530 error ("storage class specifiers invalid in friend function declarations");
9531 storage_class = sc_none;
9532 staticp = 0;
9535 if (!id_declarator)
9536 unqualified_id = NULL_TREE;
9537 else
9539 unqualified_id = id_declarator->u.id.unqualified_name;
9540 switch (TREE_CODE (unqualified_id))
9542 case BIT_NOT_EXPR:
9543 unqualified_id = TREE_OPERAND (unqualified_id, 0);
9544 if (TYPE_P (unqualified_id))
9545 unqualified_id = constructor_name (unqualified_id);
9546 break;
9548 case IDENTIFIER_NODE:
9549 case TEMPLATE_ID_EXPR:
9550 break;
9552 default:
9553 gcc_unreachable ();
9557 if (declspecs->std_attributes)
9559 /* Apply the c++11 attributes to the type preceding them. */
9560 input_location = declspecs->locations[ds_std_attribute];
9561 decl_attributes (&type, declspecs->std_attributes, 0);
9562 input_location = saved_loc;
9565 /* Determine the type of the entity declared by recurring on the
9566 declarator. */
9567 for (; declarator; declarator = declarator->declarator)
9569 const cp_declarator *inner_declarator;
9570 tree attrs;
9572 if (type == error_mark_node)
9573 return error_mark_node;
9575 attrs = declarator->attributes;
9576 if (attrs)
9578 int attr_flags;
9580 attr_flags = 0;
9581 if (declarator == NULL || declarator->kind == cdk_id)
9582 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9583 if (declarator->kind == cdk_function)
9584 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9585 if (declarator->kind == cdk_array)
9586 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9587 returned_attrs = decl_attributes (&type,
9588 chainon (returned_attrs, attrs),
9589 attr_flags);
9592 if (declarator->kind == cdk_id)
9593 break;
9595 inner_declarator = declarator->declarator;
9597 switch (declarator->kind)
9599 case cdk_array:
9600 type = create_array_type_for_decl (dname, type,
9601 declarator->u.array.bounds);
9602 if (declarator->std_attributes)
9603 /* [dcl.array]/1:
9605 The optional attribute-specifier-seq appertains to the
9606 array. */
9607 returned_attrs = chainon (returned_attrs,
9608 declarator->std_attributes);
9609 break;
9611 case cdk_function:
9613 tree arg_types;
9614 int funcdecl_p;
9616 /* Declaring a function type.
9617 Make sure we have a valid type for the function to return. */
9619 if (type_quals != TYPE_UNQUALIFIED)
9621 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9622 warning (OPT_Wignored_qualifiers,
9623 "type qualifiers ignored on function return type");
9624 /* We now know that the TYPE_QUALS don't apply to the
9625 decl, but to its return type. */
9626 type_quals = TYPE_UNQUALIFIED;
9628 errmsg = targetm.invalid_return_type (type);
9629 if (errmsg)
9631 error (errmsg);
9632 type = integer_type_node;
9635 /* Error about some types functions can't return. */
9637 if (TREE_CODE (type) == FUNCTION_TYPE)
9639 error ("%qs declared as function returning a function", name);
9640 return error_mark_node;
9642 if (TREE_CODE (type) == ARRAY_TYPE)
9644 error ("%qs declared as function returning an array", name);
9645 return error_mark_node;
9648 input_location = declspecs->locations[ds_type_spec];
9649 abstract_virtuals_error (ACU_RETURN, type);
9650 input_location = saved_loc;
9652 /* Pick up type qualifiers which should be applied to `this'. */
9653 memfn_quals = declarator->u.function.qualifiers;
9654 /* Pick up virt-specifiers. */
9655 virt_specifiers = declarator->u.function.virt_specifiers;
9656 /* And ref-qualifier, too */
9657 rqual = declarator->u.function.ref_qualifier;
9658 /* Pick up the exception specifications. */
9659 raises = declarator->u.function.exception_specification;
9660 /* If the exception-specification is ill-formed, let's pretend
9661 there wasn't one. */
9662 if (raises == error_mark_node)
9663 raises = NULL_TREE;
9665 /* Say it's a definition only for the CALL_EXPR
9666 closest to the identifier. */
9667 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9669 /* Handle a late-specified return type. */
9670 if (funcdecl_p)
9672 if (type_uses_auto (type))
9674 if (!declarator->u.function.late_return_type)
9676 if (current_class_type
9677 && LAMBDA_TYPE_P (current_class_type))
9678 /* OK for C++11 lambdas. */;
9679 else if (cxx_dialect < cxx14)
9681 error ("%qs function uses "
9682 "%<auto%> type specifier without trailing "
9683 "return type", name);
9684 inform (input_location, "deduced return type "
9685 "only available with -std=c++14 or "
9686 "-std=gnu++14");
9688 else if (virtualp)
9690 error ("virtual function cannot "
9691 "have deduced return type");
9692 virtualp = false;
9695 else if (!is_auto (type))
9697 error ("%qs function with trailing return type has"
9698 " %qT as its type rather than plain %<auto%>",
9699 name, type);
9700 return error_mark_node;
9703 else if (declarator->u.function.late_return_type)
9705 if (cxx_dialect < cxx11)
9706 /* Not using maybe_warn_cpp0x because this should
9707 always be an error. */
9708 error ("trailing return type only available with "
9709 "-std=c++11 or -std=gnu++11");
9710 else
9711 error ("%qs function with trailing return type not "
9712 "declared with %<auto%> type specifier", name);
9713 return error_mark_node;
9716 type = splice_late_return_type
9717 (type, declarator->u.function.late_return_type);
9718 if (type == error_mark_node)
9719 return error_mark_node;
9721 if (declarator->u.function.late_return_type)
9722 late_return_type_p = true;
9724 if (ctype == NULL_TREE
9725 && decl_context == FIELD
9726 && funcdecl_p
9727 && friendp == 0)
9728 ctype = current_class_type;
9730 if (ctype && (sfk == sfk_constructor
9731 || sfk == sfk_destructor))
9733 /* We are within a class's scope. If our declarator name
9734 is the same as the class name, and we are defining
9735 a function, then it is a constructor/destructor, and
9736 therefore returns a void type. */
9738 /* ISO C++ 12.4/2. A destructor may not be declared
9739 const or volatile. A destructor may not be static.
9740 A destructor may not be declared with ref-qualifier.
9742 ISO C++ 12.1. A constructor may not be declared
9743 const or volatile. A constructor may not be
9744 virtual. A constructor may not be static.
9745 A constructor may not be declared with ref-qualifier. */
9746 if (staticp == 2)
9747 error ((flags == DTOR_FLAG)
9748 ? G_("destructor cannot be static member function")
9749 : G_("constructor cannot be static member function"));
9750 if (memfn_quals)
9752 error ((flags == DTOR_FLAG)
9753 ? G_("destructors may not be cv-qualified")
9754 : G_("constructors may not be cv-qualified"));
9755 memfn_quals = TYPE_UNQUALIFIED;
9758 if (rqual)
9760 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
9761 error ((flags == DTOR_FLAG)
9762 ? "destructors may not be ref-qualified"
9763 : "constructors may not be ref-qualified");
9764 rqual = REF_QUAL_NONE;
9767 if (decl_context == FIELD
9768 && !member_function_or_else (ctype,
9769 current_class_type,
9770 flags))
9771 return error_mark_node;
9773 if (flags != DTOR_FLAG)
9775 /* It's a constructor. */
9776 if (explicitp == 1)
9777 explicitp = 2;
9778 if (virtualp)
9780 permerror (input_location, "constructors cannot be declared virtual");
9781 virtualp = 0;
9783 if (decl_context == FIELD
9784 && sfk != sfk_constructor)
9785 return error_mark_node;
9787 if (decl_context == FIELD)
9788 staticp = 0;
9790 else if (friendp)
9792 if (virtualp)
9794 /* Cannot be both friend and virtual. */
9795 error ("virtual functions cannot be friends");
9796 friendp = 0;
9798 if (decl_context == NORMAL)
9799 error ("friend declaration not in class definition");
9800 if (current_function_decl && funcdef_flag)
9801 error ("can%'t define friend function %qs in a local "
9802 "class definition",
9803 name);
9805 else if (ctype && sfk == sfk_conversion)
9807 if (explicitp == 1)
9809 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9810 explicitp = 2;
9814 arg_types = grokparms (declarator->u.function.parameters,
9815 &parms);
9817 if (inner_declarator
9818 && inner_declarator->kind == cdk_id
9819 && inner_declarator->u.id.sfk == sfk_destructor
9820 && arg_types != void_list_node)
9822 error ("destructors may not have parameters");
9823 arg_types = void_list_node;
9824 parms = NULL_TREE;
9827 type = build_function_type (type, arg_types);
9828 if (declarator->std_attributes)
9829 /* [dcl.fct]/2:
9831 The optional attribute-specifier-seq appertains to
9832 the function type. */
9833 decl_attributes (&type, declarator->std_attributes,
9836 break;
9838 case cdk_pointer:
9839 case cdk_reference:
9840 case cdk_ptrmem:
9841 /* Filter out pointers-to-references and references-to-references.
9842 We can get these if a TYPE_DECL is used. */
9844 if (TREE_CODE (type) == REFERENCE_TYPE)
9846 if (declarator->kind != cdk_reference)
9848 error ("cannot declare pointer to %q#T", type);
9849 type = TREE_TYPE (type);
9852 /* In C++0x, we allow reference to reference declarations
9853 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9854 and template type arguments [14.3.1/4 temp.arg.type]. The
9855 check for direct reference to reference declarations, which
9856 are still forbidden, occurs below. Reasoning behind the change
9857 can be found in DR106, DR540, and the rvalue reference
9858 proposals. */
9859 else if (cxx_dialect == cxx98)
9861 error ("cannot declare reference to %q#T", type);
9862 type = TREE_TYPE (type);
9865 else if (VOID_TYPE_P (type))
9867 if (declarator->kind == cdk_reference)
9868 error ("cannot declare reference to %q#T", type);
9869 else if (declarator->kind == cdk_ptrmem)
9870 error ("cannot declare pointer to %q#T member", type);
9873 /* We now know that the TYPE_QUALS don't apply to the decl,
9874 but to the target of the pointer. */
9875 type_quals = TYPE_UNQUALIFIED;
9877 /* This code used to handle METHOD_TYPE, but I don't think it's
9878 possible to get it here anymore. */
9879 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9880 if (declarator->kind == cdk_ptrmem
9881 && TREE_CODE (type) == FUNCTION_TYPE)
9883 memfn_quals |= type_memfn_quals (type);
9884 type = build_memfn_type (type,
9885 declarator->u.pointer.class_type,
9886 memfn_quals,
9887 rqual);
9888 if (type == error_mark_node)
9889 return error_mark_node;
9891 rqual = REF_QUAL_NONE;
9892 memfn_quals = TYPE_UNQUALIFIED;
9895 if (TREE_CODE (type) == FUNCTION_TYPE
9896 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
9897 || type_memfn_rqual (type) != REF_QUAL_NONE))
9898 error (declarator->kind == cdk_reference
9899 ? G_("cannot declare reference to qualified function type %qT")
9900 : G_("cannot declare pointer to qualified function type %qT"),
9901 type);
9903 if (cxx_dialect >= cxx14 && array_of_runtime_bound_p (type)
9904 && (flag_iso || warn_vla > 0))
9905 pedwarn (input_location, OPT_Wvla,
9906 declarator->kind == cdk_reference
9907 ? G_("reference to array of runtime bound")
9908 : G_("pointer to array of runtime bound"));
9910 /* When the pointed-to type involves components of variable size,
9911 care must be taken to ensure that the size evaluation code is
9912 emitted early enough to dominate all the possible later uses
9913 and late enough for the variables on which it depends to have
9914 been assigned.
9916 This is expected to happen automatically when the pointed-to
9917 type has a name/declaration of it's own, but special attention
9918 is required if the type is anonymous.
9920 We handle the NORMAL and FIELD contexts here by inserting a
9921 dummy statement that just evaluates the size at a safe point
9922 and ensures it is not deferred until e.g. within a deeper
9923 conditional context (c++/43555).
9925 We expect nothing to be needed here for PARM or TYPENAME.
9926 Evaluating the size at this point for TYPENAME would
9927 actually be incorrect, as we might be in the middle of an
9928 expression with side effects on the pointed-to type size
9929 "arguments" prior to the pointer declaration point and the
9930 size evaluation could end up prior to the side effects. */
9932 if (!TYPE_NAME (type)
9933 && (decl_context == NORMAL || decl_context == FIELD)
9934 && at_function_scope_p ()
9935 && variably_modified_type_p (type, NULL_TREE))
9936 /* Force evaluation of the SAVE_EXPR. */
9937 finish_expr_stmt (TYPE_SIZE (type));
9939 if (declarator->kind == cdk_reference)
9941 /* In C++0x, the type we are creating a reference to might be
9942 a typedef which is itself a reference type. In that case,
9943 we follow the reference collapsing rules in
9944 [7.1.3/8 dcl.typedef] to create the final reference type:
9946 "If a typedef TD names a type that is a reference to a type
9947 T, an attempt to create the type 'lvalue reference to cv TD'
9948 creates the type 'lvalue reference to T,' while an attempt
9949 to create the type "rvalue reference to cv TD' creates the
9950 type TD."
9952 if (VOID_TYPE_P (type))
9953 /* We already gave an error. */;
9954 else if (TREE_CODE (type) == REFERENCE_TYPE)
9956 if (declarator->u.reference.rvalue_ref)
9957 /* Leave type alone. */;
9958 else
9959 type = cp_build_reference_type (TREE_TYPE (type), false);
9961 else
9962 type = cp_build_reference_type
9963 (type, declarator->u.reference.rvalue_ref);
9965 /* In C++0x, we need this check for direct reference to
9966 reference declarations, which are forbidden by
9967 [8.3.2/5 dcl.ref]. Reference to reference declarations
9968 are only allowed indirectly through typedefs and template
9969 type arguments. Example:
9971 void foo(int & &); // invalid ref-to-ref decl
9973 typedef int & int_ref;
9974 void foo(int_ref &); // valid ref-to-ref decl
9976 if (inner_declarator && inner_declarator->kind == cdk_reference)
9977 error ("cannot declare reference to %q#T, which is not "
9978 "a typedef or a template type argument", type);
9980 else if (TREE_CODE (type) == METHOD_TYPE)
9981 type = build_ptrmemfunc_type (build_pointer_type (type));
9982 else if (declarator->kind == cdk_ptrmem)
9984 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9985 != NAMESPACE_DECL);
9986 if (declarator->u.pointer.class_type == error_mark_node)
9987 /* We will already have complained. */
9988 type = error_mark_node;
9989 else
9990 type = build_ptrmem_type (declarator->u.pointer.class_type,
9991 type);
9993 else
9994 type = build_pointer_type (type);
9996 /* Process a list of type modifier keywords (such as
9997 const or volatile) that were given inside the `*' or `&'. */
9999 if (declarator->u.pointer.qualifiers)
10001 type
10002 = cp_build_qualified_type (type,
10003 declarator->u.pointer.qualifiers);
10004 type_quals = cp_type_quals (type);
10007 /* Apply C++11 attributes to the pointer, and not to the
10008 type pointed to. This is unlike what is done for GNU
10009 attributes above. It is to comply with [dcl.ptr]/1:
10011 [the optional attribute-specifier-seq (7.6.1) appertains
10012 to the pointer and not to the object pointed to]. */
10013 if (declarator->std_attributes)
10014 decl_attributes (&type, declarator->std_attributes,
10017 ctype = NULL_TREE;
10018 break;
10020 case cdk_error:
10021 break;
10023 default:
10024 gcc_unreachable ();
10028 /* A `constexpr' specifier used in an object declaration declares
10029 the object as `const'. */
10030 if (constexpr_p && innermost_code != cdk_function)
10032 if (type_quals & TYPE_QUAL_VOLATILE)
10033 error ("both %<volatile%> and %<constexpr%> cannot be used here");
10034 if (TREE_CODE (type) != REFERENCE_TYPE)
10036 type_quals |= TYPE_QUAL_CONST;
10037 type = cp_build_qualified_type (type, type_quals);
10041 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
10042 && TREE_CODE (type) != FUNCTION_TYPE
10043 && TREE_CODE (type) != METHOD_TYPE
10044 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
10046 error ("template-id %qD used as a declarator",
10047 unqualified_id);
10048 unqualified_id = dname;
10051 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
10052 qualified with a class-name, turn it into a METHOD_TYPE, unless
10053 we know that the function is static. We take advantage of this
10054 opportunity to do other processing that pertains to entities
10055 explicitly declared to be class members. Note that if DECLARATOR
10056 is non-NULL, we know it is a cdk_id declarator; otherwise, we
10057 would not have exited the loop above. */
10058 if (declarator
10059 && declarator->u.id.qualifying_scope
10060 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
10062 ctype = declarator->u.id.qualifying_scope;
10063 ctype = TYPE_MAIN_VARIANT (ctype);
10064 template_count = num_template_headers_for_class (ctype);
10066 if (ctype == current_class_type)
10068 if (friendp)
10070 permerror (input_location, "member functions are implicitly friends of their class");
10071 friendp = 0;
10073 else
10074 permerror (declarator->id_loc,
10075 "extra qualification %<%T::%> on member %qs",
10076 ctype, name);
10078 else if (/* If the qualifying type is already complete, then we
10079 can skip the following checks. */
10080 !COMPLETE_TYPE_P (ctype)
10081 && (/* If the function is being defined, then
10082 qualifying type must certainly be complete. */
10083 funcdef_flag
10084 /* A friend declaration of "T::f" is OK, even if
10085 "T" is a template parameter. But, if this
10086 function is not a friend, the qualifying type
10087 must be a class. */
10088 || (!friendp && !CLASS_TYPE_P (ctype))
10089 /* For a declaration, the type need not be
10090 complete, if either it is dependent (since there
10091 is no meaningful definition of complete in that
10092 case) or the qualifying class is currently being
10093 defined. */
10094 || !(dependent_type_p (ctype)
10095 || currently_open_class (ctype)))
10096 /* Check that the qualifying type is complete. */
10097 && !complete_type_or_else (ctype, NULL_TREE))
10098 return error_mark_node;
10099 else if (TREE_CODE (type) == FUNCTION_TYPE)
10101 if (current_class_type
10102 && (!friendp || funcdef_flag))
10104 error (funcdef_flag
10105 ? G_("cannot define member function %<%T::%s%> "
10106 "within %<%T%>")
10107 : G_("cannot declare member function %<%T::%s%> "
10108 "within %<%T%>"),
10109 ctype, name, current_class_type);
10110 return error_mark_node;
10113 else if (typedef_p && current_class_type)
10115 error ("cannot declare member %<%T::%s%> within %qT",
10116 ctype, name, current_class_type);
10117 return error_mark_node;
10121 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
10122 ctype = current_class_type;
10124 /* Now TYPE has the actual type. */
10126 if (returned_attrs)
10128 if (attrlist)
10129 *attrlist = chainon (returned_attrs, *attrlist);
10130 else
10131 attrlist = &returned_attrs;
10134 if (declarator
10135 && declarator->kind == cdk_id
10136 && declarator->std_attributes)
10137 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
10138 a declarator-id appertains to the entity that is declared. */
10139 *attrlist = chainon (*attrlist, declarator->std_attributes);
10141 /* Handle parameter packs. */
10142 if (parameter_pack_p)
10144 if (decl_context == PARM)
10145 /* Turn the type into a pack expansion.*/
10146 type = make_pack_expansion (type);
10147 else
10148 error ("non-parameter %qs cannot be a parameter pack", name);
10151 /* Did array size calculations overflow or does the array cover more
10152 than half of the address-space? */
10153 if (TREE_CODE (type) == ARRAY_TYPE
10154 && COMPLETE_TYPE_P (type)
10155 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
10156 && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
10158 error ("size of array %qs is too large", name);
10159 /* If we proceed with the array type as it is, we'll eventually
10160 crash in tree_to_[su]hwi(). */
10161 type = error_mark_node;
10164 if ((decl_context == FIELD || decl_context == PARM)
10165 && !processing_template_decl
10166 && variably_modified_type_p (type, NULL_TREE))
10168 if (decl_context == FIELD)
10169 error ("data member may not have variably modified type %qT", type);
10170 else
10171 error ("parameter may not have variably modified type %qT", type);
10172 type = error_mark_node;
10175 if (explicitp == 1 || (explicitp && friendp))
10177 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
10178 in the declaration of a constructor or conversion function within
10179 a class definition. */
10180 if (!current_class_type)
10181 error ("%<explicit%> outside class declaration");
10182 else if (friendp)
10183 error ("%<explicit%> in friend declaration");
10184 else
10185 error ("only declarations of constructors and conversion operators "
10186 "can be %<explicit%>");
10187 explicitp = 0;
10190 if (storage_class == sc_mutable)
10192 if (decl_context != FIELD || friendp)
10194 error ("non-member %qs cannot be declared %<mutable%>", name);
10195 storage_class = sc_none;
10197 else if (decl_context == TYPENAME || typedef_p)
10199 error ("non-object member %qs cannot be declared %<mutable%>", name);
10200 storage_class = sc_none;
10202 else if (TREE_CODE (type) == FUNCTION_TYPE
10203 || TREE_CODE (type) == METHOD_TYPE)
10205 error ("function %qs cannot be declared %<mutable%>", name);
10206 storage_class = sc_none;
10208 else if (staticp)
10210 error ("static %qs cannot be declared %<mutable%>", name);
10211 storage_class = sc_none;
10213 else if (type_quals & TYPE_QUAL_CONST)
10215 error ("const %qs cannot be declared %<mutable%>", name);
10216 storage_class = sc_none;
10218 else if (TREE_CODE (type) == REFERENCE_TYPE)
10220 permerror (input_location, "reference %qs cannot be declared "
10221 "%<mutable%>", name);
10222 storage_class = sc_none;
10226 /* If this is declaring a typedef name, return a TYPE_DECL. */
10227 if (typedef_p && decl_context != TYPENAME)
10229 tree decl;
10231 /* Note that the grammar rejects storage classes
10232 in typenames, fields or parameters. */
10233 if (current_lang_name == lang_name_java)
10234 TYPE_FOR_JAVA (type) = 1;
10236 /* This declaration:
10238 typedef void f(int) const;
10240 declares a function type which is not a member of any
10241 particular class, but which is cv-qualified; for
10242 example "f S::*" declares a pointer to a const-qualified
10243 member function of S. We record the cv-qualification in the
10244 function type. */
10245 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
10247 type = apply_memfn_quals (type, memfn_quals, rqual);
10249 /* We have now dealt with these qualifiers. */
10250 memfn_quals = TYPE_UNQUALIFIED;
10251 rqual = REF_QUAL_NONE;
10254 if (type_uses_auto (type))
10256 error ("typedef declared %<auto%>");
10257 type = error_mark_node;
10260 if (cxx_dialect >= cxx14 && array_of_runtime_bound_p (type)
10261 && (flag_iso || warn_vla > 0))
10262 pedwarn (input_location, OPT_Wvla,
10263 "typedef naming array of runtime bound");
10265 if (decl_context == FIELD)
10266 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10267 else
10268 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10269 if (id_declarator && declarator->u.id.qualifying_scope) {
10270 error_at (DECL_SOURCE_LOCATION (decl),
10271 "typedef name may not be a nested-name-specifier");
10272 TREE_TYPE (decl) = error_mark_node;
10275 if (decl_context != FIELD)
10277 if (!current_function_decl)
10278 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10279 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10280 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10281 (current_function_decl)))
10282 /* The TYPE_DECL is "abstract" because there will be
10283 clones of this constructor/destructor, and there will
10284 be copies of this TYPE_DECL generated in those
10285 clones. The decloning optimization (for space) may
10286 revert this subsequently if it determines that
10287 the clones should share a common implementation. */
10288 DECL_ABSTRACT_P (decl) = true;
10290 else if (current_class_type
10291 && constructor_name_p (unqualified_id, current_class_type))
10292 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10293 "as enclosing class",
10294 unqualified_id);
10296 /* If the user declares "typedef struct {...} foo" then the
10297 struct will have an anonymous name. Fill that name in now.
10298 Nothing can refer to it, so nothing needs know about the name
10299 change. */
10300 if (type != error_mark_node
10301 && unqualified_id
10302 && TYPE_NAME (type)
10303 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10304 && TYPE_ANONYMOUS_P (type)
10305 && declspecs->type_definition_p
10306 && attributes_naming_typedef_ok (*attrlist)
10307 && cp_type_quals (type) == TYPE_UNQUALIFIED)
10309 tree t;
10311 /* Replace the anonymous name with the real name everywhere. */
10312 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10314 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
10315 /* We do not rename the debug info representing the
10316 anonymous tagged type because the standard says in
10317 [dcl.typedef] that the naming applies only for
10318 linkage purposes. */
10319 /*debug_hooks->set_name (t, decl);*/
10320 TYPE_NAME (t) = decl;
10323 if (TYPE_LANG_SPECIFIC (type))
10324 TYPE_WAS_ANONYMOUS (type) = 1;
10326 /* If this is a typedef within a template class, the nested
10327 type is a (non-primary) template. The name for the
10328 template needs updating as well. */
10329 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10330 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10331 = TYPE_IDENTIFIER (type);
10333 /* Adjust linkage now that we aren't anonymous anymore. */
10334 reset_type_linkage (type);
10336 /* FIXME remangle member functions; member functions of a
10337 type with external linkage have external linkage. */
10340 if (signed_p
10341 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10342 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10344 bad_specifiers (decl, BSP_TYPE, virtualp,
10345 memfn_quals != TYPE_UNQUALIFIED,
10346 inlinep, friendp, raises != NULL_TREE);
10348 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10349 /* Acknowledge that this was written:
10350 `using analias = atype;'. */
10351 TYPE_DECL_ALIAS_P (decl) = 1;
10353 return decl;
10356 /* Detect the case of an array type of unspecified size
10357 which came, as such, direct from a typedef name.
10358 We must copy the type, so that the array's domain can be
10359 individually set by the object's initializer. */
10361 if (type && typedef_type
10362 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10363 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10364 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10366 /* Detect where we're using a typedef of function type to declare a
10367 function. PARMS will not be set, so we must create it now. */
10369 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10371 tree decls = NULL_TREE;
10372 tree args;
10374 for (args = TYPE_ARG_TYPES (type);
10375 args && args != void_list_node;
10376 args = TREE_CHAIN (args))
10378 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10380 DECL_CHAIN (decl) = decls;
10381 decls = decl;
10384 parms = nreverse (decls);
10386 if (decl_context != TYPENAME)
10388 /* The qualifiers on the function type become the qualifiers on
10389 the non-static member function. */
10390 memfn_quals |= type_memfn_quals (type);
10391 rqual = type_memfn_rqual (type);
10392 type_quals = TYPE_UNQUALIFIED;
10396 /* If this is a type name (such as, in a cast or sizeof),
10397 compute the type and return it now. */
10399 if (decl_context == TYPENAME)
10401 /* Note that the grammar rejects storage classes
10402 in typenames, fields or parameters. */
10403 if (type_quals != TYPE_UNQUALIFIED)
10404 type_quals = TYPE_UNQUALIFIED;
10406 /* Special case: "friend class foo" looks like a TYPENAME context. */
10407 if (friendp)
10409 if (type_quals != TYPE_UNQUALIFIED)
10411 error ("type qualifiers specified for friend class declaration");
10412 type_quals = TYPE_UNQUALIFIED;
10414 if (inlinep)
10416 error ("%<inline%> specified for friend class declaration");
10417 inlinep = 0;
10420 if (!current_aggr)
10422 /* Don't allow friend declaration without a class-key. */
10423 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10424 permerror (input_location, "template parameters cannot be friends");
10425 else if (TREE_CODE (type) == TYPENAME_TYPE)
10426 permerror (input_location, "friend declaration requires class-key, "
10427 "i.e. %<friend class %T::%D%>",
10428 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10429 else
10430 permerror (input_location, "friend declaration requires class-key, "
10431 "i.e. %<friend %#T%>",
10432 type);
10435 /* Only try to do this stuff if we didn't already give up. */
10436 if (type != integer_type_node)
10438 /* A friendly class? */
10439 if (current_class_type)
10440 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10441 /*complain=*/true);
10442 else
10443 error ("trying to make class %qT a friend of global scope",
10444 type);
10446 type = void_type_node;
10449 else if (memfn_quals || rqual)
10451 if (ctype == NULL_TREE
10452 && TREE_CODE (type) == METHOD_TYPE)
10453 ctype = TYPE_METHOD_BASETYPE (type);
10455 if (ctype)
10456 type = build_memfn_type (type, ctype, memfn_quals, rqual);
10457 /* Core issue #547: need to allow this in template type args.
10458 Allow it in general in C++11 for alias-declarations. */
10459 else if ((template_type_arg || cxx_dialect >= cxx11)
10460 && TREE_CODE (type) == FUNCTION_TYPE)
10461 type = apply_memfn_quals (type, memfn_quals, rqual);
10462 else
10463 error ("invalid qualifiers on non-member function type");
10466 return type;
10468 else if (unqualified_id == NULL_TREE && decl_context != PARM
10469 && decl_context != CATCHPARM
10470 && TREE_CODE (type) != UNION_TYPE
10471 && ! bitfield)
10473 error ("abstract declarator %qT used as declaration", type);
10474 return error_mark_node;
10477 /* Only functions may be declared using an operator-function-id. */
10478 if (unqualified_id
10479 && IDENTIFIER_OPNAME_P (unqualified_id)
10480 && TREE_CODE (type) != FUNCTION_TYPE
10481 && TREE_CODE (type) != METHOD_TYPE)
10483 error ("declaration of %qD as non-function", unqualified_id);
10484 return error_mark_node;
10487 /* We don't check parameter types here because we can emit a better
10488 error message later. */
10489 if (decl_context != PARM)
10491 type = check_var_type (unqualified_id, type);
10492 if (type == error_mark_node)
10493 return error_mark_node;
10496 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10497 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10499 if (decl_context == PARM || decl_context == CATCHPARM)
10501 if (ctype || in_namespace)
10502 error ("cannot use %<::%> in parameter declaration");
10504 if (type_uses_auto (type))
10506 if (cxx_dialect >= cxx14)
10507 error ("%<auto%> parameter not permitted in this context");
10508 else
10509 error ("parameter declared %<auto%>");
10510 type = error_mark_node;
10513 /* A parameter declared as an array of T is really a pointer to T.
10514 One declared as a function is really a pointer to a function.
10515 One declared as a member is really a pointer to member. */
10517 if (TREE_CODE (type) == ARRAY_TYPE)
10519 /* Transfer const-ness of array into that of type pointed to. */
10520 type = build_pointer_type (TREE_TYPE (type));
10521 type_quals = TYPE_UNQUALIFIED;
10522 array_parameter_p = true;
10524 else if (TREE_CODE (type) == FUNCTION_TYPE)
10525 type = build_pointer_type (type);
10528 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10529 && !NEW_DELETE_OPNAME_P (unqualified_id))
10531 cp_cv_quals real_quals = memfn_quals;
10532 if (cxx_dialect < cxx14 && constexpr_p
10533 && sfk != sfk_constructor && sfk != sfk_destructor)
10534 real_quals |= TYPE_QUAL_CONST;
10535 type = build_memfn_type (type, ctype, real_quals, rqual);
10539 tree decl;
10541 if (decl_context == PARM)
10543 decl = cp_build_parm_decl (unqualified_id, type);
10544 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
10546 bad_specifiers (decl, BSP_PARM, virtualp,
10547 memfn_quals != TYPE_UNQUALIFIED,
10548 inlinep, friendp, raises != NULL_TREE);
10550 else if (decl_context == FIELD)
10552 if (!staticp && TREE_CODE (type) != METHOD_TYPE
10553 && type_uses_auto (type))
10555 error ("non-static data member declared %<auto%>");
10556 type = error_mark_node;
10559 /* The C99 flexible array extension. */
10560 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10561 && TYPE_DOMAIN (type) == NULL_TREE)
10563 tree itype = compute_array_index_type (dname, integer_zero_node,
10564 tf_warning_or_error);
10565 type = build_cplus_array_type (TREE_TYPE (type), itype);
10568 if (type == error_mark_node)
10570 /* Happens when declaring arrays of sizes which
10571 are error_mark_node, for example. */
10572 decl = NULL_TREE;
10574 else if (in_namespace && !friendp)
10576 /* Something like struct S { int N::j; }; */
10577 error ("invalid use of %<::%>");
10578 return error_mark_node;
10580 else if (TREE_CODE (type) == FUNCTION_TYPE
10581 || TREE_CODE (type) == METHOD_TYPE)
10583 int publicp = 0;
10584 tree function_context;
10586 if (friendp == 0)
10588 /* This should never happen in pure C++ (the check
10589 could be an assert). It could happen in
10590 Objective-C++ if someone writes invalid code that
10591 uses a function declaration for an instance
10592 variable or property (instance variables and
10593 properties are parsed as FIELD_DECLs, but they are
10594 part of an Objective-C class, not a C++ class).
10595 That code is invalid and is caught by this
10596 check. */
10597 if (!ctype)
10599 error ("declaration of function %qD in invalid context",
10600 unqualified_id);
10601 return error_mark_node;
10604 /* ``A union may [ ... ] not [ have ] virtual functions.''
10605 ARM 9.5 */
10606 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10608 error ("function %qD declared virtual inside a union",
10609 unqualified_id);
10610 return error_mark_node;
10613 if (NEW_DELETE_OPNAME_P (unqualified_id))
10615 if (virtualp)
10617 error ("%qD cannot be declared virtual, since it "
10618 "is always static",
10619 unqualified_id);
10620 virtualp = 0;
10625 /* Check that the name used for a destructor makes sense. */
10626 if (sfk == sfk_destructor)
10628 tree uqname = id_declarator->u.id.unqualified_name;
10630 if (!ctype)
10632 gcc_assert (friendp);
10633 error ("expected qualified name in friend declaration "
10634 "for destructor %qD", uqname);
10635 return error_mark_node;
10638 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10640 error ("declaration of %qD as member of %qT",
10641 uqname, ctype);
10642 return error_mark_node;
10644 if (constexpr_p)
10646 error ("a destructor cannot be %<constexpr%>");
10647 return error_mark_node;
10650 else if (sfk == sfk_constructor && friendp && !ctype)
10652 error ("expected qualified name in friend declaration "
10653 "for constructor %qD",
10654 id_declarator->u.id.unqualified_name);
10655 return error_mark_node;
10658 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10659 function_context = (ctype != NULL_TREE) ?
10660 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10661 publicp = (! friendp || ! staticp)
10662 && function_context == NULL_TREE;
10664 if (late_return_type_p)
10665 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10667 decl = grokfndecl (ctype, type,
10668 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10669 ? unqualified_id : dname,
10670 parms,
10671 unqualified_id,
10672 virtualp, flags, memfn_quals, rqual, raises,
10673 friendp ? -1 : 0, friendp, publicp,
10674 inlinep | (2 * constexpr_p),
10675 sfk,
10676 funcdef_flag, template_count, in_namespace,
10677 attrlist, declarator->id_loc);
10678 decl = set_virt_specifiers (decl, virt_specifiers);
10679 if (decl == NULL_TREE)
10680 return error_mark_node;
10681 #if 0
10682 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10683 /* The decl and setting of decl_attr is also turned off. */
10684 decl = build_decl_attribute_variant (decl, decl_attr);
10685 #endif
10687 /* [class.conv.ctor]
10689 A constructor declared without the function-specifier
10690 explicit that can be called with a single parameter
10691 specifies a conversion from the type of its first
10692 parameter to the type of its class. Such a constructor
10693 is called a converting constructor. */
10694 if (explicitp == 2)
10695 DECL_NONCONVERTING_P (decl) = 1;
10697 else if (!staticp && !dependent_type_p (type)
10698 && !COMPLETE_TYPE_P (complete_type (type))
10699 && (TREE_CODE (type) != ARRAY_TYPE
10700 || !COMPLETE_TYPE_P (TREE_TYPE (type))
10701 || initialized == 0))
10703 if (unqualified_id)
10705 error ("field %qD has incomplete type %qT",
10706 unqualified_id, type);
10707 cxx_incomplete_type_inform (strip_array_types (type));
10709 else
10710 error ("name %qT has incomplete type", type);
10712 type = error_mark_node;
10713 decl = NULL_TREE;
10715 else
10717 if (friendp)
10719 error ("%qE is neither function nor member function; "
10720 "cannot be declared friend", unqualified_id);
10721 friendp = 0;
10723 decl = NULL_TREE;
10726 if (friendp)
10728 /* Friends are treated specially. */
10729 if (ctype == current_class_type)
10730 ; /* We already issued a permerror. */
10731 else if (decl && DECL_NAME (decl))
10733 if (template_class_depth (current_class_type) == 0)
10735 decl = check_explicit_specialization
10736 (unqualified_id, decl, template_count,
10737 2 * funcdef_flag + 4);
10738 if (decl == error_mark_node)
10739 return error_mark_node;
10742 decl = do_friend (ctype, unqualified_id, decl,
10743 *attrlist, flags,
10744 funcdef_flag);
10745 return decl;
10747 else
10748 return error_mark_node;
10751 /* Structure field. It may not be a function, except for C++. */
10753 if (decl == NULL_TREE)
10755 if (staticp)
10757 /* C++ allows static class members. All other work
10758 for this is done by grokfield. */
10759 decl = build_lang_decl_loc (declarator
10760 ? declarator->id_loc
10761 : input_location,
10762 VAR_DECL, unqualified_id, type);
10763 set_linkage_for_static_data_member (decl);
10764 /* Even if there is an in-class initialization, DECL
10765 is considered undefined until an out-of-class
10766 definition is provided. */
10767 DECL_EXTERNAL (decl) = 1;
10769 if (thread_p)
10771 set_decl_tls_model (decl, decl_default_tls_model (decl));
10772 if (declspecs->gnu_thread_keyword_p)
10773 DECL_GNU_TLS_P (decl) = true;
10776 if (constexpr_p && !initialized)
10778 error ("constexpr static data member %qD must have an "
10779 "initializer", decl);
10780 constexpr_p = false;
10783 else
10785 if (constexpr_p)
10787 error ("non-static data member %qE declared %<constexpr%>",
10788 unqualified_id);
10789 constexpr_p = false;
10791 decl = build_decl (input_location,
10792 FIELD_DECL, unqualified_id, type);
10793 DECL_NONADDRESSABLE_P (decl) = bitfield;
10794 if (bitfield && !unqualified_id)
10795 TREE_NO_WARNING (decl) = 1;
10797 if (storage_class == sc_mutable)
10799 DECL_MUTABLE_P (decl) = 1;
10800 storage_class = sc_none;
10803 if (initialized)
10805 /* An attempt is being made to initialize a non-static
10806 member. This is new in C++11. */
10807 maybe_warn_cpp0x (CPP0X_NSDMI);
10809 /* If this has been parsed with static storage class, but
10810 errors forced staticp to be cleared, ensure NSDMI is
10811 not present. */
10812 if (declspecs->storage_class == sc_static)
10813 DECL_INITIAL (decl) = error_mark_node;
10817 bad_specifiers (decl, BSP_FIELD, virtualp,
10818 memfn_quals != TYPE_UNQUALIFIED,
10819 inlinep, friendp, raises != NULL_TREE);
10822 else if (TREE_CODE (type) == FUNCTION_TYPE
10823 || TREE_CODE (type) == METHOD_TYPE)
10825 tree original_name;
10826 int publicp = 0;
10828 if (!unqualified_id)
10829 return error_mark_node;
10831 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10832 original_name = dname;
10833 else
10834 original_name = unqualified_id;
10836 if (storage_class == sc_auto)
10837 error ("storage class %<auto%> invalid for function %qs", name);
10838 else if (storage_class == sc_register)
10839 error ("storage class %<register%> invalid for function %qs", name);
10840 else if (thread_p)
10842 if (declspecs->gnu_thread_keyword_p)
10843 error ("storage class %<__thread%> invalid for function %qs",
10844 name);
10845 else
10846 error ("storage class %<thread_local%> invalid for function %qs",
10847 name);
10850 if (virt_specifiers)
10851 error ("virt-specifiers in %qs not allowed outside a class definition", name);
10852 /* Function declaration not at top level.
10853 Storage classes other than `extern' are not allowed
10854 and `extern' makes no difference. */
10855 if (! toplevel_bindings_p ()
10856 && (storage_class == sc_static
10857 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
10858 && pedantic)
10860 if (storage_class == sc_static)
10861 pedwarn (input_location, OPT_Wpedantic,
10862 "%<static%> specified invalid for function %qs "
10863 "declared out of global scope", name);
10864 else
10865 pedwarn (input_location, OPT_Wpedantic,
10866 "%<inline%> specifier invalid for function %qs "
10867 "declared out of global scope", name);
10870 if (ctype == NULL_TREE)
10872 if (virtualp)
10874 error ("virtual non-class function %qs", name);
10875 virtualp = 0;
10877 else if (sfk == sfk_constructor
10878 || sfk == sfk_destructor)
10880 error (funcdef_flag
10881 ? G_("%qs defined in a non-class scope")
10882 : G_("%qs declared in a non-class scope"), name);
10883 sfk = sfk_none;
10887 /* Record whether the function is public. */
10888 publicp = (ctype != NULL_TREE
10889 || storage_class != sc_static);
10891 if (late_return_type_p)
10892 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10894 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10895 virtualp, flags, memfn_quals, rqual, raises,
10896 1, friendp,
10897 publicp, inlinep | (2 * constexpr_p), sfk,
10898 funcdef_flag,
10899 template_count, in_namespace, attrlist,
10900 declarator->id_loc);
10901 if (decl == NULL_TREE)
10902 return error_mark_node;
10904 if (staticp == 1)
10906 int invalid_static = 0;
10908 /* Don't allow a static member function in a class, and forbid
10909 declaring main to be static. */
10910 if (TREE_CODE (type) == METHOD_TYPE)
10912 permerror (input_location, "cannot declare member function %qD to have "
10913 "static linkage", decl);
10914 invalid_static = 1;
10916 else if (current_function_decl)
10918 /* FIXME need arm citation */
10919 error ("cannot declare static function inside another function");
10920 invalid_static = 1;
10923 if (invalid_static)
10925 staticp = 0;
10926 storage_class = sc_none;
10930 else
10932 /* It's a variable. */
10934 /* An uninitialized decl with `extern' is a reference. */
10935 decl = grokvardecl (type, dname, unqualified_id,
10936 declspecs,
10937 initialized,
10938 (type_quals & TYPE_QUAL_CONST) != 0,
10939 template_count,
10940 ctype ? ctype : in_namespace);
10941 if (decl == NULL_TREE)
10942 return error_mark_node;
10944 bad_specifiers (decl, BSP_VAR, virtualp,
10945 memfn_quals != TYPE_UNQUALIFIED,
10946 inlinep, friendp, raises != NULL_TREE);
10948 if (ctype)
10950 DECL_CONTEXT (decl) = ctype;
10951 if (staticp == 1)
10953 permerror (input_location, "%<static%> may not be used when defining "
10954 "(as opposed to declaring) a static data member");
10955 staticp = 0;
10956 storage_class = sc_none;
10958 if (storage_class == sc_register && TREE_STATIC (decl))
10960 error ("static member %qD declared %<register%>", decl);
10961 storage_class = sc_none;
10963 if (storage_class == sc_extern && pedantic)
10965 pedwarn (input_location, OPT_Wpedantic,
10966 "cannot explicitly declare member %q#D to have "
10967 "extern linkage", decl);
10968 storage_class = sc_none;
10971 else if (constexpr_p && DECL_EXTERNAL (decl))
10973 error ("declaration of constexpr variable %qD is not a definition",
10974 decl);
10975 constexpr_p = false;
10979 if (storage_class == sc_extern && initialized && !funcdef_flag)
10981 if (toplevel_bindings_p ())
10983 /* It's common practice (and completely valid) to have a const
10984 be initialized and declared extern. */
10985 if (!(type_quals & TYPE_QUAL_CONST))
10986 warning (0, "%qs initialized and declared %<extern%>", name);
10988 else
10990 error ("%qs has both %<extern%> and initializer", name);
10991 return error_mark_node;
10995 /* Record `register' declaration for warnings on &
10996 and in case doing stupid register allocation. */
10998 if (storage_class == sc_register)
10999 DECL_REGISTER (decl) = 1;
11000 else if (storage_class == sc_extern)
11001 DECL_THIS_EXTERN (decl) = 1;
11002 else if (storage_class == sc_static)
11003 DECL_THIS_STATIC (decl) = 1;
11005 /* Set constexpr flag on vars (functions got it in grokfndecl). */
11006 if (constexpr_p && VAR_P (decl))
11007 DECL_DECLARED_CONSTEXPR_P (decl) = true;
11009 /* Record constancy and volatility on the DECL itself . There's
11010 no need to do this when processing a template; we'll do this
11011 for the instantiated declaration based on the type of DECL. */
11012 if (!processing_template_decl)
11013 cp_apply_type_quals_to_decl (type_quals, decl);
11015 return decl;
11019 /* Subroutine of start_function. Ensure that each of the parameter
11020 types (as listed in PARMS) is complete, as is required for a
11021 function definition. */
11023 static void
11024 require_complete_types_for_parms (tree parms)
11026 for (; parms; parms = DECL_CHAIN (parms))
11028 if (dependent_type_p (TREE_TYPE (parms)))
11029 continue;
11030 if (!VOID_TYPE_P (TREE_TYPE (parms))
11031 && complete_type_or_else (TREE_TYPE (parms), parms))
11033 relayout_decl (parms);
11034 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
11036 else
11037 /* grokparms or complete_type_or_else will have already issued
11038 an error. */
11039 TREE_TYPE (parms) = error_mark_node;
11043 /* Returns nonzero if T is a local variable. */
11046 local_variable_p (const_tree t)
11048 if ((VAR_P (t)
11049 /* A VAR_DECL with a context that is a _TYPE is a static data
11050 member. */
11051 && !TYPE_P (CP_DECL_CONTEXT (t))
11052 /* Any other non-local variable must be at namespace scope. */
11053 && !DECL_NAMESPACE_SCOPE_P (t))
11054 || (TREE_CODE (t) == PARM_DECL))
11055 return 1;
11057 return 0;
11060 /* Like local_variable_p, but suitable for use as a tree-walking
11061 function. */
11063 static tree
11064 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
11065 void * /*data*/)
11067 if (local_variable_p (*tp)
11068 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
11069 return *tp;
11070 else if (TYPE_P (*tp))
11071 *walk_subtrees = 0;
11073 return NULL_TREE;
11076 /* Check that ARG, which is a default-argument expression for a
11077 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
11078 something goes wrong. DECL may also be a _TYPE node, rather than a
11079 DECL, if there is no DECL available. */
11081 tree
11082 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
11084 tree var;
11085 tree decl_type;
11087 if (TREE_CODE (arg) == DEFAULT_ARG)
11088 /* We get a DEFAULT_ARG when looking at an in-class declaration
11089 with a default argument. Ignore the argument for now; we'll
11090 deal with it after the class is complete. */
11091 return arg;
11093 if (TYPE_P (decl))
11095 decl_type = decl;
11096 decl = NULL_TREE;
11098 else
11099 decl_type = TREE_TYPE (decl);
11101 if (arg == error_mark_node
11102 || decl == error_mark_node
11103 || TREE_TYPE (arg) == error_mark_node
11104 || decl_type == error_mark_node)
11105 /* Something already went wrong. There's no need to check
11106 further. */
11107 return error_mark_node;
11109 /* [dcl.fct.default]
11111 A default argument expression is implicitly converted to the
11112 parameter type. */
11113 ++cp_unevaluated_operand;
11114 perform_implicit_conversion_flags (decl_type, arg, complain,
11115 LOOKUP_IMPLICIT);
11116 --cp_unevaluated_operand;
11118 if (warn_zero_as_null_pointer_constant
11119 && TYPE_PTR_OR_PTRMEM_P (decl_type)
11120 && null_ptr_cst_p (arg)
11121 && (complain & tf_warning)
11122 && maybe_warn_zero_as_null_pointer_constant (arg, input_location))
11123 return nullptr_node;
11125 /* [dcl.fct.default]
11127 Local variables shall not be used in default argument
11128 expressions.
11130 The keyword `this' shall not be used in a default argument of a
11131 member function. */
11132 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
11133 if (var)
11135 if (complain & tf_warning_or_error)
11137 if (DECL_NAME (var) == this_identifier)
11138 permerror (input_location, "default argument %qE uses %qD",
11139 arg, var);
11140 else
11141 error ("default argument %qE uses local variable %qD", arg, var);
11143 return error_mark_node;
11146 /* All is well. */
11147 return arg;
11150 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
11152 static tree
11153 type_is_deprecated (tree type)
11155 enum tree_code code;
11156 if (TREE_DEPRECATED (type))
11157 return type;
11158 if (TYPE_NAME (type)
11159 && TREE_DEPRECATED (TYPE_NAME (type)))
11160 return type;
11162 /* Do warn about using typedefs to a deprecated class. */
11163 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
11164 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
11166 code = TREE_CODE (type);
11168 if (code == POINTER_TYPE || code == REFERENCE_TYPE
11169 || code == OFFSET_TYPE || code == FUNCTION_TYPE
11170 || code == METHOD_TYPE || code == ARRAY_TYPE)
11171 return type_is_deprecated (TREE_TYPE (type));
11173 if (TYPE_PTRMEMFUNC_P (type))
11174 return type_is_deprecated
11175 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
11177 return NULL_TREE;
11180 /* Decode the list of parameter types for a function type.
11181 Given the list of things declared inside the parens,
11182 return a list of types.
11184 If this parameter does not end with an ellipsis, we append
11185 void_list_node.
11187 *PARMS is set to the chain of PARM_DECLs created. */
11189 static tree
11190 grokparms (tree parmlist, tree *parms)
11192 tree result = NULL_TREE;
11193 tree decls = NULL_TREE;
11194 tree parm;
11195 int any_error = 0;
11197 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
11199 tree type = NULL_TREE;
11200 tree init = TREE_PURPOSE (parm);
11201 tree decl = TREE_VALUE (parm);
11202 const char *errmsg;
11204 if (parm == void_list_node)
11205 break;
11207 if (! decl || TREE_TYPE (decl) == error_mark_node)
11208 continue;
11210 type = TREE_TYPE (decl);
11211 if (VOID_TYPE_P (type))
11213 if (same_type_p (type, void_type_node)
11214 && !init
11215 && !DECL_NAME (decl) && !result
11216 && TREE_CHAIN (parm) == void_list_node)
11217 /* DR 577: A parameter list consisting of a single
11218 unnamed parameter of non-dependent type 'void'. */
11219 break;
11220 else if (cv_qualified_p (type))
11221 error_at (DECL_SOURCE_LOCATION (decl),
11222 "invalid use of cv-qualified type %qT in "
11223 "parameter declaration", type);
11224 else
11225 error_at (DECL_SOURCE_LOCATION (decl),
11226 "invalid use of type %<void%> in parameter "
11227 "declaration");
11228 /* It's not a good idea to actually create parameters of
11229 type `void'; other parts of the compiler assume that a
11230 void type terminates the parameter list. */
11231 type = error_mark_node;
11232 TREE_TYPE (decl) = error_mark_node;
11235 if (type != error_mark_node
11236 && TYPE_FOR_JAVA (type)
11237 && MAYBE_CLASS_TYPE_P (type))
11239 error ("parameter %qD has Java class type", decl);
11240 type = error_mark_node;
11241 TREE_TYPE (decl) = error_mark_node;
11242 init = NULL_TREE;
11245 if (type != error_mark_node
11246 && (errmsg = targetm.invalid_parameter_type (type)))
11248 error (errmsg);
11249 type = error_mark_node;
11250 TREE_TYPE (decl) = error_mark_node;
11253 if (type != error_mark_node)
11255 if (deprecated_state != DEPRECATED_SUPPRESS)
11257 tree deptype = type_is_deprecated (type);
11258 if (deptype)
11259 warn_deprecated_use (deptype, NULL_TREE);
11262 /* Top-level qualifiers on the parameters are
11263 ignored for function types. */
11264 type = cp_build_qualified_type (type, 0);
11265 if (TREE_CODE (type) == METHOD_TYPE)
11267 error ("parameter %qD invalidly declared method type", decl);
11268 type = build_pointer_type (type);
11269 TREE_TYPE (decl) = type;
11271 else if (abstract_virtuals_error (decl, type))
11272 any_error = 1; /* Seems like a good idea. */
11273 else if (POINTER_TYPE_P (type))
11275 /* [dcl.fct]/6, parameter types cannot contain pointers
11276 (references) to arrays of unknown bound. */
11277 tree t = TREE_TYPE (type);
11278 int ptr = TYPE_PTR_P (type);
11280 while (1)
11282 if (TYPE_PTR_P (t))
11283 ptr = 1;
11284 else if (TREE_CODE (t) != ARRAY_TYPE)
11285 break;
11286 else if (!TYPE_DOMAIN (t))
11287 break;
11288 t = TREE_TYPE (t);
11290 if (TREE_CODE (t) == ARRAY_TYPE)
11291 error (ptr
11292 ? G_("parameter %qD includes pointer to array of "
11293 "unknown bound %qT")
11294 : G_("parameter %qD includes reference to array of "
11295 "unknown bound %qT"),
11296 decl, t);
11299 if (any_error)
11300 init = NULL_TREE;
11301 else if (init && !processing_template_decl)
11302 init = check_default_argument (decl, init, tf_warning_or_error);
11305 DECL_CHAIN (decl) = decls;
11306 decls = decl;
11307 result = tree_cons (init, type, result);
11309 decls = nreverse (decls);
11310 result = nreverse (result);
11311 if (parm)
11312 result = chainon (result, void_list_node);
11313 *parms = decls;
11315 return result;
11319 /* D is a constructor or overloaded `operator='.
11321 Let T be the class in which D is declared. Then, this function
11322 returns:
11324 -1 if D's is an ill-formed constructor or copy assignment operator
11325 whose first parameter is of type `T'.
11326 0 if D is not a copy constructor or copy assignment
11327 operator.
11328 1 if D is a copy constructor or copy assignment operator whose
11329 first parameter is a reference to non-const qualified T.
11330 2 if D is a copy constructor or copy assignment operator whose
11331 first parameter is a reference to const qualified T.
11333 This function can be used as a predicate. Positive values indicate
11334 a copy constructor and nonzero values indicate a copy assignment
11335 operator. */
11338 copy_fn_p (const_tree d)
11340 tree args;
11341 tree arg_type;
11342 int result = 1;
11344 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11346 if (TREE_CODE (d) == TEMPLATE_DECL
11347 || (DECL_TEMPLATE_INFO (d)
11348 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11349 /* Instantiations of template member functions are never copy
11350 functions. Note that member functions of templated classes are
11351 represented as template functions internally, and we must
11352 accept those as copy functions. */
11353 return 0;
11355 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11356 if (!args)
11357 return 0;
11359 arg_type = TREE_VALUE (args);
11360 if (arg_type == error_mark_node)
11361 return 0;
11363 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11365 /* Pass by value copy assignment operator. */
11366 result = -1;
11368 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11369 && !TYPE_REF_IS_RVALUE (arg_type)
11370 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11372 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11373 result = 2;
11375 else
11376 return 0;
11378 args = TREE_CHAIN (args);
11380 if (args && args != void_list_node && !TREE_PURPOSE (args))
11381 /* There are more non-optional args. */
11382 return 0;
11384 return result;
11387 /* D is a constructor or overloaded `operator='.
11389 Let T be the class in which D is declared. Then, this function
11390 returns true when D is a move constructor or move assignment
11391 operator, false otherwise. */
11393 bool
11394 move_fn_p (const_tree d)
11396 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11398 if (cxx_dialect == cxx98)
11399 /* There are no move constructors if we are in C++98 mode. */
11400 return false;
11402 if (TREE_CODE (d) == TEMPLATE_DECL
11403 || (DECL_TEMPLATE_INFO (d)
11404 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11405 /* Instantiations of template member functions are never move
11406 functions. Note that member functions of templated classes are
11407 represented as template functions internally, and we must
11408 accept those as move functions. */
11409 return 0;
11411 return move_signature_fn_p (d);
11414 /* D is a constructor or overloaded `operator='.
11416 Then, this function returns true when D has the same signature as a move
11417 constructor or move assignment operator (because either it is such a
11418 ctor/op= or it is a template specialization with the same signature),
11419 false otherwise. */
11421 bool
11422 move_signature_fn_p (const_tree d)
11424 tree args;
11425 tree arg_type;
11426 bool result = false;
11428 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11429 if (!args)
11430 return 0;
11432 arg_type = TREE_VALUE (args);
11433 if (arg_type == error_mark_node)
11434 return 0;
11436 if (TREE_CODE (arg_type) == REFERENCE_TYPE
11437 && TYPE_REF_IS_RVALUE (arg_type)
11438 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11439 DECL_CONTEXT (d)))
11440 result = true;
11442 args = TREE_CHAIN (args);
11444 if (args && args != void_list_node && !TREE_PURPOSE (args))
11445 /* There are more non-optional args. */
11446 return false;
11448 return result;
11451 /* Remember any special properties of member function DECL. */
11453 void
11454 grok_special_member_properties (tree decl)
11456 tree class_type;
11458 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11459 return;
11461 class_type = DECL_CONTEXT (decl);
11462 if (DECL_CONSTRUCTOR_P (decl))
11464 int ctor = copy_fn_p (decl);
11466 if (!DECL_ARTIFICIAL (decl))
11467 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11469 if (ctor > 0)
11471 /* [class.copy]
11473 A non-template constructor for class X is a copy
11474 constructor if its first parameter is of type X&, const
11475 X&, volatile X& or const volatile X&, and either there
11476 are no other parameters or else all other parameters have
11477 default arguments. */
11478 TYPE_HAS_COPY_CTOR (class_type) = 1;
11479 if (user_provided_p (decl))
11480 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
11481 if (ctor > 1)
11482 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
11484 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
11485 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
11486 else if (move_fn_p (decl) && user_provided_p (decl))
11487 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
11488 else if (is_list_ctor (decl))
11489 TYPE_HAS_LIST_CTOR (class_type) = 1;
11491 if (DECL_DECLARED_CONSTEXPR_P (decl)
11492 && !copy_fn_p (decl) && !move_fn_p (decl))
11493 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
11495 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
11497 /* [class.copy]
11499 A non-template assignment operator for class X is a copy
11500 assignment operator if its parameter is of type X, X&, const
11501 X&, volatile X& or const volatile X&. */
11503 int assop = copy_fn_p (decl);
11505 if (assop)
11507 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
11508 if (user_provided_p (decl))
11509 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
11510 if (assop != 1)
11511 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
11513 else if (move_fn_p (decl) && user_provided_p (decl))
11514 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
11516 /* Destructors are handled in check_methods. */
11519 /* Check a constructor DECL has the correct form. Complains
11520 if the class has a constructor of the form X(X). */
11523 grok_ctor_properties (const_tree ctype, const_tree decl)
11525 int ctor_parm = copy_fn_p (decl);
11527 if (ctor_parm < 0)
11529 /* [class.copy]
11531 A declaration of a constructor for a class X is ill-formed if
11532 its first parameter is of type (optionally cv-qualified) X
11533 and either there are no other parameters or else all other
11534 parameters have default arguments.
11536 We *don't* complain about member template instantiations that
11537 have this form, though; they can occur as we try to decide
11538 what constructor to use during overload resolution. Since
11539 overload resolution will never prefer such a constructor to
11540 the non-template copy constructor (which is either explicitly
11541 or implicitly defined), there's no need to worry about their
11542 existence. Theoretically, they should never even be
11543 instantiated, but that's hard to forestall. */
11544 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11545 ctype, ctype);
11546 return 0;
11549 return 1;
11552 /* An operator with this code is unary, but can also be binary. */
11554 static int
11555 ambi_op_p (enum tree_code code)
11557 return (code == INDIRECT_REF
11558 || code == ADDR_EXPR
11559 || code == UNARY_PLUS_EXPR
11560 || code == NEGATE_EXPR
11561 || code == PREINCREMENT_EXPR
11562 || code == PREDECREMENT_EXPR);
11565 /* An operator with this name can only be unary. */
11567 static int
11568 unary_op_p (enum tree_code code)
11570 return (code == TRUTH_NOT_EXPR
11571 || code == BIT_NOT_EXPR
11572 || code == COMPONENT_REF
11573 || code == TYPE_EXPR);
11576 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
11577 errors are issued for invalid declarations. */
11579 bool
11580 grok_op_properties (tree decl, bool complain)
11582 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11583 tree argtype;
11584 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11585 tree name = DECL_NAME (decl);
11586 enum tree_code operator_code;
11587 int arity;
11588 bool ellipsis_p;
11589 tree class_type;
11591 /* Count the number of arguments and check for ellipsis. */
11592 for (argtype = argtypes, arity = 0;
11593 argtype && argtype != void_list_node;
11594 argtype = TREE_CHAIN (argtype))
11595 ++arity;
11596 ellipsis_p = !argtype;
11598 class_type = DECL_CONTEXT (decl);
11599 if (class_type && !CLASS_TYPE_P (class_type))
11600 class_type = NULL_TREE;
11602 if (DECL_CONV_FN_P (decl))
11603 operator_code = TYPE_EXPR;
11604 else
11607 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
11608 if (ansi_opname (CODE) == name) \
11610 operator_code = (CODE); \
11611 break; \
11613 else if (ansi_assopname (CODE) == name) \
11615 operator_code = (CODE); \
11616 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
11617 break; \
11620 #include "operators.def"
11621 #undef DEF_OPERATOR
11623 gcc_unreachable ();
11625 while (0);
11626 gcc_assert (operator_code != MAX_TREE_CODES);
11627 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11629 if (class_type)
11630 switch (operator_code)
11632 case NEW_EXPR:
11633 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11634 break;
11636 case DELETE_EXPR:
11637 TYPE_GETS_DELETE (class_type) |= 1;
11638 break;
11640 case VEC_NEW_EXPR:
11641 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11642 break;
11644 case VEC_DELETE_EXPR:
11645 TYPE_GETS_DELETE (class_type) |= 2;
11646 break;
11648 default:
11649 break;
11652 /* [basic.std.dynamic.allocation]/1:
11654 A program is ill-formed if an allocation function is declared
11655 in a namespace scope other than global scope or declared static
11656 in global scope.
11658 The same also holds true for deallocation functions. */
11659 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11660 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11662 if (DECL_NAMESPACE_SCOPE_P (decl))
11664 if (CP_DECL_CONTEXT (decl) != global_namespace)
11666 error ("%qD may not be declared within a namespace", decl);
11667 return false;
11669 else if (!TREE_PUBLIC (decl))
11671 error ("%qD may not be declared as static", decl);
11672 return false;
11677 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11679 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11680 DECL_IS_OPERATOR_NEW (decl) = 1;
11682 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11683 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11684 else
11686 /* An operator function must either be a non-static member function
11687 or have at least one parameter of a class, a reference to a class,
11688 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11689 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11691 if (operator_code == TYPE_EXPR
11692 || operator_code == CALL_EXPR
11693 || operator_code == COMPONENT_REF
11694 || operator_code == ARRAY_REF
11695 || operator_code == NOP_EXPR)
11697 error ("%qD must be a nonstatic member function", decl);
11698 return false;
11700 else
11702 tree p;
11704 if (DECL_STATIC_FUNCTION_P (decl))
11706 error ("%qD must be either a non-static member "
11707 "function or a non-member function", decl);
11708 return false;
11711 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11713 tree arg = non_reference (TREE_VALUE (p));
11714 if (arg == error_mark_node)
11715 return false;
11717 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11718 because these checks are performed even on
11719 template functions. */
11720 if (MAYBE_CLASS_TYPE_P (arg)
11721 || TREE_CODE (arg) == ENUMERAL_TYPE)
11722 break;
11725 if (!p || p == void_list_node)
11727 if (complain)
11728 error ("%qD must have an argument of class or "
11729 "enumerated type", decl);
11730 return false;
11735 /* There are no restrictions on the arguments to an overloaded
11736 "operator ()". */
11737 if (operator_code == CALL_EXPR)
11738 return true;
11740 /* Warn about conversion operators that will never be used. */
11741 if (IDENTIFIER_TYPENAME_P (name)
11742 && ! DECL_TEMPLATE_INFO (decl)
11743 && warn_conversion
11744 /* Warn only declaring the function; there is no need to
11745 warn again about out-of-class definitions. */
11746 && class_type == current_class_type)
11748 tree t = TREE_TYPE (name);
11749 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11751 if (ref)
11752 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11754 if (VOID_TYPE_P (t))
11755 warning (OPT_Wconversion,
11757 ? G_("conversion to a reference to void "
11758 "will never use a type conversion operator")
11759 : G_("conversion to void "
11760 "will never use a type conversion operator"));
11761 else if (class_type)
11763 if (t == class_type)
11764 warning (OPT_Wconversion,
11766 ? G_("conversion to a reference to the same type "
11767 "will never use a type conversion operator")
11768 : G_("conversion to the same type "
11769 "will never use a type conversion operator"));
11770 /* Don't force t to be complete here. */
11771 else if (MAYBE_CLASS_TYPE_P (t)
11772 && COMPLETE_TYPE_P (t)
11773 && DERIVED_FROM_P (t, class_type))
11774 warning (OPT_Wconversion,
11776 ? G_("conversion to a reference to a base class "
11777 "will never use a type conversion operator")
11778 : G_("conversion to a base class "
11779 "will never use a type conversion operator"));
11784 if (operator_code == COND_EXPR)
11786 /* 13.4.0.3 */
11787 error ("ISO C++ prohibits overloading operator ?:");
11788 return false;
11790 else if (ellipsis_p)
11792 error ("%qD must not have variable number of arguments", decl);
11793 return false;
11795 else if (ambi_op_p (operator_code))
11797 if (arity == 1)
11798 /* We pick the one-argument operator codes by default, so
11799 we don't have to change anything. */
11801 else if (arity == 2)
11803 /* If we thought this was a unary operator, we now know
11804 it to be a binary operator. */
11805 switch (operator_code)
11807 case INDIRECT_REF:
11808 operator_code = MULT_EXPR;
11809 break;
11811 case ADDR_EXPR:
11812 operator_code = BIT_AND_EXPR;
11813 break;
11815 case UNARY_PLUS_EXPR:
11816 operator_code = PLUS_EXPR;
11817 break;
11819 case NEGATE_EXPR:
11820 operator_code = MINUS_EXPR;
11821 break;
11823 case PREINCREMENT_EXPR:
11824 operator_code = POSTINCREMENT_EXPR;
11825 break;
11827 case PREDECREMENT_EXPR:
11828 operator_code = POSTDECREMENT_EXPR;
11829 break;
11831 default:
11832 gcc_unreachable ();
11835 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11837 if ((operator_code == POSTINCREMENT_EXPR
11838 || operator_code == POSTDECREMENT_EXPR)
11839 && ! processing_template_decl
11840 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11842 if (methodp)
11843 error ("postfix %qD must take %<int%> as its argument",
11844 decl);
11845 else
11846 error ("postfix %qD must take %<int%> as its second "
11847 "argument", decl);
11848 return false;
11851 else
11853 if (methodp)
11854 error ("%qD must take either zero or one argument", decl);
11855 else
11856 error ("%qD must take either one or two arguments", decl);
11857 return false;
11860 /* More Effective C++ rule 6. */
11861 if (warn_ecpp
11862 && (operator_code == POSTINCREMENT_EXPR
11863 || operator_code == POSTDECREMENT_EXPR
11864 || operator_code == PREINCREMENT_EXPR
11865 || operator_code == PREDECREMENT_EXPR))
11867 tree arg = TREE_VALUE (argtypes);
11868 tree ret = TREE_TYPE (TREE_TYPE (decl));
11869 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11870 arg = TREE_TYPE (arg);
11871 arg = TYPE_MAIN_VARIANT (arg);
11872 if (operator_code == PREINCREMENT_EXPR
11873 || operator_code == PREDECREMENT_EXPR)
11875 if (TREE_CODE (ret) != REFERENCE_TYPE
11876 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11877 arg))
11878 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11879 build_reference_type (arg));
11881 else
11883 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11884 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11888 else if (unary_op_p (operator_code))
11890 if (arity != 1)
11892 if (methodp)
11893 error ("%qD must take %<void%>", decl);
11894 else
11895 error ("%qD must take exactly one argument", decl);
11896 return false;
11899 else /* if (binary_op_p (operator_code)) */
11901 if (arity != 2)
11903 if (methodp)
11904 error ("%qD must take exactly one argument", decl);
11905 else
11906 error ("%qD must take exactly two arguments", decl);
11907 return false;
11910 /* More Effective C++ rule 7. */
11911 if (warn_ecpp
11912 && (operator_code == TRUTH_ANDIF_EXPR
11913 || operator_code == TRUTH_ORIF_EXPR
11914 || operator_code == COMPOUND_EXPR))
11915 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11916 decl);
11919 /* Effective C++ rule 23. */
11920 if (warn_ecpp
11921 && arity == 2
11922 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11923 && (operator_code == PLUS_EXPR
11924 || operator_code == MINUS_EXPR
11925 || operator_code == TRUNC_DIV_EXPR
11926 || operator_code == MULT_EXPR
11927 || operator_code == TRUNC_MOD_EXPR)
11928 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11929 warning (OPT_Weffc__, "%qD should return by value", decl);
11931 /* [over.oper]/8 */
11932 for (; argtypes && argtypes != void_list_node;
11933 argtypes = TREE_CHAIN (argtypes))
11934 if (TREE_PURPOSE (argtypes))
11936 TREE_PURPOSE (argtypes) = NULL_TREE;
11937 if (operator_code == POSTINCREMENT_EXPR
11938 || operator_code == POSTDECREMENT_EXPR)
11940 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments",
11941 decl);
11943 else
11945 error ("%qD cannot have default arguments", decl);
11946 return false;
11950 return true;
11953 /* Return a string giving the keyword associate with CODE. */
11955 static const char *
11956 tag_name (enum tag_types code)
11958 switch (code)
11960 case record_type:
11961 return "struct";
11962 case class_type:
11963 return "class";
11964 case union_type:
11965 return "union";
11966 case enum_type:
11967 return "enum";
11968 case typename_type:
11969 return "typename";
11970 default:
11971 gcc_unreachable ();
11975 /* Name lookup in an elaborated-type-specifier (after the keyword
11976 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
11977 elaborated-type-specifier is invalid, issue a diagnostic and return
11978 error_mark_node; otherwise, return the *_TYPE to which it referred.
11979 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
11981 tree
11982 check_elaborated_type_specifier (enum tag_types tag_code,
11983 tree decl,
11984 bool allow_template_p)
11986 tree type;
11988 /* In the case of:
11990 struct S { struct S *p; };
11992 name lookup will find the TYPE_DECL for the implicit "S::S"
11993 typedef. Adjust for that here. */
11994 if (DECL_SELF_REFERENCE_P (decl))
11995 decl = TYPE_NAME (TREE_TYPE (decl));
11997 type = TREE_TYPE (decl);
11999 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
12000 is false for this case as well. */
12001 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12003 error ("using template type parameter %qT after %qs",
12004 type, tag_name (tag_code));
12005 return error_mark_node;
12007 /* Accept template template parameters. */
12008 else if (allow_template_p
12009 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
12010 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
12012 /* [dcl.type.elab]
12014 If the identifier resolves to a typedef-name or the
12015 simple-template-id resolves to an alias template
12016 specialization, the elaborated-type-specifier is ill-formed.
12018 In other words, the only legitimate declaration to use in the
12019 elaborated type specifier is the implicit typedef created when
12020 the type is declared. */
12021 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
12022 && !DECL_SELF_REFERENCE_P (decl)
12023 && tag_code != typename_type)
12025 if (alias_template_specialization_p (type))
12026 error ("using alias template specialization %qT after %qs",
12027 type, tag_name (tag_code));
12028 else
12029 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
12030 inform (DECL_SOURCE_LOCATION (decl),
12031 "%qD has a previous declaration here", decl);
12032 return error_mark_node;
12034 else if (TREE_CODE (type) != RECORD_TYPE
12035 && TREE_CODE (type) != UNION_TYPE
12036 && tag_code != enum_type
12037 && tag_code != typename_type)
12039 error ("%qT referred to as %qs", type, tag_name (tag_code));
12040 inform (input_location, "%q+T has a previous declaration here", type);
12041 return error_mark_node;
12043 else if (TREE_CODE (type) != ENUMERAL_TYPE
12044 && tag_code == enum_type)
12046 error ("%qT referred to as enum", type);
12047 inform (input_location, "%q+T has a previous declaration here", type);
12048 return error_mark_node;
12050 else if (!allow_template_p
12051 && TREE_CODE (type) == RECORD_TYPE
12052 && CLASSTYPE_IS_TEMPLATE (type))
12054 /* If a class template appears as elaborated type specifier
12055 without a template header such as:
12057 template <class T> class C {};
12058 void f(class C); // No template header here
12060 then the required template argument is missing. */
12061 error ("template argument required for %<%s %T%>",
12062 tag_name (tag_code),
12063 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
12064 return error_mark_node;
12067 return type;
12070 /* Lookup NAME in elaborate type specifier in scope according to
12071 SCOPE and issue diagnostics if necessary.
12072 Return *_TYPE node upon success, NULL_TREE when the NAME is not
12073 found, and ERROR_MARK_NODE for type error. */
12075 static tree
12076 lookup_and_check_tag (enum tag_types tag_code, tree name,
12077 tag_scope scope, bool template_header_p)
12079 tree t;
12080 tree decl;
12081 if (scope == ts_global)
12083 /* First try ordinary name lookup, ignoring hidden class name
12084 injected via friend declaration. */
12085 decl = lookup_name_prefer_type (name, 2);
12086 /* If that fails, the name will be placed in the smallest
12087 non-class, non-function-prototype scope according to 3.3.1/5.
12088 We may already have a hidden name declared as friend in this
12089 scope. So lookup again but not ignoring hidden names.
12090 If we find one, that name will be made visible rather than
12091 creating a new tag. */
12092 if (!decl)
12093 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
12095 else
12096 decl = lookup_type_scope (name, scope);
12098 if (decl
12099 && (DECL_CLASS_TEMPLATE_P (decl)
12100 /* If scope is ts_current we're defining a class, so ignore a
12101 template template parameter. */
12102 || (scope != ts_current
12103 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
12104 decl = DECL_TEMPLATE_RESULT (decl);
12106 if (decl && TREE_CODE (decl) == TYPE_DECL)
12108 /* Look for invalid nested type:
12109 class C {
12110 class C {};
12111 }; */
12112 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
12114 error ("%qD has the same name as the class in which it is "
12115 "declared",
12116 decl);
12117 return error_mark_node;
12120 /* Two cases we need to consider when deciding if a class
12121 template is allowed as an elaborated type specifier:
12122 1. It is a self reference to its own class.
12123 2. It comes with a template header.
12125 For example:
12127 template <class T> class C {
12128 class C *c1; // DECL_SELF_REFERENCE_P is true
12129 class D;
12131 template <class U> class C; // template_header_p is true
12132 template <class T> class C<T>::D {
12133 class C *c2; // DECL_SELF_REFERENCE_P is true
12134 }; */
12136 t = check_elaborated_type_specifier (tag_code,
12137 decl,
12138 template_header_p
12139 | DECL_SELF_REFERENCE_P (decl));
12140 return t;
12142 else if (decl && TREE_CODE (decl) == TREE_LIST)
12144 error ("reference to %qD is ambiguous", name);
12145 print_candidates (decl);
12146 return error_mark_node;
12148 else
12149 return NULL_TREE;
12152 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
12153 Define the tag as a forward-reference if it is not defined.
12155 If a declaration is given, process it here, and report an error if
12156 multiple declarations are not identical.
12158 SCOPE is TS_CURRENT when this is also a definition. Only look in
12159 the current frame for the name (since C++ allows new names in any
12160 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
12161 declaration. Only look beginning from the current scope outward up
12162 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
12164 TEMPLATE_HEADER_P is true when this declaration is preceded by
12165 a set of template parameters. */
12167 static tree
12168 xref_tag_1 (enum tag_types tag_code, tree name,
12169 tag_scope orig_scope, bool template_header_p)
12171 enum tree_code code;
12172 tree t;
12173 tree context = NULL_TREE;
12174 tag_scope scope;
12176 gcc_assert (identifier_p (name));
12178 switch (tag_code)
12180 case record_type:
12181 case class_type:
12182 code = RECORD_TYPE;
12183 break;
12184 case union_type:
12185 code = UNION_TYPE;
12186 break;
12187 case enum_type:
12188 code = ENUMERAL_TYPE;
12189 break;
12190 default:
12191 gcc_unreachable ();
12194 if (orig_scope == ts_lambda)
12195 scope = ts_current;
12196 else
12197 scope = orig_scope;
12199 /* In case of anonymous name, xref_tag is only called to
12200 make type node and push name. Name lookup is not required. */
12201 if (ANON_AGGRNAME_P (name))
12202 t = NULL_TREE;
12203 else
12204 t = lookup_and_check_tag (tag_code, name,
12205 scope, template_header_p);
12207 if (t == error_mark_node)
12208 return error_mark_node;
12210 if (scope != ts_current && t && current_class_type
12211 && template_class_depth (current_class_type)
12212 && template_header_p)
12214 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
12215 return t;
12217 /* Since SCOPE is not TS_CURRENT, we are not looking at a
12218 definition of this tag. Since, in addition, we are currently
12219 processing a (member) template declaration of a template
12220 class, we must be very careful; consider:
12222 template <class X>
12223 struct S1
12225 template <class U>
12226 struct S2
12227 { template <class V>
12228 friend struct S1; };
12230 Here, the S2::S1 declaration should not be confused with the
12231 outer declaration. In particular, the inner version should
12232 have a template parameter of level 2, not level 1. This
12233 would be particularly important if the member declaration
12234 were instead:
12236 template <class V = U> friend struct S1;
12238 say, when we should tsubst into `U' when instantiating
12239 S2. On the other hand, when presented with:
12241 template <class T>
12242 struct S1 {
12243 template <class U>
12244 struct S2 {};
12245 template <class U>
12246 friend struct S2;
12249 we must find the inner binding eventually. We
12250 accomplish this by making sure that the new type we
12251 create to represent this declaration has the right
12252 TYPE_CONTEXT. */
12253 context = TYPE_CONTEXT (t);
12254 t = NULL_TREE;
12257 if (! t)
12259 /* If no such tag is yet defined, create a forward-reference node
12260 and record it as the "definition".
12261 When a real declaration of this type is found,
12262 the forward-reference will be altered into a real type. */
12263 if (code == ENUMERAL_TYPE)
12265 error ("use of enum %q#D without previous declaration", name);
12266 return error_mark_node;
12268 else
12270 t = make_class_type (code);
12271 TYPE_CONTEXT (t) = context;
12272 if (orig_scope == ts_lambda)
12273 /* Remember that we're declaring a lambda to avoid bogus errors
12274 in push_template_decl. */
12275 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
12276 t = pushtag (name, t, scope);
12279 else
12281 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
12283 if (!redeclare_class_template (t, current_template_parms))
12284 return error_mark_node;
12286 else if (!processing_template_decl
12287 && CLASS_TYPE_P (t)
12288 && CLASSTYPE_IS_TEMPLATE (t))
12290 error ("redeclaration of %qT as a non-template", t);
12291 error ("previous declaration %q+D", t);
12292 return error_mark_node;
12295 /* Make injected friend class visible. */
12296 if (scope != ts_within_enclosing_non_class
12297 && hidden_name_p (TYPE_NAME (t)))
12299 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12300 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12302 if (TYPE_TEMPLATE_INFO (t))
12304 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12305 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12310 return t;
12313 /* Wrapper for xref_tag_1. */
12315 tree
12316 xref_tag (enum tag_types tag_code, tree name,
12317 tag_scope scope, bool template_header_p)
12319 tree ret;
12320 bool subtime;
12321 subtime = timevar_cond_start (TV_NAME_LOOKUP);
12322 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12323 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12324 return ret;
12328 tree
12329 xref_tag_from_type (tree old, tree id, tag_scope scope)
12331 enum tag_types tag_kind;
12333 if (TREE_CODE (old) == RECORD_TYPE)
12334 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12335 else
12336 tag_kind = union_type;
12338 if (id == NULL_TREE)
12339 id = TYPE_IDENTIFIER (old);
12341 return xref_tag (tag_kind, id, scope, false);
12344 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12345 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
12346 access_* node, and the TREE_VALUE is the type of the base-class.
12347 Non-NULL TREE_TYPE indicates virtual inheritance.
12349 Returns true if the binfo hierarchy was successfully created,
12350 false if an error was detected. */
12352 bool
12353 xref_basetypes (tree ref, tree base_list)
12355 tree *basep;
12356 tree binfo, base_binfo;
12357 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
12358 unsigned max_bases = 0; /* Maximum direct bases. */
12359 int i;
12360 tree default_access;
12361 tree igo_prev; /* Track Inheritance Graph Order. */
12363 if (ref == error_mark_node)
12364 return false;
12366 /* The base of a derived class is private by default, all others are
12367 public. */
12368 default_access = (TREE_CODE (ref) == RECORD_TYPE
12369 && CLASSTYPE_DECLARED_CLASS (ref)
12370 ? access_private_node : access_public_node);
12372 /* First, make sure that any templates in base-classes are
12373 instantiated. This ensures that if we call ourselves recursively
12374 we do not get confused about which classes are marked and which
12375 are not. */
12376 basep = &base_list;
12377 while (*basep)
12379 tree basetype = TREE_VALUE (*basep);
12381 /* The dependent_type_p call below should really be dependent_scope_p
12382 so that we give a hard error about using an incomplete type as a
12383 base, but we allow it with a pedwarn for backward
12384 compatibility. */
12385 if (processing_template_decl
12386 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12387 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12388 if (!dependent_type_p (basetype)
12389 && !complete_type_or_else (basetype, NULL))
12390 /* An incomplete type. Remove it from the list. */
12391 *basep = TREE_CHAIN (*basep);
12392 else
12394 max_bases++;
12395 if (TREE_TYPE (*basep))
12396 max_vbases++;
12397 if (CLASS_TYPE_P (basetype))
12398 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
12399 basep = &TREE_CHAIN (*basep);
12403 TYPE_MARKED_P (ref) = 1;
12405 /* The binfo slot should be empty, unless this is an (ill-formed)
12406 redefinition. */
12407 if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12409 error ("redefinition of %q#T", ref);
12410 return false;
12413 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12415 binfo = make_tree_binfo (max_bases);
12417 TYPE_BINFO (ref) = binfo;
12418 BINFO_OFFSET (binfo) = size_zero_node;
12419 BINFO_TYPE (binfo) = ref;
12421 /* Apply base-class info set up to the variants of this type. */
12422 fixup_type_variants (ref);
12424 if (max_bases)
12426 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
12427 /* An aggregate cannot have baseclasses. */
12428 CLASSTYPE_NON_AGGREGATE (ref) = 1;
12430 if (TREE_CODE (ref) == UNION_TYPE)
12432 error ("derived union %qT invalid", ref);
12433 return false;
12437 if (max_bases > 1)
12439 if (TYPE_FOR_JAVA (ref))
12441 error ("Java class %qT cannot have multiple bases", ref);
12442 return false;
12446 if (max_vbases)
12448 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
12450 if (TYPE_FOR_JAVA (ref))
12452 error ("Java class %qT cannot have virtual bases", ref);
12453 return false;
12457 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
12459 tree access = TREE_PURPOSE (base_list);
12460 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
12461 tree basetype = TREE_VALUE (base_list);
12463 if (access == access_default_node)
12464 access = default_access;
12466 if (PACK_EXPANSION_P (basetype))
12467 basetype = PACK_EXPANSION_PATTERN (basetype);
12468 if (TREE_CODE (basetype) == TYPE_DECL)
12469 basetype = TREE_TYPE (basetype);
12470 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
12472 error ("base type %qT fails to be a struct or class type",
12473 basetype);
12474 return false;
12477 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
12478 TYPE_FOR_JAVA (ref) = 1;
12480 base_binfo = NULL_TREE;
12481 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
12483 base_binfo = TYPE_BINFO (basetype);
12484 /* The original basetype could have been a typedef'd type. */
12485 basetype = BINFO_TYPE (base_binfo);
12487 /* Inherit flags from the base. */
12488 TYPE_HAS_NEW_OPERATOR (ref)
12489 |= TYPE_HAS_NEW_OPERATOR (basetype);
12490 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12491 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12492 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12493 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
12494 CLASSTYPE_DIAMOND_SHAPED_P (ref)
12495 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
12496 CLASSTYPE_REPEATED_BASE_P (ref)
12497 |= CLASSTYPE_REPEATED_BASE_P (basetype);
12500 /* We must do this test after we've seen through a typedef
12501 type. */
12502 if (TYPE_MARKED_P (basetype))
12504 if (basetype == ref)
12505 error ("recursive type %qT undefined", basetype);
12506 else
12507 error ("duplicate base type %qT invalid", basetype);
12508 return false;
12511 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
12512 /* Regenerate the pack expansion for the bases. */
12513 basetype = make_pack_expansion (basetype);
12515 TYPE_MARKED_P (basetype) = 1;
12517 base_binfo = copy_binfo (base_binfo, basetype, ref,
12518 &igo_prev, via_virtual);
12519 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
12520 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
12522 BINFO_BASE_APPEND (binfo, base_binfo);
12523 BINFO_BASE_ACCESS_APPEND (binfo, access);
12526 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
12527 /* If we didn't get max_vbases vbases, we must have shared at
12528 least one of them, and are therefore diamond shaped. */
12529 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
12531 /* Unmark all the types. */
12532 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12533 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12534 TYPE_MARKED_P (ref) = 0;
12536 /* Now see if we have a repeated base type. */
12537 if (!CLASSTYPE_REPEATED_BASE_P (ref))
12539 for (base_binfo = binfo; base_binfo;
12540 base_binfo = TREE_CHAIN (base_binfo))
12542 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12544 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
12545 break;
12547 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
12549 for (base_binfo = binfo; base_binfo;
12550 base_binfo = TREE_CHAIN (base_binfo))
12551 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12552 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12553 else
12554 break;
12557 return true;
12561 /* Copies the enum-related properties from type SRC to type DST.
12562 Used with the underlying type of an enum and the enum itself. */
12563 static void
12564 copy_type_enum (tree dst, tree src)
12566 tree t;
12567 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12569 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12570 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12571 TYPE_SIZE (t) = TYPE_SIZE (src);
12572 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12573 SET_TYPE_MODE (dst, TYPE_MODE (src));
12574 TYPE_PRECISION (t) = TYPE_PRECISION (src);
12575 TYPE_ALIGN (t) = TYPE_ALIGN (src);
12576 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12577 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12581 /* Begin compiling the definition of an enumeration type.
12582 NAME is its name,
12584 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12586 UNDERLYING_TYPE is the type that will be used as the storage for
12587 the enumeration type. This should be NULL_TREE if no storage type
12588 was specified.
12590 SCOPED_ENUM_P is true if this is a scoped enumeration type.
12592 if IS_NEW is not NULL, gets TRUE iff a new type is created.
12594 Returns the type object, as yet incomplete.
12595 Also records info about it so that build_enumerator
12596 may be used to declare the individual values as they are read. */
12598 tree
12599 start_enum (tree name, tree enumtype, tree underlying_type,
12600 bool scoped_enum_p, bool *is_new)
12602 tree prevtype = NULL_TREE;
12603 gcc_assert (identifier_p (name));
12605 if (is_new)
12606 *is_new = false;
12607 /* [C++0x dcl.enum]p5:
12609 If not explicitly specified, the underlying type of a scoped
12610 enumeration type is int. */
12611 if (!underlying_type && scoped_enum_p)
12612 underlying_type = integer_type_node;
12614 if (underlying_type)
12615 underlying_type = cv_unqualified (underlying_type);
12617 /* If this is the real definition for a previous forward reference,
12618 fill in the contents in the same object that used to be the
12619 forward reference. */
12620 if (!enumtype)
12621 enumtype = lookup_and_check_tag (enum_type, name,
12622 /*tag_scope=*/ts_current,
12623 /*template_header_p=*/false);
12625 /* In case of a template_decl, the only check that should be deferred
12626 to instantiation time is the comparison of underlying types. */
12627 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12629 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12631 error_at (input_location, "scoped/unscoped mismatch "
12632 "in enum %q#T", enumtype);
12633 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12634 "previous definition here");
12635 enumtype = error_mark_node;
12637 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12639 error_at (input_location, "underlying type mismatch "
12640 "in enum %q#T", enumtype);
12641 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12642 "previous definition here");
12643 enumtype = error_mark_node;
12645 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12646 && !dependent_type_p (underlying_type)
12647 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12648 && !same_type_p (underlying_type,
12649 ENUM_UNDERLYING_TYPE (enumtype)))
12651 error_at (input_location, "different underlying type "
12652 "in enum %q#T", enumtype);
12653 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12654 "previous definition here");
12655 underlying_type = NULL_TREE;
12659 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12660 || processing_template_decl)
12662 /* In case of error, make a dummy enum to allow parsing to
12663 continue. */
12664 if (enumtype == error_mark_node)
12666 name = make_anon_name ();
12667 enumtype = NULL_TREE;
12670 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12671 of an opaque enum, or an opaque enum of an already defined
12672 enumeration (C++0x only).
12673 In any other case, it'll be NULL_TREE. */
12674 if (!enumtype)
12676 if (is_new)
12677 *is_new = true;
12679 prevtype = enumtype;
12681 /* Do not push the decl more than once, unless we need to
12682 compare underlying types at instantiation time */
12683 if (!enumtype
12684 || TREE_CODE (enumtype) != ENUMERAL_TYPE
12685 || (underlying_type
12686 && dependent_type_p (underlying_type))
12687 || (ENUM_UNDERLYING_TYPE (enumtype)
12688 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12690 enumtype = cxx_make_type (ENUMERAL_TYPE);
12691 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12693 else
12694 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12695 false);
12697 if (enumtype == error_mark_node)
12698 return error_mark_node;
12700 /* The enum is considered opaque until the opening '{' of the
12701 enumerator list. */
12702 SET_OPAQUE_ENUM_P (enumtype, true);
12703 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12706 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12708 if (underlying_type)
12710 if (CP_INTEGRAL_TYPE_P (underlying_type))
12712 copy_type_enum (enumtype, underlying_type);
12713 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12715 else if (dependent_type_p (underlying_type))
12716 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12717 else
12718 error ("underlying type %<%T%> of %<%T%> must be an integral type",
12719 underlying_type, enumtype);
12722 /* If into a template class, the returned enum is always the first
12723 declaration (opaque or not) seen. This way all the references to
12724 this type will be to the same declaration. The following ones are used
12725 only to check for definition errors. */
12726 if (prevtype && processing_template_decl)
12727 return prevtype;
12728 else
12729 return enumtype;
12732 /* After processing and defining all the values of an enumeration type,
12733 install their decls in the enumeration type.
12734 ENUMTYPE is the type object. */
12736 void
12737 finish_enum_value_list (tree enumtype)
12739 tree values;
12740 tree underlying_type;
12741 tree decl;
12742 tree value;
12743 tree minnode, maxnode;
12744 tree t;
12746 bool fixed_underlying_type_p
12747 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12749 /* We built up the VALUES in reverse order. */
12750 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12752 /* For an enum defined in a template, just set the type of the values;
12753 all further processing is postponed until the template is
12754 instantiated. We need to set the type so that tsubst of a CONST_DECL
12755 works. */
12756 if (processing_template_decl)
12758 for (values = TYPE_VALUES (enumtype);
12759 values;
12760 values = TREE_CHAIN (values))
12761 TREE_TYPE (TREE_VALUE (values)) = enumtype;
12762 return;
12765 /* Determine the minimum and maximum values of the enumerators. */
12766 if (TYPE_VALUES (enumtype))
12768 minnode = maxnode = NULL_TREE;
12770 for (values = TYPE_VALUES (enumtype);
12771 values;
12772 values = TREE_CHAIN (values))
12774 decl = TREE_VALUE (values);
12776 /* [dcl.enum]: Following the closing brace of an enum-specifier,
12777 each enumerator has the type of its enumeration. Prior to the
12778 closing brace, the type of each enumerator is the type of its
12779 initializing value. */
12780 TREE_TYPE (decl) = enumtype;
12782 /* Update the minimum and maximum values, if appropriate. */
12783 value = DECL_INITIAL (decl);
12784 if (value == error_mark_node)
12785 value = integer_zero_node;
12786 /* Figure out what the minimum and maximum values of the
12787 enumerators are. */
12788 if (!minnode)
12789 minnode = maxnode = value;
12790 else if (tree_int_cst_lt (maxnode, value))
12791 maxnode = value;
12792 else if (tree_int_cst_lt (value, minnode))
12793 minnode = value;
12796 else
12797 /* [dcl.enum]
12799 If the enumerator-list is empty, the underlying type is as if
12800 the enumeration had a single enumerator with value 0. */
12801 minnode = maxnode = integer_zero_node;
12803 if (!fixed_underlying_type_p)
12805 /* Compute the number of bits require to represent all values of the
12806 enumeration. We must do this before the type of MINNODE and
12807 MAXNODE are transformed, since tree_int_cst_min_precision relies
12808 on the TREE_TYPE of the value it is passed. */
12809 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
12810 int lowprec = tree_int_cst_min_precision (minnode, sgn);
12811 int highprec = tree_int_cst_min_precision (maxnode, sgn);
12812 int precision = MAX (lowprec, highprec);
12813 unsigned int itk;
12814 bool use_short_enum;
12816 /* Determine the underlying type of the enumeration.
12818 [dcl.enum]
12820 The underlying type of an enumeration is an integral type that
12821 can represent all the enumerator values defined in the
12822 enumeration. It is implementation-defined which integral type is
12823 used as the underlying type for an enumeration except that the
12824 underlying type shall not be larger than int unless the value of
12825 an enumerator cannot fit in an int or unsigned int.
12827 We use "int" or an "unsigned int" as the underlying type, even if
12828 a smaller integral type would work, unless the user has
12829 explicitly requested that we use the smallest possible type. The
12830 user can request that for all enumerations with a command line
12831 flag, or for just one enumeration with an attribute. */
12833 use_short_enum = flag_short_enums
12834 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12836 for (itk = (use_short_enum ? itk_char : itk_int);
12837 itk != itk_none;
12838 itk++)
12840 underlying_type = integer_types[itk];
12841 if (underlying_type != NULL_TREE
12842 && TYPE_PRECISION (underlying_type) >= precision
12843 && TYPE_SIGN (underlying_type) == sgn)
12844 break;
12846 if (itk == itk_none)
12848 /* DR 377
12850 IF no integral type can represent all the enumerator values, the
12851 enumeration is ill-formed. */
12852 error ("no integral type can represent all of the enumerator values "
12853 "for %qT", enumtype);
12854 precision = TYPE_PRECISION (long_long_integer_type_node);
12855 underlying_type = integer_types[itk_unsigned_long_long];
12858 /* [dcl.enum]
12860 The value of sizeof() applied to an enumeration type, an object
12861 of an enumeration type, or an enumerator, is the value of sizeof()
12862 applied to the underlying type. */
12863 copy_type_enum (enumtype, underlying_type);
12865 /* Compute the minimum and maximum values for the type.
12867 [dcl.enum]
12869 For an enumeration where emin is the smallest enumerator and emax
12870 is the largest, the values of the enumeration are the values of the
12871 underlying type in the range bmin to bmax, where bmin and bmax are,
12872 respectively, the smallest and largest values of the smallest bit-
12873 field that can store emin and emax. */
12875 /* The middle-end currently assumes that types with TYPE_PRECISION
12876 narrower than their underlying type are suitably zero or sign
12877 extended to fill their mode. Similarly, it assumes that the front
12878 end assures that a value of a particular type must be within
12879 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12881 We used to set these fields based on bmin and bmax, but that led
12882 to invalid assumptions like optimizing away bounds checking. So
12883 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12884 TYPE_MAX_VALUE to the values for the mode above and only restrict
12885 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
12886 ENUM_UNDERLYING_TYPE (enumtype)
12887 = build_distinct_type_copy (underlying_type);
12888 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12889 set_min_and_max_values_for_integral_type
12890 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
12892 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
12893 if (flag_strict_enums)
12894 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
12896 else
12897 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12899 /* Convert each of the enumerators to the type of the underlying
12900 type of the enumeration. */
12901 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12903 location_t saved_location;
12905 decl = TREE_VALUE (values);
12906 saved_location = input_location;
12907 input_location = DECL_SOURCE_LOCATION (decl);
12908 if (fixed_underlying_type_p)
12909 /* If the enumeration type has a fixed underlying type, we
12910 already checked all of the enumerator values. */
12911 value = DECL_INITIAL (decl);
12912 else
12913 value = perform_implicit_conversion (underlying_type,
12914 DECL_INITIAL (decl),
12915 tf_warning_or_error);
12916 input_location = saved_location;
12918 /* Do not clobber shared ints. */
12919 value = copy_node (value);
12921 TREE_TYPE (value) = enumtype;
12922 DECL_INITIAL (decl) = value;
12925 /* Fix up all variant types of this enum type. */
12926 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12927 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12929 if (at_class_scope_p ()
12930 && COMPLETE_TYPE_P (current_class_type)
12931 && UNSCOPED_ENUM_P (enumtype))
12932 insert_late_enum_def_into_classtype_sorted_fields (enumtype,
12933 current_class_type);
12935 /* Finish debugging output for this type. */
12936 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12939 /* Finishes the enum type. This is called only the first time an
12940 enumeration is seen, be it opaque or odinary.
12941 ENUMTYPE is the type object. */
12943 void
12944 finish_enum (tree enumtype)
12946 if (processing_template_decl)
12948 if (at_function_scope_p ())
12949 add_stmt (build_min (TAG_DEFN, enumtype));
12950 return;
12953 /* If this is a forward declaration, there should not be any variants,
12954 though we can get a variant in the middle of an enum-specifier with
12955 wacky code like 'enum E { e = sizeof(const E*) };' */
12956 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12957 && (TYPE_VALUES (enumtype)
12958 || !TYPE_NEXT_VARIANT (enumtype)));
12961 /* Build and install a CONST_DECL for an enumeration constant of the
12962 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12963 LOC is the location of NAME.
12964 Assignment of sequential values by default is handled here. */
12966 void
12967 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12969 tree decl;
12970 tree context;
12971 tree type;
12973 /* If the VALUE was erroneous, pretend it wasn't there; that will
12974 result in the enum being assigned the next value in sequence. */
12975 if (value == error_mark_node)
12976 value = NULL_TREE;
12978 /* Remove no-op casts from the value. */
12979 if (value)
12980 STRIP_TYPE_NOPS (value);
12982 if (! processing_template_decl)
12984 /* Validate and default VALUE. */
12985 if (value != NULL_TREE)
12987 if (!ENUM_UNDERLYING_TYPE (enumtype))
12989 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
12990 value, true);
12991 if (tmp_value)
12992 value = tmp_value;
12994 else if (! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12995 value = perform_implicit_conversion_flags
12996 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
12997 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
12999 if (value == error_mark_node)
13000 value = NULL_TREE;
13002 if (value != NULL_TREE)
13004 value = cxx_constant_value (value);
13006 if (TREE_CODE (value) != INTEGER_CST
13007 || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
13009 error ("enumerator value for %qD is not an integer constant",
13010 name);
13011 value = NULL_TREE;
13016 /* Default based on previous value. */
13017 if (value == NULL_TREE)
13019 if (TYPE_VALUES (enumtype))
13021 tree prev_value;
13022 bool overflowed;
13024 /* C++03 7.2/4: If no initializer is specified for the first
13025 enumerator, the type is an unspecified integral
13026 type. Otherwise the type is the same as the type of the
13027 initializing value of the preceding enumerator unless the
13028 incremented value is not representable in that type, in
13029 which case the type is an unspecified integral type
13030 sufficient to contain the incremented value. */
13031 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13032 if (error_operand_p (prev_value))
13033 value = error_mark_node;
13034 else
13036 tree type = TREE_TYPE (prev_value);
13037 signop sgn = TYPE_SIGN (type);
13038 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
13039 &overflowed);
13040 if (!overflowed)
13042 bool pos = !wi::neg_p (wi, sgn);
13043 if (!wi::fits_to_tree_p (wi, type))
13045 unsigned int itk;
13046 for (itk = itk_int; itk != itk_none; itk++)
13048 type = integer_types[itk];
13049 if (type != NULL_TREE
13050 && (pos || !TYPE_UNSIGNED (type))
13051 && wi::fits_to_tree_p (wi, type))
13052 break;
13054 if (type && cxx_dialect < cxx11
13055 && itk > itk_unsigned_long)
13056 pedwarn (input_location, OPT_Wlong_long, pos ? "\
13057 incremented enumerator value is too large for %<unsigned long%>" : "\
13058 incremented enumerator value is too large for %<long%>");
13060 if (type == NULL_TREE)
13061 overflowed = true;
13062 else
13063 value = wide_int_to_tree (type, wi);
13066 if (overflowed)
13068 error ("overflow in enumeration values at %qD", name);
13069 value = error_mark_node;
13073 else
13074 value = integer_zero_node;
13077 /* Remove no-op casts from the value. */
13078 STRIP_TYPE_NOPS (value);
13080 /* If the underlying type of the enum is fixed, check whether
13081 the enumerator values fits in the underlying type. If it
13082 does not fit, the program is ill-formed [C++0x dcl.enum]. */
13083 if (ENUM_UNDERLYING_TYPE (enumtype)
13084 && value
13085 && TREE_CODE (value) == INTEGER_CST)
13087 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
13088 error ("enumerator value %E is outside the range of underlying "
13089 "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
13091 /* Convert the value to the appropriate type. */
13092 value = convert (ENUM_UNDERLYING_TYPE (enumtype), value);
13096 /* C++ associates enums with global, function, or class declarations. */
13097 context = current_scope ();
13099 /* Build the actual enumeration constant. Note that the enumeration
13100 constants have the underlying type of the enum (if it is fixed)
13101 or the type of their initializer (if the underlying type of the
13102 enum is not fixed):
13104 [ C++0x dcl.enum ]
13106 If the underlying type is fixed, the type of each enumerator
13107 prior to the closing brace is the underlying type; if the
13108 initializing value of an enumerator cannot be represented by
13109 the underlying type, the program is ill-formed. If the
13110 underlying type is not fixed, the type of each enumerator is
13111 the type of its initializing value.
13113 If the underlying type is not fixed, it will be computed by
13114 finish_enum and we will reset the type of this enumerator. Of
13115 course, if we're processing a template, there may be no value. */
13116 type = value ? TREE_TYPE (value) : NULL_TREE;
13118 decl = build_decl (loc, CONST_DECL, name, type);
13120 DECL_CONTEXT (decl) = enumtype;
13121 TREE_CONSTANT (decl) = 1;
13122 TREE_READONLY (decl) = 1;
13123 DECL_INITIAL (decl) = value;
13125 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
13126 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13127 on the TYPE_FIELDS list for `S'. (That's so that you can say
13128 things like `S::i' later.) */
13129 finish_member_declaration (decl);
13130 else
13131 pushdecl (decl);
13133 /* Add this enumeration constant to the list for this type. */
13134 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13137 /* Look for an enumerator with the given NAME within the enumeration
13138 type ENUMTYPE. This routine is used primarily for qualified name
13139 lookup into an enumerator in C++0x, e.g.,
13141 enum class Color { Red, Green, Blue };
13143 Color color = Color::Red;
13145 Returns the value corresponding to the enumerator, or
13146 NULL_TREE if no such enumerator was found. */
13147 tree
13148 lookup_enumerator (tree enumtype, tree name)
13150 tree e;
13151 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
13153 e = purpose_member (name, TYPE_VALUES (enumtype));
13154 return e? TREE_VALUE (e) : NULL_TREE;
13158 /* We're defining DECL. Make sure that its type is OK. */
13160 static void
13161 check_function_type (tree decl, tree current_function_parms)
13163 tree fntype = TREE_TYPE (decl);
13164 tree return_type = complete_type (TREE_TYPE (fntype));
13166 /* In a function definition, arg types must be complete. */
13167 require_complete_types_for_parms (current_function_parms);
13169 if (dependent_type_p (return_type)
13170 || type_uses_auto (return_type))
13171 return;
13172 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
13173 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
13175 tree args = TYPE_ARG_TYPES (fntype);
13177 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13178 error ("return type %q#T is incomplete", return_type);
13179 else
13180 error ("return type has Java class type %q#T", return_type);
13182 /* Make it return void instead. */
13183 if (TREE_CODE (fntype) == METHOD_TYPE)
13184 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
13185 void_type_node,
13186 TREE_CHAIN (args));
13187 else
13188 fntype = build_function_type (void_type_node, args);
13189 fntype
13190 = build_exception_variant (fntype,
13191 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
13192 fntype = (cp_build_type_attribute_variant
13193 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
13194 TREE_TYPE (decl) = fntype;
13196 else
13197 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13200 /* Create the FUNCTION_DECL for a function definition.
13201 DECLSPECS and DECLARATOR are the parts of the declaration;
13202 they describe the function's name and the type it returns,
13203 but twisted together in a fashion that parallels the syntax of C.
13205 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13206 DECLARATOR is really the DECL for the function we are about to
13207 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13208 indicating that the function is an inline defined in-class.
13210 This function creates a binding context for the function body
13211 as well as setting up the FUNCTION_DECL in current_function_decl.
13213 For C++, we must first check whether that datum makes any sense.
13214 For example, "class A local_a(1,2);" means that variable local_a
13215 is an aggregate of type A, which should have a constructor
13216 applied to it with the argument list [1, 2].
13218 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
13219 or may be a BLOCK if the function has been defined previously
13220 in this translation unit. On exit, DECL_INITIAL (decl1) will be
13221 error_mark_node if the function has never been defined, or
13222 a BLOCK if the function has been defined somewhere. */
13224 bool
13225 start_preparsed_function (tree decl1, tree attrs, int flags)
13227 tree ctype = NULL_TREE;
13228 tree fntype;
13229 tree restype;
13230 int doing_friend = 0;
13231 cp_binding_level *bl;
13232 tree current_function_parms;
13233 struct c_fileinfo *finfo
13234 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
13235 bool honor_interface;
13237 /* Sanity check. */
13238 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
13239 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
13241 fntype = TREE_TYPE (decl1);
13242 if (TREE_CODE (fntype) == METHOD_TYPE)
13243 ctype = TYPE_METHOD_BASETYPE (fntype);
13245 /* ISO C++ 11.4/5. A friend function defined in a class is in
13246 the (lexical) scope of the class in which it is defined. */
13247 if (!ctype && DECL_FRIEND_P (decl1))
13249 ctype = DECL_FRIEND_CONTEXT (decl1);
13251 /* CTYPE could be null here if we're dealing with a template;
13252 for example, `inline friend float foo()' inside a template
13253 will have no CTYPE set. */
13254 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13255 ctype = NULL_TREE;
13256 else
13257 doing_friend = 1;
13260 if (DECL_DECLARED_INLINE_P (decl1)
13261 && lookup_attribute ("noinline", attrs))
13262 warning (0, "inline function %q+D given attribute noinline", decl1);
13264 /* Handle gnu_inline attribute. */
13265 if (GNU_INLINE_P (decl1))
13267 DECL_EXTERNAL (decl1) = 1;
13268 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13269 DECL_INTERFACE_KNOWN (decl1) = 1;
13270 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
13273 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13274 /* This is a constructor, we must ensure that any default args
13275 introduced by this definition are propagated to the clones
13276 now. The clones are used directly in overload resolution. */
13277 adjust_clone_args (decl1);
13279 /* Sometimes we don't notice that a function is a static member, and
13280 build a METHOD_TYPE for it. Fix that up now. */
13281 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13282 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
13284 /* Set up current_class_type, and enter the scope of the class, if
13285 appropriate. */
13286 if (ctype)
13287 push_nested_class (ctype);
13288 else if (DECL_STATIC_FUNCTION_P (decl1))
13289 push_nested_class (DECL_CONTEXT (decl1));
13291 /* Now that we have entered the scope of the class, we must restore
13292 the bindings for any template parameters surrounding DECL1, if it
13293 is an inline member template. (Order is important; consider the
13294 case where a template parameter has the same name as a field of
13295 the class.) It is not until after this point that
13296 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
13297 if (flags & SF_INCLASS_INLINE)
13298 maybe_begin_member_template_processing (decl1);
13300 /* Effective C++ rule 15. */
13301 if (warn_ecpp
13302 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13303 && VOID_TYPE_P (TREE_TYPE (fntype)))
13304 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13306 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13307 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13308 if (!DECL_INITIAL (decl1))
13309 DECL_INITIAL (decl1) = error_mark_node;
13311 /* This function exists in static storage.
13312 (This does not mean `static' in the C sense!) */
13313 TREE_STATIC (decl1) = 1;
13315 /* We must call push_template_decl after current_class_type is set
13316 up. (If we are processing inline definitions after exiting a
13317 class scope, current_class_type will be NULL_TREE until set above
13318 by push_nested_class.) */
13319 if (processing_template_decl)
13321 tree newdecl1 = push_template_decl (decl1);
13322 if (newdecl1 == error_mark_node)
13324 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
13325 pop_nested_class ();
13326 return false;
13328 decl1 = newdecl1;
13331 /* We are now in the scope of the function being defined. */
13332 current_function_decl = decl1;
13334 /* Save the parm names or decls from this function's declarator
13335 where store_parm_decls will find them. */
13336 current_function_parms = DECL_ARGUMENTS (decl1);
13338 /* Make sure the parameter and return types are reasonable. When
13339 you declare a function, these types can be incomplete, but they
13340 must be complete when you define the function. */
13341 check_function_type (decl1, current_function_parms);
13343 /* Build the return declaration for the function. */
13344 restype = TREE_TYPE (fntype);
13346 if (DECL_RESULT (decl1) == NULL_TREE)
13348 tree resdecl;
13350 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13351 DECL_ARTIFICIAL (resdecl) = 1;
13352 DECL_IGNORED_P (resdecl) = 1;
13353 DECL_RESULT (decl1) = resdecl;
13355 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13358 /* Let the user know we're compiling this function. */
13359 announce_function (decl1);
13361 /* Record the decl so that the function name is defined.
13362 If we already have a decl for this name, and it is a FUNCTION_DECL,
13363 use the old decl. */
13364 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13366 /* A specialization is not used to guide overload resolution. */
13367 if (!DECL_FUNCTION_MEMBER_P (decl1)
13368 && !(DECL_USE_TEMPLATE (decl1) &&
13369 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
13371 tree olddecl = pushdecl (decl1);
13373 if (olddecl == error_mark_node)
13374 /* If something went wrong when registering the declaration,
13375 use DECL1; we have to have a FUNCTION_DECL to use when
13376 parsing the body of the function. */
13378 else
13380 /* Otherwise, OLDDECL is either a previous declaration
13381 of the same function or DECL1 itself. */
13383 if (warn_missing_declarations
13384 && olddecl == decl1
13385 && !DECL_MAIN_P (decl1)
13386 && TREE_PUBLIC (decl1)
13387 && !DECL_DECLARED_INLINE_P (decl1))
13389 tree context;
13391 /* Check whether DECL1 is in an anonymous
13392 namespace. */
13393 for (context = DECL_CONTEXT (decl1);
13394 context;
13395 context = DECL_CONTEXT (context))
13397 if (TREE_CODE (context) == NAMESPACE_DECL
13398 && DECL_NAME (context) == NULL_TREE)
13399 break;
13402 if (context == NULL)
13403 warning (OPT_Wmissing_declarations,
13404 "no previous declaration for %q+D", decl1);
13407 decl1 = olddecl;
13410 else
13412 /* We need to set the DECL_CONTEXT. */
13413 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13414 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13416 fntype = TREE_TYPE (decl1);
13417 restype = TREE_TYPE (fntype);
13419 /* If #pragma weak applies, mark the decl appropriately now.
13420 The pragma only applies to global functions. Because
13421 determining whether or not the #pragma applies involves
13422 computing the mangled name for the declaration, we cannot
13423 apply the pragma until after we have merged this declaration
13424 with any previous declarations; if the original declaration
13425 has a linkage specification, that specification applies to
13426 the definition as well, and may affect the mangled name. */
13427 if (DECL_FILE_SCOPE_P (decl1))
13428 maybe_apply_pragma_weak (decl1);
13431 /* Reset this in case the call to pushdecl changed it. */
13432 current_function_decl = decl1;
13434 gcc_assert (DECL_INITIAL (decl1));
13436 /* This function may already have been parsed, in which case just
13437 return; our caller will skip over the body without parsing. */
13438 if (DECL_INITIAL (decl1) != error_mark_node)
13439 return true;
13441 /* Initialize RTL machinery. We cannot do this until
13442 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13443 even when processing a template; this is how we get
13444 CFUN set up, and our per-function variables initialized.
13445 FIXME factor out the non-RTL stuff. */
13446 bl = current_binding_level;
13447 allocate_struct_function (decl1, processing_template_decl);
13449 /* Initialize the language data structures. Whenever we start
13450 a new function, we destroy temporaries in the usual way. */
13451 cfun->language = ggc_cleared_alloc<language_function> ();
13452 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
13453 current_binding_level = bl;
13455 if (!processing_template_decl && type_uses_auto (restype))
13457 FNDECL_USED_AUTO (decl1) = true;
13458 current_function_auto_return_pattern = restype;
13461 /* Start the statement-tree, start the tree now. */
13462 DECL_SAVED_TREE (decl1) = push_stmt_list ();
13464 /* If we are (erroneously) defining a function that we have already
13465 defined before, wipe out what we knew before. */
13466 if (!DECL_PENDING_INLINE_P (decl1))
13467 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13469 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13471 /* We know that this was set up by `grokclassfn'. We do not
13472 wait until `store_parm_decls', since evil parse errors may
13473 never get us to that point. Here we keep the consistency
13474 between `current_class_type' and `current_class_ptr'. */
13475 tree t = DECL_ARGUMENTS (decl1);
13477 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
13478 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
13480 cp_function_chain->x_current_class_ref
13481 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
13482 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
13483 cp_function_chain->x_current_class_ptr = t;
13485 /* Constructors and destructors need to know whether they're "in
13486 charge" of initializing virtual base classes. */
13487 t = DECL_CHAIN (t);
13488 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13490 current_in_charge_parm = t;
13491 t = DECL_CHAIN (t);
13493 if (DECL_HAS_VTT_PARM_P (decl1))
13495 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
13496 current_vtt_parm = t;
13500 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
13501 /* Implicitly-defined methods (like the
13502 destructor for a class in which no destructor
13503 is explicitly declared) must not be defined
13504 until their definition is needed. So, we
13505 ignore interface specifications for
13506 compiler-generated functions. */
13507 && !DECL_ARTIFICIAL (decl1));
13509 if (processing_template_decl)
13510 /* Don't mess with interface flags. */;
13511 else if (DECL_INTERFACE_KNOWN (decl1))
13513 tree ctx = decl_function_context (decl1);
13515 if (DECL_NOT_REALLY_EXTERN (decl1))
13516 DECL_EXTERNAL (decl1) = 0;
13518 if (ctx != NULL_TREE && vague_linkage_p (ctx))
13519 /* This is a function in a local class in an extern inline
13520 or template function. */
13521 comdat_linkage (decl1);
13523 /* If this function belongs to an interface, it is public.
13524 If it belongs to someone else's interface, it is also external.
13525 This only affects inlines and template instantiations. */
13526 else if (!finfo->interface_unknown && honor_interface)
13528 if (DECL_DECLARED_INLINE_P (decl1)
13529 || DECL_TEMPLATE_INSTANTIATION (decl1))
13531 DECL_EXTERNAL (decl1)
13532 = (finfo->interface_only
13533 || (DECL_DECLARED_INLINE_P (decl1)
13534 && ! flag_implement_inlines
13535 && !DECL_VINDEX (decl1)));
13537 /* For WIN32 we also want to put these in linkonce sections. */
13538 maybe_make_one_only (decl1);
13540 else
13541 DECL_EXTERNAL (decl1) = 0;
13542 DECL_INTERFACE_KNOWN (decl1) = 1;
13543 /* If this function is in an interface implemented in this file,
13544 make sure that the back end knows to emit this function
13545 here. */
13546 if (!DECL_EXTERNAL (decl1))
13547 mark_needed (decl1);
13549 else if (finfo->interface_unknown && finfo->interface_only
13550 && honor_interface)
13552 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13553 interface, we will have both finfo->interface_unknown and
13554 finfo->interface_only set. In that case, we don't want to
13555 use the normal heuristics because someone will supply a
13556 #pragma implementation elsewhere, and deducing it here would
13557 produce a conflict. */
13558 comdat_linkage (decl1);
13559 DECL_EXTERNAL (decl1) = 0;
13560 DECL_INTERFACE_KNOWN (decl1) = 1;
13561 DECL_DEFER_OUTPUT (decl1) = 1;
13563 else
13565 /* This is a definition, not a reference.
13566 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
13567 if (!GNU_INLINE_P (decl1))
13568 DECL_EXTERNAL (decl1) = 0;
13570 if ((DECL_DECLARED_INLINE_P (decl1)
13571 || DECL_TEMPLATE_INSTANTIATION (decl1))
13572 && ! DECL_INTERFACE_KNOWN (decl1))
13573 DECL_DEFER_OUTPUT (decl1) = 1;
13574 else
13575 DECL_INTERFACE_KNOWN (decl1) = 1;
13578 /* Determine the ELF visibility attribute for the function. We must not
13579 do this before calling "pushdecl", as we must allow "duplicate_decls"
13580 to merge any attributes appropriately. We also need to wait until
13581 linkage is set. */
13582 if (!DECL_CLONED_FUNCTION_P (decl1))
13583 determine_visibility (decl1);
13585 if (!processing_template_decl)
13586 maybe_instantiate_noexcept (decl1);
13588 begin_scope (sk_function_parms, decl1);
13590 ++function_depth;
13592 if (DECL_DESTRUCTOR_P (decl1)
13593 || (DECL_CONSTRUCTOR_P (decl1)
13594 && targetm.cxx.cdtor_returns_this ()))
13596 cdtor_label = build_decl (input_location,
13597 LABEL_DECL, NULL_TREE, NULL_TREE);
13598 DECL_CONTEXT (cdtor_label) = current_function_decl;
13601 start_fname_decls ();
13603 store_parm_decls (current_function_parms);
13605 return true;
13609 /* Like start_preparsed_function, except that instead of a
13610 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13612 Returns true on success. If the DECLARATOR is not suitable
13613 for a function, we return false, which tells the parser to
13614 skip the entire function. */
13616 bool
13617 start_function (cp_decl_specifier_seq *declspecs,
13618 const cp_declarator *declarator,
13619 tree attrs)
13621 tree decl1;
13623 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13624 if (decl1 == error_mark_node)
13625 return false;
13626 /* If the declarator is not suitable for a function definition,
13627 cause a syntax error. */
13628 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13630 error ("invalid function declaration");
13631 return false;
13634 if (DECL_MAIN_P (decl1))
13635 /* main must return int. grokfndecl should have corrected it
13636 (and issued a diagnostic) if the user got it wrong. */
13637 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13638 integer_type_node));
13640 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13643 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13644 FN. */
13646 static bool
13647 use_eh_spec_block (tree fn)
13649 return (flag_exceptions && flag_enforce_eh_specs
13650 && !processing_template_decl
13651 && !type_throw_all_p (TREE_TYPE (fn))
13652 /* We insert the EH_SPEC_BLOCK only in the original
13653 function; then, it is copied automatically to the
13654 clones. */
13655 && !DECL_CLONED_FUNCTION_P (fn)
13656 /* Implicitly-generated constructors and destructors have
13657 exception specifications. However, those specifications
13658 are the union of the possible exceptions specified by the
13659 constructors/destructors for bases and members, so no
13660 unallowed exception will ever reach this function. By
13661 not creating the EH_SPEC_BLOCK we save a little memory,
13662 and we avoid spurious warnings about unreachable
13663 code. */
13664 && !DECL_DEFAULTED_FN (fn));
13667 /* Store the parameter declarations into the current function declaration.
13668 This is called after parsing the parameter declarations, before
13669 digesting the body of the function.
13671 Also install to binding contour return value identifier, if any. */
13673 static void
13674 store_parm_decls (tree current_function_parms)
13676 tree fndecl = current_function_decl;
13677 tree parm;
13679 /* This is a chain of any other decls that came in among the parm
13680 declarations. If a parm is declared with enum {foo, bar} x;
13681 then CONST_DECLs for foo and bar are put here. */
13682 tree nonparms = NULL_TREE;
13684 if (current_function_parms)
13686 /* This case is when the function was defined with an ANSI prototype.
13687 The parms already have decls, so we need not do anything here
13688 except record them as in effect
13689 and complain if any redundant old-style parm decls were written. */
13691 tree specparms = current_function_parms;
13692 tree next;
13694 /* Must clear this because it might contain TYPE_DECLs declared
13695 at class level. */
13696 current_binding_level->names = NULL;
13698 /* If we're doing semantic analysis, then we'll call pushdecl
13699 for each of these. We must do them in reverse order so that
13700 they end in the correct forward order. */
13701 specparms = nreverse (specparms);
13703 for (parm = specparms; parm; parm = next)
13705 next = DECL_CHAIN (parm);
13706 if (TREE_CODE (parm) == PARM_DECL)
13708 if (DECL_NAME (parm) == NULL_TREE
13709 || !VOID_TYPE_P (parm))
13710 pushdecl (parm);
13711 else
13712 error ("parameter %qD declared void", parm);
13714 else
13716 /* If we find an enum constant or a type tag,
13717 put it aside for the moment. */
13718 TREE_CHAIN (parm) = NULL_TREE;
13719 nonparms = chainon (nonparms, parm);
13723 /* Get the decls in their original chain order and record in the
13724 function. This is all and only the PARM_DECLs that were
13725 pushed into scope by the loop above. */
13726 DECL_ARGUMENTS (fndecl) = getdecls ();
13728 else
13729 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13731 /* Now store the final chain of decls for the arguments
13732 as the decl-chain of the current lexical scope.
13733 Put the enumerators in as well, at the front so that
13734 DECL_ARGUMENTS is not modified. */
13735 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13737 if (use_eh_spec_block (current_function_decl))
13738 current_eh_spec_block = begin_eh_spec_block ();
13742 /* We have finished doing semantic analysis on DECL, but have not yet
13743 generated RTL for its body. Save away our current state, so that
13744 when we want to generate RTL later we know what to do. */
13746 static void
13747 save_function_data (tree decl)
13749 struct language_function *f;
13751 /* Save the language-specific per-function data so that we can
13752 get it back when we really expand this function. */
13753 gcc_assert (!DECL_PENDING_INLINE_P (decl));
13755 /* Make a copy. */
13756 f = ggc_alloc<language_function> ();
13757 memcpy (f, cp_function_chain, sizeof (struct language_function));
13758 DECL_SAVED_FUNCTION_DATA (decl) = f;
13760 /* Clear out the bits we don't need. */
13761 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13762 f->bindings = NULL;
13763 f->x_local_names = NULL;
13764 f->base.local_typedefs = NULL;
13768 /* Set the return value of the constructor (if present). */
13770 static void
13771 finish_constructor_body (void)
13773 tree val;
13774 tree exprstmt;
13776 if (targetm.cxx.cdtor_returns_this ()
13777 && (! TYPE_FOR_JAVA (current_class_type)))
13779 /* Any return from a constructor will end up here. */
13780 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13782 val = DECL_ARGUMENTS (current_function_decl);
13783 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13784 DECL_RESULT (current_function_decl), val);
13785 /* Return the address of the object. */
13786 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13787 add_stmt (exprstmt);
13791 /* Do all the processing for the beginning of a destructor; set up the
13792 vtable pointers and cleanups for bases and members. */
13794 static void
13795 begin_destructor_body (void)
13797 tree compound_stmt;
13799 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13800 issued an error message. We still want to try to process the
13801 body of the function, but initialize_vtbl_ptrs will crash if
13802 TYPE_BINFO is NULL. */
13803 if (COMPLETE_TYPE_P (current_class_type))
13805 compound_stmt = begin_compound_stmt (0);
13806 /* Make all virtual function table pointers in non-virtual base
13807 classes point to CURRENT_CLASS_TYPE's virtual function
13808 tables. */
13809 initialize_vtbl_ptrs (current_class_ptr);
13810 finish_compound_stmt (compound_stmt);
13812 /* Insert a cleanup to let the back end know that the object is dead
13813 when we exit the destructor, either normally or via exception. */
13814 tree btype = CLASSTYPE_AS_BASE (current_class_type);
13815 tree clobber = build_constructor (btype, NULL);
13816 TREE_THIS_VOLATILE (clobber) = true;
13817 tree bref = build_nop (build_reference_type (btype), current_class_ptr);
13818 bref = convert_from_reference (bref);
13819 tree exprstmt = build2 (MODIFY_EXPR, btype, bref, clobber);
13820 finish_decl_cleanup (NULL_TREE, exprstmt);
13822 /* And insert cleanups for our bases and members so that they
13823 will be properly destroyed if we throw. */
13824 push_base_cleanups ();
13828 /* At the end of every destructor we generate code to delete the object if
13829 necessary. Do that now. */
13831 static void
13832 finish_destructor_body (void)
13834 tree exprstmt;
13836 /* Any return from a destructor will end up here; that way all base
13837 and member cleanups will be run when the function returns. */
13838 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13840 /* In a virtual destructor, we must call delete. */
13841 if (DECL_VIRTUAL_P (current_function_decl))
13843 tree if_stmt;
13844 tree virtual_size = cxx_sizeof (current_class_type);
13846 /* [class.dtor]
13848 At the point of definition of a virtual destructor (including
13849 an implicit definition), non-placement operator delete shall
13850 be looked up in the scope of the destructor's class and if
13851 found shall be accessible and unambiguous. */
13852 exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
13853 virtual_size,
13854 /*global_p=*/false,
13855 /*placement=*/NULL_TREE,
13856 /*alloc_fn=*/NULL_TREE,
13857 tf_warning_or_error);
13859 if_stmt = begin_if_stmt ();
13860 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13861 current_in_charge_parm,
13862 integer_one_node),
13863 if_stmt);
13864 finish_expr_stmt (exprstmt);
13865 finish_then_clause (if_stmt);
13866 finish_if_stmt (if_stmt);
13869 if (targetm.cxx.cdtor_returns_this ())
13871 tree val;
13873 val = DECL_ARGUMENTS (current_function_decl);
13874 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13875 DECL_RESULT (current_function_decl), val);
13876 /* Return the address of the object. */
13877 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13878 add_stmt (exprstmt);
13882 /* Do the necessary processing for the beginning of a function body, which
13883 in this case includes member-initializers, but not the catch clauses of
13884 a function-try-block. Currently, this means opening a binding level
13885 for the member-initializers (in a ctor), member cleanups (in a dtor),
13886 and capture proxies (in a lambda operator()). */
13888 tree
13889 begin_function_body (void)
13891 tree stmt;
13893 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13894 return NULL_TREE;
13896 if (processing_template_decl)
13897 /* Do nothing now. */;
13898 else
13899 /* Always keep the BLOCK node associated with the outermost pair of
13900 curly braces of a function. These are needed for correct
13901 operation of dwarfout.c. */
13902 keep_next_level (true);
13904 stmt = begin_compound_stmt (BCS_FN_BODY);
13906 if (processing_template_decl)
13907 /* Do nothing now. */;
13908 else if (DECL_DESTRUCTOR_P (current_function_decl))
13909 begin_destructor_body ();
13911 return stmt;
13914 /* Do the processing for the end of a function body. Currently, this means
13915 closing out the cleanups for fully-constructed bases and members, and in
13916 the case of the destructor, deleting the object if desired. Again, this
13917 is only meaningful for [cd]tors, since they are the only functions where
13918 there is a significant distinction between the main body and any
13919 function catch clauses. Handling, say, main() return semantics here
13920 would be wrong, as flowing off the end of a function catch clause for
13921 main() would also need to return 0. */
13923 void
13924 finish_function_body (tree compstmt)
13926 if (compstmt == NULL_TREE)
13927 return;
13929 /* Close the block. */
13930 finish_compound_stmt (compstmt);
13932 if (processing_template_decl)
13933 /* Do nothing now. */;
13934 else if (DECL_CONSTRUCTOR_P (current_function_decl))
13935 finish_constructor_body ();
13936 else if (DECL_DESTRUCTOR_P (current_function_decl))
13937 finish_destructor_body ();
13940 /* Given a function, returns the BLOCK corresponding to the outermost level
13941 of curly braces, skipping the artificial block created for constructor
13942 initializers. */
13944 tree
13945 outer_curly_brace_block (tree fndecl)
13947 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13948 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13949 /* Skip the artificial function body block. */
13950 block = BLOCK_SUBBLOCKS (block);
13951 return block;
13954 /* If FNDECL is a class's key method, add the class to the list of
13955 keyed classes that should be emitted. */
13957 static void
13958 record_key_method_defined (tree fndecl)
13960 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13961 && DECL_VIRTUAL_P (fndecl)
13962 && !processing_template_decl)
13964 tree fnclass = DECL_CONTEXT (fndecl);
13965 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13966 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13970 /* Subroutine of finish_function.
13971 Save the body of constexpr functions for possible
13972 future compile time evaluation. */
13974 static void
13975 maybe_save_function_definition (tree fun)
13977 if (!processing_template_decl
13978 && DECL_DECLARED_CONSTEXPR_P (fun)
13979 && !DECL_CLONED_FUNCTION_P (fun))
13980 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13983 /* Finish up a function declaration and compile that function
13984 all the way to assembler language output. The free the storage
13985 for the function definition.
13987 FLAGS is a bitwise or of the following values:
13988 2 - INCLASS_INLINE
13989 We just finished processing the body of an in-class inline
13990 function definition. (This processing will have taken place
13991 after the class definition is complete.) */
13993 tree
13994 finish_function (int flags)
13996 tree fndecl = current_function_decl;
13997 tree fntype, ctype = NULL_TREE;
13998 int inclass_inline = (flags & 2) != 0;
14000 /* When we get some parse errors, we can end up without a
14001 current_function_decl, so cope. */
14002 if (fndecl == NULL_TREE)
14003 return error_mark_node;
14005 if (c_dialect_objc ())
14006 objc_finish_function ();
14008 gcc_assert (!defer_mark_used_calls);
14009 defer_mark_used_calls = true;
14011 record_key_method_defined (fndecl);
14013 fntype = TREE_TYPE (fndecl);
14015 /* TREE_READONLY (fndecl) = 1;
14016 This caused &foo to be of type ptr-to-const-function
14017 which then got a warning when stored in a ptr-to-function variable. */
14019 gcc_assert (building_stmt_list_p ());
14020 /* The current function is being defined, so its DECL_INITIAL should
14021 be set, and unless there's a multiple definition, it should be
14022 error_mark_node. */
14023 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
14025 /* For a cloned function, we've already got all the code we need;
14026 there's no need to add any extra bits. */
14027 if (!DECL_CLONED_FUNCTION_P (fndecl))
14029 /* Make it so that `main' always returns 0 by default. */
14030 if (DECL_MAIN_P (current_function_decl))
14031 finish_return_stmt (integer_zero_node);
14033 if (use_eh_spec_block (current_function_decl))
14034 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
14035 (TREE_TYPE (current_function_decl)),
14036 current_eh_spec_block);
14039 /* If we're saving up tree structure, tie off the function now. */
14040 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
14042 if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
14043 cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
14045 finish_fname_decls ();
14047 /* If this function can't throw any exceptions, remember that. */
14048 if (!processing_template_decl
14049 && !cp_function_chain->can_throw
14050 && !flag_non_call_exceptions
14051 && !decl_replaceable_p (fndecl))
14052 TREE_NOTHROW (fndecl) = 1;
14054 /* This must come after expand_function_end because cleanups might
14055 have declarations (from inline functions) that need to go into
14056 this function's blocks. */
14058 /* If the current binding level isn't the outermost binding level
14059 for this function, either there is a bug, or we have experienced
14060 syntax errors and the statement tree is malformed. */
14061 if (current_binding_level->kind != sk_function_parms)
14063 /* Make sure we have already experienced errors. */
14064 gcc_assert (errorcount);
14066 /* Throw away the broken statement tree and extra binding
14067 levels. */
14068 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
14070 while (current_binding_level->kind != sk_function_parms)
14072 if (current_binding_level->kind == sk_class)
14073 pop_nested_class ();
14074 else
14075 poplevel (0, 0, 0);
14078 poplevel (1, 0, 1);
14080 /* Statements should always be full-expressions at the outermost set
14081 of curly braces for a function. */
14082 gcc_assert (stmts_are_full_exprs_p ());
14084 /* If there are no return statements in a function with auto return type,
14085 the return type is void. But if the declared type is something like
14086 auto*, this is an error. */
14087 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
14088 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
14090 if (!is_auto (current_function_auto_return_pattern)
14091 && !current_function_returns_value && !current_function_returns_null)
14093 error ("no return statements in function returning %qT",
14094 current_function_auto_return_pattern);
14095 inform (input_location, "only plain %<auto%> return type can be "
14096 "deduced to %<void%>");
14098 apply_deduced_return_type (fndecl, void_type_node);
14099 fntype = TREE_TYPE (fndecl);
14102 /* Save constexpr function body before it gets munged by
14103 the NRV transformation. */
14104 maybe_save_function_definition (fndecl);
14106 /* Set up the named return value optimization, if we can. Candidate
14107 variables are selected in check_return_expr. */
14108 if (current_function_return_value)
14110 tree r = current_function_return_value;
14111 tree outer;
14113 if (r != error_mark_node
14114 /* This is only worth doing for fns that return in memory--and
14115 simpler, since we don't have to worry about promoted modes. */
14116 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
14117 /* Only allow this for variables declared in the outer scope of
14118 the function so we know that their lifetime always ends with a
14119 return; see g++.dg/opt/nrv6.C. We could be more flexible if
14120 we were to do this optimization in tree-ssa. */
14121 && (outer = outer_curly_brace_block (fndecl))
14122 && chain_member (r, BLOCK_VARS (outer)))
14123 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
14125 current_function_return_value = NULL_TREE;
14128 /* Remember that we were in class scope. */
14129 if (current_class_name)
14130 ctype = current_class_type;
14132 /* Must mark the RESULT_DECL as being in this function. */
14133 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14135 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14136 to the FUNCTION_DECL node itself. */
14137 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14139 /* Save away current state, if appropriate. */
14140 if (!processing_template_decl)
14141 save_function_data (fndecl);
14143 /* Complain if there's just no return statement. */
14144 if (warn_return_type
14145 && !VOID_TYPE_P (TREE_TYPE (fntype))
14146 && !dependent_type_p (TREE_TYPE (fntype))
14147 && !current_function_returns_value && !current_function_returns_null
14148 /* Don't complain if we abort or throw. */
14149 && !current_function_returns_abnormally
14150 /* Don't complain if there's an infinite loop. */
14151 && !current_function_infinite_loop
14152 /* Don't complain if we are declared noreturn. */
14153 && !TREE_THIS_VOLATILE (fndecl)
14154 && !DECL_NAME (DECL_RESULT (fndecl))
14155 && !TREE_NO_WARNING (fndecl)
14156 /* Structor return values (if any) are set by the compiler. */
14157 && !DECL_CONSTRUCTOR_P (fndecl)
14158 && !DECL_DESTRUCTOR_P (fndecl)
14159 && targetm.warn_func_return (fndecl))
14161 warning (OPT_Wreturn_type,
14162 "no return statement in function returning non-void");
14163 TREE_NO_WARNING (fndecl) = 1;
14166 /* Store the end of the function, so that we get good line number
14167 info for the epilogue. */
14168 cfun->function_end_locus = input_location;
14170 /* Complain about parameters that are only set, but never otherwise used. */
14171 if (warn_unused_but_set_parameter
14172 && !processing_template_decl
14173 && errorcount == unused_but_set_errorcount
14174 && !DECL_CLONED_FUNCTION_P (fndecl))
14176 tree decl;
14178 for (decl = DECL_ARGUMENTS (fndecl);
14179 decl;
14180 decl = DECL_CHAIN (decl))
14181 if (TREE_USED (decl)
14182 && TREE_CODE (decl) == PARM_DECL
14183 && !DECL_READ_P (decl)
14184 && DECL_NAME (decl)
14185 && !DECL_ARTIFICIAL (decl)
14186 && !TREE_NO_WARNING (decl)
14187 && !DECL_IN_SYSTEM_HEADER (decl)
14188 && TREE_TYPE (decl) != error_mark_node
14189 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
14190 && (!CLASS_TYPE_P (TREE_TYPE (decl))
14191 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
14192 warning (OPT_Wunused_but_set_parameter,
14193 "parameter %q+D set but not used", decl);
14194 unused_but_set_errorcount = errorcount;
14197 /* Complain about locally defined typedefs that are not used in this
14198 function. */
14199 maybe_warn_unused_local_typedefs ();
14201 /* Genericize before inlining. */
14202 if (!processing_template_decl)
14204 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
14205 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
14206 cp_genericize (fndecl);
14207 /* Clear out the bits we don't need. */
14208 f->x_current_class_ptr = NULL;
14209 f->x_current_class_ref = NULL;
14210 f->x_eh_spec_block = NULL;
14211 f->x_in_charge_parm = NULL;
14212 f->x_vtt_parm = NULL;
14213 f->x_return_value = NULL;
14214 f->bindings = NULL;
14215 f->extern_decl_map = NULL;
14216 f->infinite_loops = NULL;
14218 /* Clear out the bits we don't need. */
14219 local_names = NULL;
14221 /* We're leaving the context of this function, so zap cfun. It's still in
14222 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
14223 set_cfun (NULL);
14224 current_function_decl = NULL;
14226 /* If this is an in-class inline definition, we may have to pop the
14227 bindings for the template parameters that we added in
14228 maybe_begin_member_template_processing when start_function was
14229 called. */
14230 if (inclass_inline)
14231 maybe_end_member_template_processing ();
14233 /* Leave the scope of the class. */
14234 if (ctype)
14235 pop_nested_class ();
14237 --function_depth;
14239 /* Clean up. */
14240 current_function_decl = NULL_TREE;
14242 defer_mark_used_calls = false;
14243 if (deferred_mark_used_calls)
14245 unsigned int i;
14246 tree decl;
14248 FOR_EACH_VEC_SAFE_ELT (deferred_mark_used_calls, i, decl)
14249 mark_used (decl);
14250 vec_free (deferred_mark_used_calls);
14253 return fndecl;
14256 /* Create the FUNCTION_DECL for a function definition.
14257 DECLSPECS and DECLARATOR are the parts of the declaration;
14258 they describe the return type and the name of the function,
14259 but twisted together in a fashion that parallels the syntax of C.
14261 This function creates a binding context for the function body
14262 as well as setting up the FUNCTION_DECL in current_function_decl.
14264 Returns a FUNCTION_DECL on success.
14266 If the DECLARATOR is not suitable for a function (it defines a datum
14267 instead), we return 0, which tells yyparse to report a parse error.
14269 May return void_type_node indicating that this method is actually
14270 a friend. See grokfield for more details.
14272 Came here with a `.pushlevel' .
14274 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14275 CHANGES TO CODE IN `grokfield'. */
14277 tree
14278 grokmethod (cp_decl_specifier_seq *declspecs,
14279 const cp_declarator *declarator, tree attrlist)
14281 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14282 &attrlist);
14284 if (fndecl == error_mark_node)
14285 return error_mark_node;
14287 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14289 error ("invalid member function declaration");
14290 return error_mark_node;
14293 if (attrlist)
14294 cplus_decl_attributes (&fndecl, attrlist, 0);
14296 /* Pass friends other than inline friend functions back. */
14297 if (fndecl == void_type_node)
14298 return fndecl;
14300 if (DECL_IN_AGGR_P (fndecl))
14302 if (DECL_CLASS_SCOPE_P (fndecl))
14303 error ("%qD is already defined in class %qT", fndecl,
14304 DECL_CONTEXT (fndecl));
14305 return error_mark_node;
14308 check_template_shadow (fndecl);
14310 DECL_COMDAT (fndecl) = 1;
14311 DECL_DECLARED_INLINE_P (fndecl) = 1;
14312 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
14314 /* We process method specializations in finish_struct_1. */
14315 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14317 fndecl = push_template_decl (fndecl);
14318 if (fndecl == error_mark_node)
14319 return fndecl;
14322 if (! DECL_FRIEND_P (fndecl))
14324 if (DECL_CHAIN (fndecl))
14326 fndecl = copy_node (fndecl);
14327 TREE_CHAIN (fndecl) = NULL_TREE;
14331 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14333 DECL_IN_AGGR_P (fndecl) = 1;
14334 return fndecl;
14338 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
14339 we can lay it out later, when and if its type becomes complete.
14341 Also handle constexpr variables where the initializer involves
14342 an unlowered PTRMEM_CST because the class isn't complete yet. */
14344 void
14345 maybe_register_incomplete_var (tree var)
14347 gcc_assert (VAR_P (var));
14349 /* Keep track of variables with incomplete types. */
14350 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14351 && DECL_EXTERNAL (var))
14353 tree inner_type = TREE_TYPE (var);
14355 while (TREE_CODE (inner_type) == ARRAY_TYPE)
14356 inner_type = TREE_TYPE (inner_type);
14357 inner_type = TYPE_MAIN_VARIANT (inner_type);
14359 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14360 /* RTTI TD entries are created while defining the type_info. */
14361 || (TYPE_LANG_SPECIFIC (inner_type)
14362 && TYPE_BEING_DEFINED (inner_type)))
14364 incomplete_var iv = {var, inner_type};
14365 vec_safe_push (incomplete_vars, iv);
14367 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
14368 && decl_constant_var_p (var)
14369 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
14371 /* When the outermost open class is complete we can resolve any
14372 pointers-to-members. */
14373 tree context = outermost_open_class ();
14374 incomplete_var iv = {var, context};
14375 vec_safe_push (incomplete_vars, iv);
14380 /* Called when a class type (given by TYPE) is defined. If there are
14381 any existing VAR_DECLs whose type has been completed by this
14382 declaration, update them now. */
14384 void
14385 complete_vars (tree type)
14387 unsigned ix;
14388 incomplete_var *iv;
14390 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
14392 if (same_type_p (type, iv->incomplete_type))
14394 tree var = iv->decl;
14395 tree type = TREE_TYPE (var);
14397 if (TYPE_MAIN_VARIANT (strip_array_types (type))
14398 == iv->incomplete_type)
14400 /* Complete the type of the variable. The VAR_DECL itself
14401 will be laid out in expand_expr. */
14402 complete_type (type);
14403 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
14406 if (DECL_INITIAL (var)
14407 && decl_constant_var_p (var))
14408 DECL_INITIAL (var) = cplus_expand_constant (DECL_INITIAL (var));
14410 /* Remove this entry from the list. */
14411 incomplete_vars->unordered_remove (ix);
14413 else
14414 ix++;
14417 /* Check for pending declarations which may have abstract type. */
14418 complete_type_check_abstract (type);
14421 /* If DECL is of a type which needs a cleanup, build and return an
14422 expression to perform that cleanup here. Return NULL_TREE if no
14423 cleanup need be done. */
14425 tree
14426 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
14428 tree type;
14429 tree attr;
14430 tree cleanup;
14432 /* Assume no cleanup is required. */
14433 cleanup = NULL_TREE;
14435 if (error_operand_p (decl))
14436 return cleanup;
14438 /* Handle "__attribute__((cleanup))". We run the cleanup function
14439 before the destructor since the destructor is what actually
14440 terminates the lifetime of the object. */
14441 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
14442 if (attr)
14444 tree id;
14445 tree fn;
14446 tree arg;
14448 /* Get the name specified by the user for the cleanup function. */
14449 id = TREE_VALUE (TREE_VALUE (attr));
14450 /* Look up the name to find the cleanup function to call. It is
14451 important to use lookup_name here because that is what is
14452 used in c-common.c:handle_cleanup_attribute when performing
14453 initial checks on the attribute. Note that those checks
14454 include ensuring that the function found is not an overloaded
14455 function, or an object with an overloaded call operator,
14456 etc.; we can rely on the fact that the function found is an
14457 ordinary FUNCTION_DECL. */
14458 fn = lookup_name (id);
14459 arg = build_address (decl);
14460 mark_used (decl);
14461 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
14462 if (cleanup == error_mark_node)
14463 return error_mark_node;
14465 /* Handle ordinary C++ destructors. */
14466 type = TREE_TYPE (decl);
14467 if (type_build_dtor_call (type))
14469 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
14470 tree addr;
14471 tree call;
14473 if (TREE_CODE (type) == ARRAY_TYPE)
14474 addr = decl;
14475 else
14476 addr = build_address (decl);
14478 call = build_delete (TREE_TYPE (addr), addr,
14479 sfk_complete_destructor, flags, 0, complain);
14480 if (call == error_mark_node)
14481 cleanup = error_mark_node;
14482 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
14483 /* Discard the call. */;
14484 else if (cleanup)
14485 cleanup = cp_build_compound_expr (cleanup, call, complain);
14486 else
14487 cleanup = call;
14490 /* build_delete sets the location of the destructor call to the
14491 current location, even though the destructor is going to be
14492 called later, at the end of the current scope. This can lead to
14493 a "jumpy" behaviour for users of debuggers when they step around
14494 the end of the block. So let's unset the location of the
14495 destructor call instead. */
14496 if (cleanup != NULL && EXPR_P (cleanup))
14497 SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
14499 if (cleanup
14500 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl))))
14501 /* Treat objects with destructors as used; the destructor may do
14502 something substantive. */
14503 mark_used (decl);
14505 return cleanup;
14509 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
14510 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
14511 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
14513 tree
14514 static_fn_type (tree memfntype)
14516 tree fntype;
14517 tree args;
14519 if (TYPE_PTRMEMFUNC_P (memfntype))
14520 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
14521 if (POINTER_TYPE_P (memfntype)
14522 || TREE_CODE (memfntype) == FUNCTION_DECL)
14523 memfntype = TREE_TYPE (memfntype);
14524 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
14525 return memfntype;
14526 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
14527 args = TYPE_ARG_TYPES (memfntype);
14528 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
14529 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
14530 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
14531 fntype = (cp_build_type_attribute_variant
14532 (fntype, TYPE_ATTRIBUTES (memfntype)));
14533 fntype = (build_exception_variant
14534 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
14535 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
14536 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
14537 return fntype;
14540 /* DECL was originally constructed as a non-static member function,
14541 but turned out to be static. Update it accordingly. */
14543 void
14544 revert_static_member_fn (tree decl)
14546 tree stype = static_fn_type (decl);
14547 cp_cv_quals quals = type_memfn_quals (stype);
14548 cp_ref_qualifier rqual = type_memfn_rqual (stype);
14550 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
14551 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
14553 TREE_TYPE (decl) = stype;
14555 if (DECL_ARGUMENTS (decl))
14556 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
14557 DECL_STATIC_FUNCTION_P (decl) = 1;
14560 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14561 one of the language-independent trees. */
14563 enum cp_tree_node_structure_enum
14564 cp_tree_node_structure (union lang_tree_node * t)
14566 switch (TREE_CODE (&t->generic))
14568 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
14569 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
14570 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
14571 case OVERLOAD: return TS_CP_OVERLOAD;
14572 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
14573 case PTRMEM_CST: return TS_CP_PTRMEM;
14574 case BASELINK: return TS_CP_BASELINK;
14575 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
14576 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
14577 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
14578 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
14579 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
14580 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
14581 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
14582 default: return TS_CP_GENERIC;
14586 /* Build the void_list_node (void_type_node having been created). */
14587 tree
14588 build_void_list_node (void)
14590 tree t = build_tree_list (NULL_TREE, void_type_node);
14591 return t;
14594 bool
14595 cp_missing_noreturn_ok_p (tree decl)
14597 /* A missing noreturn is ok for the `main' function. */
14598 return DECL_MAIN_P (decl);
14601 /* Return the decl used to identify the COMDAT group into which DECL should
14602 be placed. */
14604 tree
14605 cxx_comdat_group (tree decl)
14607 /* Virtual tables, construction virtual tables, and virtual table
14608 tables all go in a single COMDAT group, named after the primary
14609 virtual table. */
14610 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
14611 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
14612 /* For all other DECLs, the COMDAT group is the mangled name of the
14613 declaration itself. */
14614 else
14616 while (DECL_THUNK_P (decl))
14618 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
14619 into the same section as the target function. In that case
14620 we must return target's name. */
14621 tree target = THUNK_TARGET (decl);
14622 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14623 && DECL_SECTION_NAME (target) != NULL
14624 && DECL_ONE_ONLY (target))
14625 decl = target;
14626 else
14627 break;
14631 return decl;
14634 /* Returns the return type for FN as written by the user, which may include
14635 a placeholder for a deduced return type. */
14637 tree
14638 fndecl_declared_return_type (tree fn)
14640 fn = STRIP_TEMPLATE (fn);
14641 if (FNDECL_USED_AUTO (fn))
14643 struct language_function *f = NULL;
14644 if (DECL_STRUCT_FUNCTION (fn))
14645 f = DECL_STRUCT_FUNCTION (fn)->language;
14646 if (f == NULL)
14647 f = DECL_SAVED_FUNCTION_DATA (fn);
14648 return f->x_auto_return_pattern;
14650 return TREE_TYPE (TREE_TYPE (fn));
14653 /* Returns true iff DECL was declared with an auto return type and it has
14654 not yet been deduced to a real type. */
14656 bool
14657 undeduced_auto_decl (tree decl)
14659 if (cxx_dialect < cxx14)
14660 return false;
14661 return type_uses_auto (TREE_TYPE (decl));
14664 /* Complain if DECL has an undeduced return type. */
14666 void
14667 require_deduced_type (tree decl)
14669 if (undeduced_auto_decl (decl))
14670 error ("use of %qD before deduction of %<auto%>", decl);
14673 #include "gt-cp-decl.h"