Merge from trunk
[official-gcc.git] / gcc / cp / decl.c
blob50d11f376c986047eb406bb5a581c375e410e4d6
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2014 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
22 /* Process declarations and symbol lookup for C++ front end.
23 Also constructs types; the standard scalar types at initialization,
24 and structure, union, array and enum types when they are declared. */
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "stringpool.h"
35 #include "stor-layout.h"
36 #include "varasm.h"
37 #include "attribs.h"
38 #include "calls.h"
39 #include "flags.h"
40 #include "cp-tree.h"
41 #include "tree-iterator.h"
42 #include "tree-inline.h"
43 #include "decl.h"
44 #include "intl.h"
45 #include "toplev.h"
46 #include "hashtab.h"
47 #include "tm_p.h"
48 #include "target.h"
49 #include "c-family/c-common.h"
50 #include "c-family/c-objc.h"
51 #include "c-family/c-pragma.h"
52 #include "c-family/c-target.h"
53 #include "c-family/c-ubsan.h"
54 #include "diagnostic.h"
55 #include "intl.h"
56 #include "debug.h"
57 #include "timevar.h"
58 #include "pointer-set.h"
59 #include "splay-tree.h"
60 #include "plugin.h"
61 #include "cgraph.h"
62 #include "cilk.h"
64 /* Possible cases of bad specifiers type used by bad_specifiers. */
65 enum bad_spec_place {
66 BSP_VAR, /* variable */
67 BSP_PARM, /* parameter */
68 BSP_TYPE, /* type */
69 BSP_FIELD /* field */
72 static tree grokparms (tree parmlist, tree *);
73 static const char *redeclaration_error_message (tree, tree);
75 static int decl_jump_unsafe (tree);
76 static void require_complete_types_for_parms (tree);
77 static int ambi_op_p (enum tree_code);
78 static int unary_op_p (enum tree_code);
79 static void push_local_name (tree);
80 static tree grok_reference_init (tree, tree, tree, int);
81 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
82 int, int, tree);
83 static int check_static_variable_definition (tree, tree);
84 static void record_unknown_type (tree, const char *);
85 static tree builtin_function_1 (tree, tree, bool);
86 static int member_function_or_else (tree, tree, enum overload_flags);
87 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
88 int);
89 static void check_for_uninitialized_const_var (tree);
90 static hashval_t typename_hash (const void *);
91 static int typename_compare (const void *, const void *);
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(()) 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. */
396 static int
397 pop_labels_1 (void **slot, void *data)
399 struct named_label_entry *ent = (struct named_label_entry *) *slot;
400 tree block = (tree) data;
402 pop_label (ent->label_decl, NULL_TREE);
404 /* Put the labels into the "variables" of the top-level block,
405 so debugger can see them. */
406 DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
407 BLOCK_VARS (block) = ent->label_decl;
409 htab_clear_slot (named_labels, slot);
411 return 1;
414 static void
415 pop_labels (tree block)
417 if (named_labels)
419 htab_traverse (named_labels, pop_labels_1, block);
420 named_labels = NULL;
424 /* At the end of a block with local labels, restore the outer definition. */
426 static void
427 pop_local_label (tree label, tree old_value)
429 struct named_label_entry dummy;
430 void **slot;
432 pop_label (label, old_value);
434 dummy.label_decl = label;
435 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
436 htab_clear_slot (named_labels, slot);
439 /* The following two routines are used to interface to Objective-C++.
440 The binding level is purposely treated as an opaque type. */
442 void *
443 objc_get_current_scope (void)
445 return current_binding_level;
448 /* The following routine is used by the NeXT-style SJLJ exceptions;
449 variables get marked 'volatile' so as to not be clobbered by
450 _setjmp()/_longjmp() calls. All variables in the current scope,
451 as well as parent scopes up to (but not including) ENCLOSING_BLK
452 shall be thusly marked. */
454 void
455 objc_mark_locals_volatile (void *enclosing_blk)
457 cp_binding_level *scope;
459 for (scope = current_binding_level;
460 scope && scope != enclosing_blk;
461 scope = scope->level_chain)
463 tree decl;
465 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
466 objc_volatilize_decl (decl);
468 /* Do not climb up past the current function. */
469 if (scope->kind == sk_function_parms)
470 break;
474 /* Update data for defined and undefined labels when leaving a scope. */
476 static int
477 poplevel_named_label_1 (void **slot, void *data)
479 struct named_label_entry *ent = (struct named_label_entry *) *slot;
480 cp_binding_level *bl = (cp_binding_level *) data;
481 cp_binding_level *obl = bl->level_chain;
483 if (ent->binding_level == bl)
485 tree decl;
487 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
488 TREE_LISTs representing OVERLOADs, so be careful. */
489 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
490 ? DECL_CHAIN (decl)
491 : TREE_CHAIN (decl)))
492 if (decl_jump_unsafe (decl))
493 vec_safe_push (ent->bad_decls, decl);
495 ent->binding_level = obl;
496 ent->names_in_scope = obl->names;
497 switch (bl->kind)
499 case sk_try:
500 ent->in_try_scope = true;
501 break;
502 case sk_catch:
503 ent->in_catch_scope = true;
504 break;
505 case sk_omp:
506 ent->in_omp_scope = true;
507 break;
508 default:
509 break;
512 else if (ent->uses)
514 struct named_label_use_entry *use;
516 for (use = ent->uses; use ; use = use->next)
517 if (use->binding_level == bl)
519 use->binding_level = obl;
520 use->names_in_scope = obl->names;
521 if (bl->kind == sk_omp)
522 use->in_omp_scope = true;
526 return 1;
529 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
530 when errors were reported, except for -Werror-unused-but-set-*. */
531 static int unused_but_set_errorcount;
533 /* Exit a binding level.
534 Pop the level off, and restore the state of the identifier-decl mappings
535 that were in effect when this level was entered.
537 If KEEP == 1, this level had explicit declarations, so
538 and create a "block" (a BLOCK node) for the level
539 to record its declarations and subblocks for symbol table output.
541 If FUNCTIONBODY is nonzero, this level is the body of a function,
542 so create a block as if KEEP were set and also clear out all
543 label names.
545 If REVERSE is nonzero, reverse the order of decls before putting
546 them into the BLOCK. */
548 tree
549 poplevel (int keep, int reverse, int functionbody)
551 tree link;
552 /* The chain of decls was accumulated in reverse order.
553 Put it into forward order, just for cleanliness. */
554 tree decls;
555 tree subblocks;
556 tree block;
557 tree decl;
558 int leaving_for_scope;
559 scope_kind kind;
560 unsigned ix;
561 cp_label_binding *label_bind;
563 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
564 restart:
566 block = NULL_TREE;
568 gcc_assert (current_binding_level->kind != sk_class);
570 if (current_binding_level->kind == sk_cleanup)
571 functionbody = 0;
572 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
574 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
576 /* We used to use KEEP == 2 to indicate that the new block should go
577 at the beginning of the list of blocks at this binding level,
578 rather than the end. This hack is no longer used. */
579 gcc_assert (keep == 0 || keep == 1);
581 if (current_binding_level->keep)
582 keep = 1;
584 /* Any uses of undefined labels, and any defined labels, now operate
585 under constraints of next binding contour. */
586 if (cfun && !functionbody && named_labels)
587 htab_traverse (named_labels, poplevel_named_label_1,
588 current_binding_level);
590 /* Get the decls in the order they were written.
591 Usually current_binding_level->names is in reverse order.
592 But parameter decls were previously put in forward order. */
594 if (reverse)
595 current_binding_level->names
596 = decls = nreverse (current_binding_level->names);
597 else
598 decls = current_binding_level->names;
600 /* If there were any declarations or structure tags in that level,
601 or if this level is a function body,
602 create a BLOCK to record them for the life of this function. */
603 block = NULL_TREE;
604 if (keep == 1 || functionbody)
605 block = make_node (BLOCK);
606 if (block != NULL_TREE)
608 BLOCK_VARS (block) = decls;
609 BLOCK_SUBBLOCKS (block) = subblocks;
612 /* In each subblock, record that this is its superior. */
613 if (keep >= 0)
614 for (link = subblocks; link; link = BLOCK_CHAIN (link))
615 BLOCK_SUPERCONTEXT (link) = block;
617 /* We still support the old for-scope rules, whereby the variables
618 in a for-init statement were in scope after the for-statement
619 ended. We only use the new rules if flag_new_for_scope is
620 nonzero. */
621 leaving_for_scope
622 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
624 /* Before we remove the declarations first check for unused variables. */
625 if ((warn_unused_variable || warn_unused_but_set_variable)
626 && !processing_template_decl)
627 for (tree d = getdecls (); d; d = TREE_CHAIN (d))
629 /* There are cases where D itself is a TREE_LIST. See in
630 push_local_binding where the list of decls returned by
631 getdecls is built. */
632 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
633 // See through references for improved -Wunused-variable (PR 38958).
634 tree type = non_reference (TREE_TYPE (decl));
635 if (VAR_P (decl)
636 && (! TREE_USED (decl) || !DECL_READ_P (decl))
637 && ! DECL_IN_SYSTEM_HEADER (decl)
638 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
639 && type != error_mark_node
640 && (!CLASS_TYPE_P (type)
641 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
642 || lookup_attribute ("warn_unused",
643 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
645 if (! TREE_USED (decl))
646 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
647 else if (DECL_CONTEXT (decl) == current_function_decl
648 // For -Wunused-but-set-variable leave references alone.
649 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
650 && errorcount == unused_but_set_errorcount)
652 warning (OPT_Wunused_but_set_variable,
653 "variable %q+D set but not used", decl);
654 unused_but_set_errorcount = errorcount;
659 /* Remove declarations for all the DECLs in this level. */
660 for (link = decls; link; link = TREE_CHAIN (link))
662 if (leaving_for_scope && VAR_P (link)
663 /* It's hard to make this ARM compatibility hack play nicely with
664 lambdas, and it really isn't necessary in C++11 mode. */
665 && cxx_dialect < cxx11
666 && DECL_NAME (link))
668 tree name = DECL_NAME (link);
669 cxx_binding *ob;
670 tree ns_binding;
672 ob = outer_binding (name,
673 IDENTIFIER_BINDING (name),
674 /*class_p=*/true);
675 if (!ob)
676 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
677 else
678 ns_binding = NULL_TREE;
680 if (ob && ob->scope == current_binding_level->level_chain)
681 /* We have something like:
683 int i;
684 for (int i; ;);
686 and we are leaving the `for' scope. There's no reason to
687 keep the binding of the inner `i' in this case. */
688 pop_binding (name, link);
689 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
690 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
691 /* Here, we have something like:
693 typedef int I;
695 void f () {
696 for (int I; ;);
699 We must pop the for-scope binding so we know what's a
700 type and what isn't. */
701 pop_binding (name, link);
702 else
704 /* Mark this VAR_DECL as dead so that we can tell we left it
705 there only for backward compatibility. */
706 DECL_DEAD_FOR_LOCAL (link) = 1;
708 /* Keep track of what should have happened when we
709 popped the binding. */
710 if (ob && ob->value)
712 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
713 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
716 /* Add it to the list of dead variables in the next
717 outermost binding to that we can remove these when we
718 leave that binding. */
719 vec_safe_push (
720 current_binding_level->level_chain->dead_vars_from_for,
721 link);
723 /* Although we don't pop the cxx_binding, we do clear
724 its SCOPE since the scope is going away now. */
725 IDENTIFIER_BINDING (name)->scope
726 = current_binding_level->level_chain;
729 else
731 tree name;
733 /* Remove the binding. */
734 decl = link;
736 if (TREE_CODE (decl) == TREE_LIST)
737 decl = TREE_VALUE (decl);
738 name = decl;
740 if (TREE_CODE (name) == OVERLOAD)
741 name = OVL_FUNCTION (name);
743 gcc_assert (DECL_P (name));
744 pop_binding (DECL_NAME (name), decl);
748 /* Remove declarations for any `for' variables from inner scopes
749 that we kept around. */
750 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
751 ix, decl)
752 pop_binding (DECL_NAME (decl), decl);
754 /* Restore the IDENTIFIER_TYPE_VALUEs. */
755 for (link = current_binding_level->type_shadowed;
756 link; link = TREE_CHAIN (link))
757 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
759 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
760 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->shadowed_labels,
761 ix, label_bind)
762 pop_local_label (label_bind->label, label_bind->prev_value);
764 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
765 list if a `using' declaration put them there. The debugging
766 back ends won't understand OVERLOAD, so we remove them here.
767 Because the BLOCK_VARS are (temporarily) shared with
768 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
769 popped all the bindings. */
770 if (block)
772 tree* d;
774 for (d = &BLOCK_VARS (block); *d; )
776 if (TREE_CODE (*d) == TREE_LIST)
777 *d = TREE_CHAIN (*d);
778 else
779 d = &DECL_CHAIN (*d);
783 /* If the level being exited is the top level of a function,
784 check over all the labels. */
785 if (functionbody)
787 /* Since this is the top level block of a function, the vars are
788 the function's parameters. Don't leave them in the BLOCK
789 because they are found in the FUNCTION_DECL instead. */
790 BLOCK_VARS (block) = 0;
791 pop_labels (block);
794 kind = current_binding_level->kind;
795 if (kind == sk_cleanup)
797 tree stmt;
799 /* If this is a temporary binding created for a cleanup, then we'll
800 have pushed a statement list level. Pop that, create a new
801 BIND_EXPR for the block, and insert it into the stream. */
802 stmt = pop_stmt_list (current_binding_level->statement_list);
803 stmt = c_build_bind_expr (input_location, block, stmt);
804 add_stmt (stmt);
807 leave_scope ();
808 if (functionbody)
810 /* The current function is being defined, so its DECL_INITIAL
811 should be error_mark_node. */
812 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
813 DECL_INITIAL (current_function_decl) = block;
815 else if (block)
816 current_binding_level->blocks
817 = block_chainon (current_binding_level->blocks, block);
819 /* If we did not make a block for the level just exited,
820 any blocks made for inner levels
821 (since they cannot be recorded as subblocks in that level)
822 must be carried forward so they will later become subblocks
823 of something else. */
824 else if (subblocks)
825 current_binding_level->blocks
826 = block_chainon (current_binding_level->blocks, subblocks);
828 /* Each and every BLOCK node created here in `poplevel' is important
829 (e.g. for proper debugging information) so if we created one
830 earlier, mark it as "used". */
831 if (block)
832 TREE_USED (block) = 1;
834 /* All temporary bindings created for cleanups are popped silently. */
835 if (kind == sk_cleanup)
836 goto restart;
838 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
839 return block;
842 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
843 itself, calling F for each. The DATA is passed to F as well. */
845 static int
846 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
848 int result = 0;
849 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
851 result |= (*f) (name_space, data);
853 for (; current; current = DECL_CHAIN (current))
854 result |= walk_namespaces_r (current, f, data);
856 return result;
859 /* Walk all the namespaces, calling F for each. The DATA is passed to
860 F as well. */
863 walk_namespaces (walk_namespaces_fn f, void* data)
865 return walk_namespaces_r (global_namespace, f, data);
868 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
869 DATA is non-NULL, this is the last time we will call
870 wrapup_global_declarations for this NAMESPACE. */
873 wrapup_globals_for_namespace (tree name_space, void* data)
875 cp_binding_level *level = NAMESPACE_LEVEL (name_space);
876 vec<tree, va_gc> *statics = level->static_decls;
877 tree *vec = statics->address ();
878 int len = statics->length ();
879 int last_time = (data != 0);
881 if (last_time)
883 check_global_declarations (vec, len);
884 emit_debug_global_declarations (vec, len);
885 return 0;
888 /* Write out any globals that need to be output. */
889 return wrapup_global_declarations (vec, len);
893 /* In C++, you don't have to write `struct S' to refer to `S'; you
894 can just use `S'. We accomplish this by creating a TYPE_DECL as
895 if the user had written `typedef struct S S'. Create and return
896 the TYPE_DECL for TYPE. */
898 tree
899 create_implicit_typedef (tree name, tree type)
901 tree decl;
903 decl = build_decl (input_location, TYPE_DECL, name, type);
904 DECL_ARTIFICIAL (decl) = 1;
905 /* There are other implicit type declarations, like the one *within*
906 a class that allows you to write `S::S'. We must distinguish
907 amongst these. */
908 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
909 TYPE_NAME (type) = decl;
910 TYPE_STUB_DECL (type) = decl;
912 return decl;
915 /* Remember a local name for name-mangling purposes. */
917 static void
918 push_local_name (tree decl)
920 size_t i, nelts;
921 tree t, name;
923 timevar_start (TV_NAME_LOOKUP);
925 name = DECL_NAME (decl);
927 nelts = vec_safe_length (local_names);
928 for (i = 0; i < nelts; i++)
930 t = (*local_names)[i];
931 if (DECL_NAME (t) == name)
933 if (!DECL_LANG_SPECIFIC (decl))
934 retrofit_lang_decl (decl);
935 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
936 if (DECL_DISCRIMINATOR_SET_P (t))
937 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
938 else
939 DECL_DISCRIMINATOR (decl) = 1;
941 (*local_names)[i] = decl;
942 timevar_stop (TV_NAME_LOOKUP);
943 return;
947 vec_safe_push (local_names, decl);
948 timevar_stop (TV_NAME_LOOKUP);
951 /* Subroutine of duplicate_decls: return truthvalue of whether
952 or not types of these decls match.
954 For C++, we must compare the parameter list so that `int' can match
955 `int&' in a parameter position, but `int&' is not confused with
956 `const int&'. */
959 decls_match (tree newdecl, tree olddecl)
961 int types_match;
963 if (newdecl == olddecl)
964 return 1;
966 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
967 /* If the two DECLs are not even the same kind of thing, we're not
968 interested in their types. */
969 return 0;
971 gcc_assert (DECL_P (newdecl));
973 if (TREE_CODE (newdecl) == FUNCTION_DECL)
975 tree f1 = TREE_TYPE (newdecl);
976 tree f2 = TREE_TYPE (olddecl);
977 tree p1 = TYPE_ARG_TYPES (f1);
978 tree p2 = TYPE_ARG_TYPES (f2);
979 tree r2;
981 /* Specializations of different templates are different functions
982 even if they have the same type. */
983 tree t1 = (DECL_USE_TEMPLATE (newdecl)
984 ? DECL_TI_TEMPLATE (newdecl)
985 : NULL_TREE);
986 tree t2 = (DECL_USE_TEMPLATE (olddecl)
987 ? DECL_TI_TEMPLATE (olddecl)
988 : NULL_TREE);
989 if (t1 != t2)
990 return 0;
992 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
993 && ! (DECL_EXTERN_C_P (newdecl)
994 && DECL_EXTERN_C_P (olddecl)))
995 return 0;
997 /* A new declaration doesn't match a built-in one unless it
998 is also extern "C". */
999 if (DECL_IS_BUILTIN (olddecl)
1000 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1001 return 0;
1003 if (TREE_CODE (f1) != TREE_CODE (f2))
1004 return 0;
1006 /* A declaration with deduced return type should use its pre-deduction
1007 type for declaration matching. */
1008 r2 = fndecl_declared_return_type (olddecl);
1010 if (same_type_p (TREE_TYPE (f1), r2))
1012 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1013 && (DECL_BUILT_IN (olddecl)
1014 #ifndef NO_IMPLICIT_EXTERN_C
1015 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1016 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1017 #endif
1020 types_match = self_promoting_args_p (p1);
1021 if (p1 == void_list_node)
1022 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1024 #ifndef NO_IMPLICIT_EXTERN_C
1025 else if (!prototype_p (f1)
1026 && (DECL_EXTERN_C_P (olddecl)
1027 && DECL_IN_SYSTEM_HEADER (olddecl)
1028 && !DECL_CLASS_SCOPE_P (olddecl))
1029 && (DECL_EXTERN_C_P (newdecl)
1030 && DECL_IN_SYSTEM_HEADER (newdecl)
1031 && !DECL_CLASS_SCOPE_P (newdecl)))
1033 types_match = self_promoting_args_p (p2);
1034 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1036 #endif
1037 else
1038 types_match =
1039 compparms (p1, p2)
1040 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1041 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1042 || comp_type_attributes (TREE_TYPE (newdecl),
1043 TREE_TYPE (olddecl)) != 0);
1045 else
1046 types_match = 0;
1048 /* The decls dont match if they correspond to two different versions
1049 of the same function. Disallow extern "C" functions to be
1050 versions for now. */
1051 if (types_match
1052 && !DECL_EXTERN_C_P (newdecl)
1053 && !DECL_EXTERN_C_P (olddecl)
1054 && targetm.target_option.function_versions (newdecl, olddecl))
1056 /* Mark functions as versions if necessary. Modify the mangled decl
1057 name if necessary. */
1058 if (DECL_FUNCTION_VERSIONED (newdecl)
1059 && DECL_FUNCTION_VERSIONED (olddecl))
1060 return 0;
1061 if (!DECL_FUNCTION_VERSIONED (newdecl))
1063 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1064 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1065 mangle_decl (newdecl);
1067 if (!DECL_FUNCTION_VERSIONED (olddecl))
1069 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1070 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1071 mangle_decl (olddecl);
1073 record_function_versions (olddecl, newdecl);
1074 return 0;
1077 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1079 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1080 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1082 if (TREE_CODE (newres) != TREE_CODE (oldres))
1083 return 0;
1085 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1086 DECL_TEMPLATE_PARMS (olddecl)))
1087 return 0;
1089 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1090 types_match = same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres));
1091 else
1092 types_match = decls_match (oldres, newres);
1094 // If the types of the underlying templates match, compare
1095 // the template constraints. The declarations could differ there.
1096 if (types_match)
1097 types_match = equivalently_constrained (olddecl, newdecl);
1099 else
1101 /* Need to check scope for variable declaration (VAR_DECL).
1102 For typedef (TYPE_DECL), scope is ignored. */
1103 if (VAR_P (newdecl)
1104 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1105 /* [dcl.link]
1106 Two declarations for an object with C language linkage
1107 with the same name (ignoring the namespace that qualify
1108 it) that appear in different namespace scopes refer to
1109 the same object. */
1110 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1111 return 0;
1113 if (TREE_TYPE (newdecl) == error_mark_node)
1114 types_match = TREE_TYPE (olddecl) == error_mark_node;
1115 else if (TREE_TYPE (olddecl) == NULL_TREE)
1116 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1117 else if (TREE_TYPE (newdecl) == NULL_TREE)
1118 types_match = 0;
1119 else
1120 types_match = comptypes (TREE_TYPE (newdecl),
1121 TREE_TYPE (olddecl),
1122 COMPARE_REDECLARATION);
1126 return types_match;
1129 /* If NEWDECL is `static' and an `extern' was seen previously,
1130 warn about it. OLDDECL is the previous declaration.
1132 Note that this does not apply to the C++ case of declaring
1133 a variable `extern const' and then later `const'.
1135 Don't complain about built-in functions, since they are beyond
1136 the user's control. */
1138 void
1139 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1141 if (TREE_CODE (newdecl) == TYPE_DECL
1142 || TREE_CODE (newdecl) == TEMPLATE_DECL
1143 || TREE_CODE (newdecl) == CONST_DECL
1144 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1145 return;
1147 /* Don't get confused by static member functions; that's a different
1148 use of `static'. */
1149 if (TREE_CODE (newdecl) == FUNCTION_DECL
1150 && DECL_STATIC_FUNCTION_P (newdecl))
1151 return;
1153 /* If the old declaration was `static', or the new one isn't, then
1154 everything is OK. */
1155 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1156 return;
1158 /* It's OK to declare a builtin function as `static'. */
1159 if (TREE_CODE (olddecl) == FUNCTION_DECL
1160 && DECL_ARTIFICIAL (olddecl))
1161 return;
1163 if (permerror (input_location,
1164 "%qD was declared %<extern%> and later %<static%>", newdecl))
1165 inform (input_location, "previous declaration of %q+D", olddecl);
1168 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1169 function templates. If their exception specifications do not
1170 match, issue a diagnostic. */
1172 static void
1173 check_redeclaration_exception_specification (tree new_decl,
1174 tree old_decl)
1176 tree new_type;
1177 tree old_type;
1178 tree new_exceptions;
1179 tree old_exceptions;
1181 new_type = TREE_TYPE (new_decl);
1182 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1183 old_type = TREE_TYPE (old_decl);
1184 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1186 /* [except.spec]
1188 If any declaration of a function has an exception-specification,
1189 all declarations, including the definition and an explicit
1190 specialization, of that function shall have an
1191 exception-specification with the same set of type-ids. */
1192 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1193 && ! DECL_IS_BUILTIN (old_decl)
1194 && flag_exceptions
1195 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1197 error ("declaration of %qF has a different exception specifier",
1198 new_decl);
1199 error ("from previous declaration %q+F", old_decl);
1203 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1204 Otherwise issue diagnostics. */
1206 static bool
1207 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1209 old_decl = STRIP_TEMPLATE (old_decl);
1210 new_decl = STRIP_TEMPLATE (new_decl);
1211 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1212 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1213 return true;
1214 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1215 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1216 return true;
1217 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1219 if (DECL_BUILT_IN (old_decl))
1221 /* Hide a built-in declaration. */
1222 DECL_DECLARED_CONSTEXPR_P (old_decl)
1223 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1224 return true;
1226 /* 7.1.5 [dcl.constexpr]
1227 Note: An explicit specialization can differ from the template
1228 declaration with respect to the constexpr specifier. */
1229 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1230 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1231 return true;
1233 error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1234 error ("from previous declaration %q+D", old_decl);
1235 return false;
1237 return true;
1240 // If OLDDECL and NEWDECL are concept declarations with the same type
1241 // (i.e., and template parameters), but different requirements,
1242 // emit diagnostics and return true. Otherwise, return false.
1243 static inline bool
1244 check_concept_refinement (tree olddecl, tree newdecl)
1246 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1247 return false;
1249 // TODO: This isn't currently possible, but it will almost certainly
1250 // change with variable templates.
1251 tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1252 tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1253 if (TREE_CODE (d1) != TREE_CODE (d2))
1254 return false;
1256 tree t1 = TREE_TYPE (d1);
1257 tree t2 = TREE_TYPE (d2);
1258 if (TREE_CODE (d1) == FUNCTION_DECL)
1260 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1261 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1262 DECL_TEMPLATE_PARMS (newdecl))
1263 && !equivalently_constrained (olddecl, newdecl))
1265 error ("cannot specialize concept %q#D", olddecl);
1266 return true;
1269 return false;
1273 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1274 && lookup_attribute ("gnu_inline", \
1275 DECL_ATTRIBUTES (fn)))
1277 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1278 If the redeclaration is invalid, a diagnostic is issued, and the
1279 error_mark_node is returned. Otherwise, OLDDECL is returned.
1281 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1282 returned.
1284 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1286 tree
1287 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1289 unsigned olddecl_uid = DECL_UID (olddecl);
1290 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1291 int new_defines_function = 0;
1292 tree new_template_info;
1294 if (newdecl == olddecl)
1295 return olddecl;
1297 types_match = decls_match (newdecl, olddecl);
1299 /* If either the type of the new decl or the type of the old decl is an
1300 error_mark_node, then that implies that we have already issued an
1301 error (earlier) for some bogus type specification, and in that case,
1302 it is rather pointless to harass the user with yet more error message
1303 about the same declaration, so just pretend the types match here. */
1304 if (TREE_TYPE (newdecl) == error_mark_node
1305 || TREE_TYPE (olddecl) == error_mark_node)
1306 return error_mark_node;
1308 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1309 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1311 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1312 && TREE_CODE (olddecl) != TEMPLATE_DECL
1313 && check_raw_literal_operator (olddecl))
1314 error ("literal operator template %q+D conflicts with"
1315 " raw literal operator %qD", newdecl, olddecl);
1316 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1317 && TREE_CODE (olddecl) == TEMPLATE_DECL
1318 && check_raw_literal_operator (newdecl))
1319 error ("raw literal operator %q+D conflicts with"
1320 " literal operator template %qD", newdecl, olddecl);
1323 if (DECL_P (olddecl)
1324 && TREE_CODE (newdecl) == FUNCTION_DECL
1325 && TREE_CODE (olddecl) == FUNCTION_DECL
1326 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1328 if (DECL_DECLARED_INLINE_P (newdecl)
1329 && DECL_UNINLINABLE (newdecl)
1330 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1331 /* Already warned elsewhere. */;
1332 else if (DECL_DECLARED_INLINE_P (olddecl)
1333 && DECL_UNINLINABLE (olddecl)
1334 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1335 /* Already warned. */;
1336 else if (DECL_DECLARED_INLINE_P (newdecl)
1337 && DECL_UNINLINABLE (olddecl)
1338 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1340 if (warning (OPT_Wattributes, "function %q+D redeclared as inline",
1341 newdecl))
1342 inform (DECL_SOURCE_LOCATION (olddecl),
1343 "previous declaration of %qD with attribute noinline",
1344 olddecl);
1346 else if (DECL_DECLARED_INLINE_P (olddecl)
1347 && DECL_UNINLINABLE (newdecl)
1348 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1350 if (warning (OPT_Wattributes, "function %q+D redeclared with "
1351 "attribute noinline", newdecl))
1352 inform (DECL_SOURCE_LOCATION (olddecl),
1353 "previous declaration of %qD was inline",
1354 olddecl);
1358 /* Check for redeclaration and other discrepancies. */
1359 if (TREE_CODE (olddecl) == FUNCTION_DECL
1360 && DECL_ARTIFICIAL (olddecl))
1362 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1363 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1365 /* Avoid warnings redeclaring built-ins which have not been
1366 explicitly declared. */
1367 if (DECL_ANTICIPATED (olddecl))
1368 return NULL_TREE;
1370 /* If you declare a built-in or predefined function name as static,
1371 the old definition is overridden, but optionally warn this was a
1372 bad choice of name. */
1373 if (! TREE_PUBLIC (newdecl))
1375 warning (OPT_Wshadow,
1376 DECL_BUILT_IN (olddecl)
1377 ? G_("shadowing built-in function %q#D")
1378 : G_("shadowing library function %q#D"), olddecl);
1379 /* Discard the old built-in function. */
1380 return NULL_TREE;
1382 /* If the built-in is not ansi, then programs can override
1383 it even globally without an error. */
1384 else if (! DECL_BUILT_IN (olddecl))
1385 warning (0, "library function %q#D redeclared as non-function %q#D",
1386 olddecl, newdecl);
1387 else
1388 error ("declaration of %q#D conflicts with built-in "
1389 "declaration %q#D", newdecl, olddecl);
1390 return NULL_TREE;
1392 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1394 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1395 error_at (DECL_SOURCE_LOCATION (newdecl),
1396 "redeclaration of %<pragma omp declare reduction%>");
1397 inform (DECL_SOURCE_LOCATION (olddecl),
1398 "previous %<pragma omp declare reduction%> declaration");
1399 return error_mark_node;
1401 else if (!types_match)
1403 /* Avoid warnings redeclaring built-ins which have not been
1404 explicitly declared. */
1405 if (DECL_ANTICIPATED (olddecl))
1407 /* Deal with fileptr_type_node. FILE type is not known
1408 at the time we create the builtins. */
1409 tree t1, t2;
1411 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1412 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1413 t1 || t2;
1414 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1415 if (!t1 || !t2)
1416 break;
1417 else if (TREE_VALUE (t2) == fileptr_type_node)
1419 tree t = TREE_VALUE (t1);
1421 if (TYPE_PTR_P (t)
1422 && TYPE_NAME (TREE_TYPE (t))
1423 && TYPE_IDENTIFIER (TREE_TYPE (t))
1424 == get_identifier ("FILE")
1425 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1427 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1429 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1430 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1431 types_match = decls_match (newdecl, olddecl);
1432 if (types_match)
1433 return duplicate_decls (newdecl, olddecl,
1434 newdecl_is_friend);
1435 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1438 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1439 break;
1441 else if ((DECL_EXTERN_C_P (newdecl)
1442 && DECL_EXTERN_C_P (olddecl))
1443 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1444 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1446 /* A near match; override the builtin. */
1448 if (TREE_PUBLIC (newdecl))
1449 warning (0, "new declaration %q#D ambiguates built-in "
1450 "declaration %q#D", newdecl, olddecl);
1451 else
1452 warning (OPT_Wshadow,
1453 DECL_BUILT_IN (olddecl)
1454 ? G_("shadowing built-in function %q#D")
1455 : G_("shadowing library function %q#D"), olddecl);
1457 else
1458 /* Discard the old built-in function. */
1459 return NULL_TREE;
1461 /* Replace the old RTL to avoid problems with inlining. */
1462 COPY_DECL_RTL (newdecl, olddecl);
1464 /* Even if the types match, prefer the new declarations type for
1465 built-ins which have not been explicitly declared, for
1466 exception lists, etc... */
1467 else if (DECL_IS_BUILTIN (olddecl))
1469 tree type = TREE_TYPE (newdecl);
1470 tree attribs = (*targetm.merge_type_attributes)
1471 (TREE_TYPE (olddecl), type);
1473 type = cp_build_type_attribute_variant (type, attribs);
1474 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1477 /* If a function is explicitly declared "throw ()", propagate that to
1478 the corresponding builtin. */
1479 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1480 && DECL_ANTICIPATED (olddecl)
1481 && TREE_NOTHROW (newdecl)
1482 && !TREE_NOTHROW (olddecl))
1484 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1485 tree tmpdecl = builtin_decl_explicit (fncode);
1486 if (tmpdecl && tmpdecl != olddecl && types_match)
1487 TREE_NOTHROW (tmpdecl) = 1;
1490 /* Whether or not the builtin can throw exceptions has no
1491 bearing on this declarator. */
1492 TREE_NOTHROW (olddecl) = 0;
1494 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1496 /* If a builtin function is redeclared as `static', merge
1497 the declarations, but make the original one static. */
1498 DECL_THIS_STATIC (olddecl) = 1;
1499 TREE_PUBLIC (olddecl) = 0;
1501 /* Make the old declaration consistent with the new one so
1502 that all remnants of the builtin-ness of this function
1503 will be banished. */
1504 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1505 COPY_DECL_RTL (newdecl, olddecl);
1508 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1510 /* C++ Standard, 3.3, clause 4:
1511 "[Note: a namespace name or a class template name must be unique
1512 in its declarative region (7.3.2, clause 14). ]" */
1513 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1514 && TREE_CODE (newdecl) != NAMESPACE_DECL
1515 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1516 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1517 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1518 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1520 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1521 && TREE_CODE (newdecl) != TYPE_DECL)
1522 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1523 && TREE_CODE (olddecl) != TYPE_DECL))
1525 /* We do nothing special here, because C++ does such nasty
1526 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1527 get shadowed, and know that if we need to find a TYPE_DECL
1528 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1529 slot of the identifier. */
1530 return NULL_TREE;
1533 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1534 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1535 || (TREE_CODE (olddecl) == FUNCTION_DECL
1536 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1537 return NULL_TREE;
1540 error ("%q#D redeclared as different kind of symbol", newdecl);
1541 if (TREE_CODE (olddecl) == TREE_LIST)
1542 olddecl = TREE_VALUE (olddecl);
1543 inform (DECL_SOURCE_LOCATION (olddecl),
1544 "previous declaration %q#D", olddecl);
1546 return error_mark_node;
1548 else if (!types_match)
1550 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1551 /* These are certainly not duplicate declarations; they're
1552 from different scopes. */
1553 return NULL_TREE;
1555 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1557 /* The name of a class template may not be declared to refer to
1558 any other template, class, function, object, namespace, value,
1559 or type in the same scope. */
1560 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1561 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1563 error ("conflicting declaration of template %q#D", newdecl);
1564 inform (DECL_SOURCE_LOCATION (olddecl),
1565 "previous declaration %q#D", olddecl);
1566 return error_mark_node;
1568 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1569 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1570 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1571 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1572 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1573 DECL_TEMPLATE_PARMS (olddecl))
1574 /* Template functions can be disambiguated by
1575 return type. */
1576 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1577 TREE_TYPE (TREE_TYPE (olddecl)))
1578 // Template functions can also be disambiguated by
1579 // constraints.
1580 && equivalently_constrained (olddecl, newdecl))
1582 error ("ambiguating new declaration %q#D", newdecl);
1583 inform (DECL_SOURCE_LOCATION (olddecl),
1584 "old declaration %q#D", olddecl);
1586 else if (check_concept_refinement (olddecl, newdecl))
1588 return error_mark_node;
1590 return NULL_TREE;
1592 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1594 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1596 error ("conflicting declaration of C function %q#D",
1597 newdecl);
1598 inform (DECL_SOURCE_LOCATION (olddecl),
1599 "previous declaration %q#D", olddecl);
1600 return NULL_TREE;
1602 /* For function versions, params and types match, but they
1603 are not ambiguous. */
1604 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1605 && !DECL_FUNCTION_VERSIONED (olddecl))
1606 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1607 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1609 error ("ambiguating new declaration of %q#D", newdecl);
1610 inform (DECL_SOURCE_LOCATION (olddecl),
1611 "old declaration %q#D", olddecl);
1612 return error_mark_node;
1614 else
1615 return NULL_TREE;
1617 else
1619 error ("conflicting declaration %q#D", newdecl);
1620 inform (DECL_SOURCE_LOCATION (olddecl),
1621 "previous declaration as %q#D", olddecl);
1622 return error_mark_node;
1625 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1626 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1627 && (!DECL_TEMPLATE_INFO (newdecl)
1628 || (DECL_TI_TEMPLATE (newdecl)
1629 != DECL_TI_TEMPLATE (olddecl))))
1630 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1631 && (!DECL_TEMPLATE_INFO (olddecl)
1632 || (DECL_TI_TEMPLATE (olddecl)
1633 != DECL_TI_TEMPLATE (newdecl))))))
1634 /* It's OK to have a template specialization and a non-template
1635 with the same type, or to have specializations of two
1636 different templates with the same type. Note that if one is a
1637 specialization, and the other is an instantiation of the same
1638 template, that we do not exit at this point. That situation
1639 can occur if we instantiate a template class, and then
1640 specialize one of its methods. This situation is valid, but
1641 the declarations must be merged in the usual way. */
1642 return NULL_TREE;
1643 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1644 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1645 && !DECL_USE_TEMPLATE (newdecl))
1646 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1647 && !DECL_USE_TEMPLATE (olddecl))))
1648 /* One of the declarations is a template instantiation, and the
1649 other is not a template at all. That's OK. */
1650 return NULL_TREE;
1651 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1653 /* In [namespace.alias] we have:
1655 In a declarative region, a namespace-alias-definition can be
1656 used to redefine a namespace-alias declared in that declarative
1657 region to refer only to the namespace to which it already
1658 refers.
1660 Therefore, if we encounter a second alias directive for the same
1661 alias, we can just ignore the second directive. */
1662 if (DECL_NAMESPACE_ALIAS (newdecl)
1663 && (DECL_NAMESPACE_ALIAS (newdecl)
1664 == DECL_NAMESPACE_ALIAS (olddecl)))
1665 return olddecl;
1666 /* [namespace.alias]
1668 A namespace-name or namespace-alias shall not be declared as
1669 the name of any other entity in the same declarative region.
1670 A namespace-name defined at global scope shall not be
1671 declared as the name of any other entity in any global scope
1672 of the program. */
1673 error ("conflicting declaration of namespace %qD", newdecl);
1674 inform (DECL_SOURCE_LOCATION (olddecl),
1675 "previous declaration of namespace %qD here", olddecl);
1676 return error_mark_node;
1678 else
1680 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1681 if (errmsg)
1683 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1684 if (DECL_NAME (olddecl) != NULL_TREE)
1685 inform (input_location,
1686 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1687 ? G_("%q+#D previously defined here")
1688 : G_("%q+#D previously declared here"), olddecl);
1689 return error_mark_node;
1691 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1692 && DECL_INITIAL (olddecl) != NULL_TREE
1693 && !prototype_p (TREE_TYPE (olddecl))
1694 && prototype_p (TREE_TYPE (newdecl)))
1696 /* Prototype decl follows defn w/o prototype. */
1697 warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1698 "prototype specified for %q#D", newdecl);
1699 inform (DECL_SOURCE_LOCATION (olddecl),
1700 "previous non-prototype definition here");
1702 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1703 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1705 /* [dcl.link]
1706 If two declarations of the same function or object
1707 specify different linkage-specifications ..., the program
1708 is ill-formed.... Except for functions with C++ linkage,
1709 a function declaration without a linkage specification
1710 shall not precede the first linkage specification for
1711 that function. A function can be declared without a
1712 linkage specification after an explicit linkage
1713 specification has been seen; the linkage explicitly
1714 specified in the earlier declaration is not affected by
1715 such a function declaration.
1717 DR 563 raises the question why the restrictions on
1718 functions should not also apply to objects. Older
1719 versions of G++ silently ignore the linkage-specification
1720 for this example:
1722 namespace N {
1723 extern int i;
1724 extern "C" int i;
1727 which is clearly wrong. Therefore, we now treat objects
1728 like functions. */
1729 if (current_lang_depth () == 0)
1731 /* There is no explicit linkage-specification, so we use
1732 the linkage from the previous declaration. */
1733 if (!DECL_LANG_SPECIFIC (newdecl))
1734 retrofit_lang_decl (newdecl);
1735 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1737 else
1739 error ("conflicting declaration of %q#D with %qL linkage",
1740 newdecl, DECL_LANGUAGE (newdecl));
1741 inform (DECL_SOURCE_LOCATION (olddecl),
1742 "previous declaration with %qL linkage",
1743 DECL_LANGUAGE (olddecl));
1747 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1749 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1751 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1752 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1753 int i = 1;
1755 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1756 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1758 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE
1759 && CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (newdecl)))
1761 /* C++11 8.3.6/6.
1762 Default arguments for a member function of a class template
1763 shall be specified on the initial declaration of the member
1764 function within the class template. */
1765 for (; t2 && t2 != void_list_node; t2 = TREE_CHAIN (t2))
1766 if (TREE_PURPOSE (t2))
1768 permerror (input_location,
1769 "redeclaration of %q#D may not have default "
1770 "arguments", newdecl);
1771 break;
1774 else
1776 for (; t1 && t1 != void_list_node;
1777 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1778 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1780 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1781 TREE_PURPOSE (t2)))
1783 if (permerror (input_location,
1784 "default argument given for parameter "
1785 "%d of %q#D", i, newdecl))
1786 permerror (DECL_SOURCE_LOCATION (olddecl),
1787 "previous specification in %q#D here",
1788 olddecl);
1790 else
1792 error ("default argument given for parameter %d "
1793 "of %q#D", i, newdecl);
1794 inform (DECL_SOURCE_LOCATION (olddecl),
1795 "previous specification in %q#D here",
1796 olddecl);
1803 /* Do not merge an implicit typedef with an explicit one. In:
1805 class A;
1807 typedef class A A __attribute__ ((foo));
1809 the attribute should apply only to the typedef. */
1810 if (TREE_CODE (olddecl) == TYPE_DECL
1811 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1812 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1813 return NULL_TREE;
1815 /* If new decl is `static' and an `extern' was seen previously,
1816 warn about it. */
1817 warn_extern_redeclared_static (newdecl, olddecl);
1819 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1820 return error_mark_node;
1822 /* We have committed to returning 1 at this point. */
1823 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1825 /* Now that functions must hold information normally held
1826 by field decls, there is extra work to do so that
1827 declaration information does not get destroyed during
1828 definition. */
1829 if (DECL_VINDEX (olddecl))
1830 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1831 if (DECL_CONTEXT (olddecl))
1832 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1833 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1834 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1835 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1836 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1837 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1838 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1839 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1840 SET_OVERLOADED_OPERATOR_CODE
1841 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1842 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1844 /* Optionally warn about more than one declaration for the same
1845 name, but don't warn about a function declaration followed by a
1846 definition. */
1847 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1848 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1849 /* Don't warn about extern decl followed by definition. */
1850 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1851 /* Don't warn about friends, let add_friend take care of it. */
1852 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1853 /* Don't warn about declaration followed by specialization. */
1854 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1855 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1857 if (warning (OPT_Wredundant_decls,
1858 "redundant redeclaration of %qD in same scope",
1859 newdecl))
1860 inform (DECL_SOURCE_LOCATION (olddecl),
1861 "previous declaration of %qD", olddecl);
1864 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1865 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1867 if (DECL_DELETED_FN (newdecl))
1869 error ("deleted definition of %qD", newdecl);
1870 inform (DECL_SOURCE_LOCATION (olddecl),
1871 "previous declaration of %qD", olddecl);
1873 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1877 /* Deal with C++: must preserve virtual function table size. */
1878 if (TREE_CODE (olddecl) == TYPE_DECL)
1880 tree newtype = TREE_TYPE (newdecl);
1881 tree oldtype = TREE_TYPE (olddecl);
1883 if (newtype != error_mark_node && oldtype != error_mark_node
1884 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1885 CLASSTYPE_FRIEND_CLASSES (newtype)
1886 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1888 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1891 /* Copy all the DECL_... slots specified in the new decl
1892 except for any that we copy here from the old type. */
1893 DECL_ATTRIBUTES (newdecl)
1894 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1896 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1898 tree old_result;
1899 tree new_result;
1900 old_result = DECL_TEMPLATE_RESULT (olddecl);
1901 new_result = DECL_TEMPLATE_RESULT (newdecl);
1902 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1903 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1904 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1905 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1907 DECL_ATTRIBUTES (old_result)
1908 = (*targetm.merge_decl_attributes) (old_result, new_result);
1910 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1912 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1913 && DECL_INITIAL (new_result))
1915 if (DECL_INITIAL (old_result))
1916 DECL_UNINLINABLE (old_result) = 1;
1917 else
1918 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1919 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1920 DECL_NOT_REALLY_EXTERN (old_result)
1921 = DECL_NOT_REALLY_EXTERN (new_result);
1922 DECL_INTERFACE_KNOWN (old_result)
1923 = DECL_INTERFACE_KNOWN (new_result);
1924 DECL_DECLARED_INLINE_P (old_result)
1925 = DECL_DECLARED_INLINE_P (new_result);
1926 DECL_DISREGARD_INLINE_LIMITS (old_result)
1927 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1930 else
1932 DECL_DECLARED_INLINE_P (old_result)
1933 |= DECL_DECLARED_INLINE_P (new_result);
1934 DECL_DISREGARD_INLINE_LIMITS (old_result)
1935 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1936 check_redeclaration_exception_specification (newdecl, olddecl);
1940 /* If the new declaration is a definition, update the file and
1941 line information on the declaration, and also make
1942 the old declaration the same definition. */
1943 if (DECL_INITIAL (new_result) != NULL_TREE)
1945 DECL_SOURCE_LOCATION (olddecl)
1946 = DECL_SOURCE_LOCATION (old_result)
1947 = DECL_SOURCE_LOCATION (newdecl);
1948 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1949 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1951 tree parm;
1952 DECL_ARGUMENTS (old_result)
1953 = DECL_ARGUMENTS (new_result);
1954 for (parm = DECL_ARGUMENTS (old_result); parm;
1955 parm = DECL_CHAIN (parm))
1956 DECL_CONTEXT (parm) = old_result;
1960 return olddecl;
1963 if (types_match)
1965 /* Automatically handles default parameters. */
1966 tree oldtype = TREE_TYPE (olddecl);
1967 tree newtype;
1969 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1970 maybe_instantiate_noexcept (olddecl);
1972 /* For typedefs use the old type, as the new type's DECL_NAME points
1973 at newdecl, which will be ggc_freed. */
1974 if (TREE_CODE (newdecl) == TYPE_DECL)
1975 newtype = oldtype;
1976 else
1977 /* Merge the data types specified in the two decls. */
1978 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1980 if (VAR_P (newdecl))
1982 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1983 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1984 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1985 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1986 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1987 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1989 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1990 if (DECL_LANG_SPECIFIC (olddecl)
1991 && CP_DECL_THREADPRIVATE_P (olddecl))
1993 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1994 if (!DECL_LANG_SPECIFIC (newdecl))
1995 retrofit_lang_decl (newdecl);
1997 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1998 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2002 /* Do this after calling `merge_types' so that default
2003 parameters don't confuse us. */
2004 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2005 check_redeclaration_exception_specification (newdecl, olddecl);
2006 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2008 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2009 check_default_args (newdecl);
2011 /* Lay the type out, unless already done. */
2012 if (! same_type_p (newtype, oldtype)
2013 && TREE_TYPE (newdecl) != error_mark_node
2014 && !(processing_template_decl && uses_template_parms (newdecl)))
2015 layout_type (TREE_TYPE (newdecl));
2017 if ((VAR_P (newdecl)
2018 || TREE_CODE (newdecl) == PARM_DECL
2019 || TREE_CODE (newdecl) == RESULT_DECL
2020 || TREE_CODE (newdecl) == FIELD_DECL
2021 || TREE_CODE (newdecl) == TYPE_DECL)
2022 && !(processing_template_decl && uses_template_parms (newdecl)))
2023 layout_decl (newdecl, 0);
2025 /* Merge the type qualifiers. */
2026 if (TREE_READONLY (newdecl))
2027 TREE_READONLY (olddecl) = 1;
2028 if (TREE_THIS_VOLATILE (newdecl))
2029 TREE_THIS_VOLATILE (olddecl) = 1;
2030 if (TREE_NOTHROW (newdecl))
2031 TREE_NOTHROW (olddecl) = 1;
2033 /* Merge deprecatedness. */
2034 if (TREE_DEPRECATED (newdecl))
2035 TREE_DEPRECATED (olddecl) = 1;
2037 /* Preserve function specific target and optimization options */
2038 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2040 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2041 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2042 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2043 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2045 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2046 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2047 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2048 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2051 /* Merge the initialization information. */
2052 if (DECL_INITIAL (newdecl) == NULL_TREE
2053 && DECL_INITIAL (olddecl) != NULL_TREE)
2055 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2056 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2057 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2059 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2060 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2064 /* Merge the section attribute.
2065 We want to issue an error if the sections conflict but that must be
2066 done later in decl_attributes since we are called before attributes
2067 are assigned. */
2068 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
2069 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
2071 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2073 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2074 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2075 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2076 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2077 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2078 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2079 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2080 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2081 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2082 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2083 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2084 /* Keep the old RTL. */
2085 COPY_DECL_RTL (olddecl, newdecl);
2087 else if (VAR_P (newdecl)
2088 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2090 /* Keep the old RTL. We cannot keep the old RTL if the old
2091 declaration was for an incomplete object and the new
2092 declaration is not since many attributes of the RTL will
2093 change. */
2094 COPY_DECL_RTL (olddecl, newdecl);
2097 /* If cannot merge, then use the new type and qualifiers,
2098 and don't preserve the old rtl. */
2099 else
2101 /* Clean out any memory we had of the old declaration. */
2102 tree oldstatic = value_member (olddecl, static_aggregates);
2103 if (oldstatic)
2104 TREE_VALUE (oldstatic) = error_mark_node;
2106 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2107 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2108 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2109 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2112 /* Merge the storage class information. */
2113 merge_weak (newdecl, olddecl);
2115 if (DECL_ONE_ONLY (olddecl))
2116 DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
2118 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2119 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2120 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2121 if (! DECL_EXTERNAL (olddecl))
2122 DECL_EXTERNAL (newdecl) = 0;
2124 new_template_info = NULL_TREE;
2125 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2127 bool new_redefines_gnu_inline = false;
2129 if (new_defines_function
2130 && ((DECL_INTERFACE_KNOWN (olddecl)
2131 && TREE_CODE (olddecl) == FUNCTION_DECL)
2132 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2133 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2134 == FUNCTION_DECL))))
2136 tree fn = olddecl;
2138 if (TREE_CODE (fn) == TEMPLATE_DECL)
2139 fn = DECL_TEMPLATE_RESULT (olddecl);
2141 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2144 if (!new_redefines_gnu_inline)
2146 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2147 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2148 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2150 DECL_TEMPLATE_INSTANTIATED (newdecl)
2151 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2152 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2154 /* If the OLDDECL is an instantiation and/or specialization,
2155 then the NEWDECL must be too. But, it may not yet be marked
2156 as such if the caller has created NEWDECL, but has not yet
2157 figured out that it is a redeclaration. */
2158 if (!DECL_USE_TEMPLATE (newdecl))
2159 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2161 /* Don't really know how much of the language-specific
2162 values we should copy from old to new. */
2163 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2164 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2165 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2166 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2168 if (LANG_DECL_HAS_MIN (newdecl))
2170 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2171 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2172 if (DECL_TEMPLATE_INFO (newdecl))
2173 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2174 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2176 /* Only functions have these fields. */
2177 if (DECL_DECLARES_FUNCTION_P (newdecl))
2179 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2180 olddecl_friend = DECL_FRIEND_P (olddecl);
2181 hidden_friend = (DECL_ANTICIPATED (olddecl)
2182 && DECL_HIDDEN_FRIEND_P (olddecl)
2183 && newdecl_is_friend);
2184 DECL_BEFRIENDING_CLASSES (newdecl)
2185 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2186 DECL_BEFRIENDING_CLASSES (olddecl));
2187 /* DECL_THUNKS is only valid for virtual functions,
2188 otherwise it is a DECL_FRIEND_CONTEXT. */
2189 if (DECL_VIRTUAL_P (newdecl))
2190 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2192 /* Only variables have this field. */
2193 else if (VAR_P (newdecl)
2194 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2195 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2198 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2200 tree parm;
2202 /* Merge parameter attributes. */
2203 tree oldarg, newarg;
2204 for (oldarg = DECL_ARGUMENTS(olddecl),
2205 newarg = DECL_ARGUMENTS(newdecl);
2206 oldarg && newarg;
2207 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2208 DECL_ATTRIBUTES (newarg)
2209 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2210 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2213 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2214 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2216 /* If newdecl is not a specialization, then it is not a
2217 template-related function at all. And that means that we
2218 should have exited above, returning 0. */
2219 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2221 if (DECL_ODR_USED (olddecl))
2222 /* From [temp.expl.spec]:
2224 If a template, a member template or the member of a class
2225 template is explicitly specialized then that
2226 specialization shall be declared before the first use of
2227 that specialization that would cause an implicit
2228 instantiation to take place, in every translation unit in
2229 which such a use occurs. */
2230 error ("explicit specialization of %qD after first use",
2231 olddecl);
2233 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2235 /* Don't propagate visibility from the template to the
2236 specialization here. We'll do that in determine_visibility if
2237 appropriate. */
2238 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2240 /* [temp.expl.spec/14] We don't inline explicit specialization
2241 just because the primary template says so. */
2243 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2244 the always_inline attribute. */
2245 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2246 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2248 if (DECL_DECLARED_INLINE_P (newdecl))
2249 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2250 else
2251 DECL_ATTRIBUTES (newdecl)
2252 = remove_attribute ("always_inline",
2253 DECL_ATTRIBUTES (newdecl));
2256 else if (new_defines_function && DECL_INITIAL (olddecl))
2258 /* Never inline re-defined extern inline functions.
2259 FIXME: this could be better handled by keeping both
2260 function as separate declarations. */
2261 DECL_UNINLINABLE (newdecl) = 1;
2263 else
2265 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2266 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2268 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2270 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2271 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2273 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2274 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2275 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2276 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2279 /* Preserve abstractness on cloned [cd]tors. */
2280 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2282 /* Update newdecl's parms to point at olddecl. */
2283 for (parm = DECL_ARGUMENTS (newdecl); parm;
2284 parm = DECL_CHAIN (parm))
2285 DECL_CONTEXT (parm) = olddecl;
2287 if (! types_match)
2289 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2290 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2291 COPY_DECL_RTL (newdecl, olddecl);
2293 if (! types_match || new_defines_function)
2295 /* These need to be copied so that the names are available.
2296 Note that if the types do match, we'll preserve inline
2297 info and other bits, but if not, we won't. */
2298 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2299 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2301 /* If redeclaring a builtin function, it stays built in
2302 if newdecl is a gnu_inline definition, or if newdecl is just
2303 a declaration. */
2304 if (DECL_BUILT_IN (olddecl)
2305 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2307 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2308 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2309 /* If we're keeping the built-in definition, keep the rtl,
2310 regardless of declaration matches. */
2311 COPY_DECL_RTL (olddecl, newdecl);
2312 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2314 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2315 switch (fncode)
2317 /* If a compatible prototype of these builtin functions
2318 is seen, assume the runtime implements it with the
2319 expected semantics. */
2320 case BUILT_IN_STPCPY:
2321 if (builtin_decl_explicit_p (fncode))
2322 set_builtin_decl_implicit_p (fncode, true);
2323 break;
2324 default:
2325 break;
2329 if (new_defines_function)
2330 /* If defining a function declared with other language
2331 linkage, use the previously declared language linkage. */
2332 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2333 else if (types_match)
2335 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2336 /* Don't clear out the arguments if we're just redeclaring a
2337 function. */
2338 if (DECL_ARGUMENTS (olddecl))
2339 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2342 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2343 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2345 /* Now preserve various other info from the definition. */
2346 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2347 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2348 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2349 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2351 /* Warn about conflicting visibility specifications. */
2352 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2353 && DECL_VISIBILITY_SPECIFIED (newdecl)
2354 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2356 warning_at (input_location, OPT_Wattributes,
2357 "%q+D: visibility attribute ignored because it", newdecl);
2358 warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2359 "conflicts with previous declaration here");
2361 /* Choose the declaration which specified visibility. */
2362 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2364 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2365 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2367 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2368 so keep this behavior. */
2369 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2371 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2372 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2374 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2375 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2377 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2378 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2380 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2381 if (TREE_CODE (newdecl) == FIELD_DECL)
2382 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2384 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2385 with that from NEWDECL below. */
2386 if (DECL_LANG_SPECIFIC (olddecl))
2388 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2389 != DECL_LANG_SPECIFIC (newdecl));
2390 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2393 /* Merge the USED information. */
2394 if (TREE_USED (olddecl))
2395 TREE_USED (newdecl) = 1;
2396 else if (TREE_USED (newdecl))
2397 TREE_USED (olddecl) = 1;
2398 if (VAR_P (newdecl))
2400 if (DECL_READ_P (olddecl))
2401 DECL_READ_P (newdecl) = 1;
2402 else if (DECL_READ_P (newdecl))
2403 DECL_READ_P (olddecl) = 1;
2405 if (DECL_PRESERVE_P (olddecl))
2406 DECL_PRESERVE_P (newdecl) = 1;
2407 else if (DECL_PRESERVE_P (newdecl))
2408 DECL_PRESERVE_P (olddecl) = 1;
2410 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2411 to olddecl and deleted. */
2412 if (TREE_CODE (newdecl) == FUNCTION_DECL
2413 && DECL_FUNCTION_VERSIONED (olddecl))
2415 /* Set the flag for newdecl so that it gets copied to olddecl. */
2416 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2417 /* newdecl will be purged after copying to olddecl and is no longer
2418 a version. */
2419 delete_function_version (newdecl);
2422 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2424 int function_size;
2426 function_size = sizeof (struct tree_decl_common);
2428 memcpy ((char *) olddecl + sizeof (struct tree_common),
2429 (char *) newdecl + sizeof (struct tree_common),
2430 function_size - sizeof (struct tree_common));
2432 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2433 (char *) newdecl + sizeof (struct tree_decl_common),
2434 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2435 if (new_template_info)
2436 /* If newdecl is a template instantiation, it is possible that
2437 the following sequence of events has occurred:
2439 o A friend function was declared in a class template. The
2440 class template was instantiated.
2442 o The instantiation of the friend declaration was
2443 recorded on the instantiation list, and is newdecl.
2445 o Later, however, instantiate_class_template called pushdecl
2446 on the newdecl to perform name injection. But, pushdecl in
2447 turn called duplicate_decls when it discovered that another
2448 declaration of a global function with the same name already
2449 existed.
2451 o Here, in duplicate_decls, we decided to clobber newdecl.
2453 If we're going to do that, we'd better make sure that
2454 olddecl, and not newdecl, is on the list of
2455 instantiations so that if we try to do the instantiation
2456 again we won't get the clobbered declaration. */
2457 reregister_specialization (newdecl,
2458 new_template_info,
2459 olddecl);
2461 else
2463 size_t size = tree_code_size (TREE_CODE (olddecl));
2464 memcpy ((char *) olddecl + sizeof (struct tree_common),
2465 (char *) newdecl + sizeof (struct tree_common),
2466 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2467 switch (TREE_CODE (olddecl))
2469 case LABEL_DECL:
2470 case VAR_DECL:
2471 case RESULT_DECL:
2472 case PARM_DECL:
2473 case FIELD_DECL:
2474 case TYPE_DECL:
2475 case CONST_DECL:
2477 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2478 (char *) newdecl + sizeof (struct tree_decl_common),
2479 size - sizeof (struct tree_decl_common)
2480 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2482 break;
2483 default:
2484 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2485 (char *) newdecl + sizeof (struct tree_decl_common),
2486 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2487 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2488 break;
2491 DECL_UID (olddecl) = olddecl_uid;
2492 if (olddecl_friend)
2493 DECL_FRIEND_P (olddecl) = 1;
2494 if (hidden_friend)
2496 DECL_ANTICIPATED (olddecl) = 1;
2497 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2500 /* NEWDECL contains the merged attribute lists.
2501 Update OLDDECL to be the same. */
2502 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2504 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2505 so that encode_section_info has a chance to look at the new decl
2506 flags and attributes. */
2507 if (DECL_RTL_SET_P (olddecl)
2508 && (TREE_CODE (olddecl) == FUNCTION_DECL
2509 || (VAR_P (olddecl)
2510 && TREE_STATIC (olddecl))))
2511 make_decl_rtl (olddecl);
2513 /* The NEWDECL will no longer be needed. Because every out-of-class
2514 declaration of a member results in a call to duplicate_decls,
2515 freeing these nodes represents in a significant savings. */
2516 ggc_free (newdecl);
2518 return olddecl;
2521 /* Return zero if the declaration NEWDECL is valid
2522 when the declaration OLDDECL (assumed to be for the same name)
2523 has already been seen.
2524 Otherwise return an error message format string with a %s
2525 where the identifier should go. */
2527 static const char *
2528 redeclaration_error_message (tree newdecl, tree olddecl)
2530 if (TREE_CODE (newdecl) == TYPE_DECL)
2532 /* Because C++ can put things into name space for free,
2533 constructs like "typedef struct foo { ... } foo"
2534 would look like an erroneous redeclaration. */
2535 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2536 return NULL;
2537 else
2538 return G_("redefinition of %q#D");
2540 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2542 /* If this is a pure function, its olddecl will actually be
2543 the original initialization to `0' (which we force to call
2544 abort()). Don't complain about redefinition in this case. */
2545 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2546 && DECL_INITIAL (olddecl) == NULL_TREE)
2547 return NULL;
2549 /* If both functions come from different namespaces, this is not
2550 a redeclaration - this is a conflict with a used function. */
2551 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2552 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2553 && ! decls_match (olddecl, newdecl))
2554 return G_("%qD conflicts with used function");
2556 /* We'll complain about linkage mismatches in
2557 warn_extern_redeclared_static. */
2559 /* Defining the same name twice is no good. */
2560 if (DECL_INITIAL (olddecl) != NULL_TREE
2561 && DECL_INITIAL (newdecl) != NULL_TREE)
2563 if (DECL_NAME (olddecl) == NULL_TREE)
2564 return G_("%q#D not declared in class");
2565 else if (!GNU_INLINE_P (olddecl)
2566 || GNU_INLINE_P (newdecl))
2567 return G_("redefinition of %q#D");
2570 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2572 bool olda = GNU_INLINE_P (olddecl);
2573 bool newa = GNU_INLINE_P (newdecl);
2575 if (olda != newa)
2577 if (newa)
2578 return G_("%q+D redeclared inline with "
2579 "%<gnu_inline%> attribute");
2580 else
2581 return G_("%q+D redeclared inline without "
2582 "%<gnu_inline%> attribute");
2586 check_abi_tag_redeclaration
2587 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2588 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2590 return NULL;
2592 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2594 tree nt, ot;
2596 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2598 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2599 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2600 return G_("redefinition of %q#D");
2601 return NULL;
2604 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2605 || (DECL_TEMPLATE_RESULT (newdecl)
2606 == DECL_TEMPLATE_RESULT (olddecl)))
2607 return NULL;
2609 nt = DECL_TEMPLATE_RESULT (newdecl);
2610 if (DECL_TEMPLATE_INFO (nt))
2611 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2612 ot = DECL_TEMPLATE_RESULT (olddecl);
2613 if (DECL_TEMPLATE_INFO (ot))
2614 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2615 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2616 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2617 return G_("redefinition of %q#D");
2619 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2621 bool olda = GNU_INLINE_P (ot);
2622 bool newa = GNU_INLINE_P (nt);
2624 if (olda != newa)
2626 if (newa)
2627 return G_("%q+D redeclared inline with "
2628 "%<gnu_inline%> attribute");
2629 else
2630 return G_("%q+D redeclared inline without "
2631 "%<gnu_inline%> attribute");
2635 /* Core issue #226 (C++0x):
2637 If a friend function template declaration specifies a
2638 default template-argument, that declaration shall be a
2639 definition and shall be the only declaration of the
2640 function template in the translation unit. */
2641 if ((cxx_dialect != cxx98)
2642 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2643 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2644 /*is_primary=*/true,
2645 /*is_partial=*/false,
2646 /*is_friend_decl=*/2))
2647 return G_("redeclaration of friend %q#D "
2648 "may not have default template arguments");
2650 return NULL;
2652 else if (VAR_P (newdecl)
2653 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2654 && (! DECL_LANG_SPECIFIC (olddecl)
2655 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2656 || DECL_THREAD_LOCAL_P (newdecl)))
2658 /* Only variables can be thread-local, and all declarations must
2659 agree on this property. */
2660 if (DECL_THREAD_LOCAL_P (newdecl))
2661 return G_("thread-local declaration of %q#D follows "
2662 "non-thread-local declaration");
2663 else
2664 return G_("non-thread-local declaration of %q#D follows "
2665 "thread-local declaration");
2667 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2669 /* The objects have been declared at namespace scope. If either
2670 is a member of an anonymous union, then this is an invalid
2671 redeclaration. For example:
2673 int i;
2674 union { int i; };
2676 is invalid. */
2677 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2678 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2679 return G_("redeclaration of %q#D");
2680 /* If at least one declaration is a reference, there is no
2681 conflict. For example:
2683 int i = 3;
2684 extern int i;
2686 is valid. */
2687 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2688 return NULL;
2689 /* Reject two definitions. */
2690 return G_("redefinition of %q#D");
2692 else
2694 /* Objects declared with block scope: */
2695 /* Reject two definitions, and reject a definition
2696 together with an external reference. */
2697 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2698 return G_("redeclaration of %q#D");
2699 return NULL;
2703 /* Hash and equality functions for the named_label table. */
2705 static hashval_t
2706 named_label_entry_hash (const void *data)
2708 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2709 return DECL_UID (ent->label_decl);
2712 static int
2713 named_label_entry_eq (const void *a, const void *b)
2715 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2716 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2717 return ent_a->label_decl == ent_b->label_decl;
2720 /* Create a new label, named ID. */
2722 static tree
2723 make_label_decl (tree id, int local_p)
2725 struct named_label_entry *ent;
2726 void **slot;
2727 tree decl;
2729 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2731 DECL_CONTEXT (decl) = current_function_decl;
2732 DECL_MODE (decl) = VOIDmode;
2733 C_DECLARED_LABEL_FLAG (decl) = local_p;
2735 /* Say where one reference is to the label, for the sake of the
2736 error if it is not defined. */
2737 DECL_SOURCE_LOCATION (decl) = input_location;
2739 /* Record the fact that this identifier is bound to this label. */
2740 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2742 /* Create the label htab for the function on demand. */
2743 if (!named_labels)
2744 named_labels = htab_create_ggc (13, named_label_entry_hash,
2745 named_label_entry_eq, NULL);
2747 /* Record this label on the list of labels used in this function.
2748 We do this before calling make_label_decl so that we get the
2749 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2750 ent = ggc_alloc_cleared_named_label_entry ();
2751 ent->label_decl = decl;
2753 slot = htab_find_slot (named_labels, ent, INSERT);
2754 gcc_assert (*slot == NULL);
2755 *slot = ent;
2757 return decl;
2760 /* Look for a label named ID in the current function. If one cannot
2761 be found, create one. (We keep track of used, but undefined,
2762 labels, and complain about them at the end of a function.) */
2764 static tree
2765 lookup_label_1 (tree id)
2767 tree decl;
2769 /* You can't use labels at global scope. */
2770 if (current_function_decl == NULL_TREE)
2772 error ("label %qE referenced outside of any function", id);
2773 return NULL_TREE;
2776 /* See if we've already got this label. */
2777 decl = IDENTIFIER_LABEL_VALUE (id);
2778 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2779 return decl;
2781 decl = make_label_decl (id, /*local_p=*/0);
2782 return decl;
2785 /* Wrapper for lookup_label_1. */
2787 tree
2788 lookup_label (tree id)
2790 tree ret;
2791 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2792 ret = lookup_label_1 (id);
2793 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2794 return ret;
2797 /* Declare a local label named ID. */
2799 tree
2800 declare_local_label (tree id)
2802 tree decl;
2803 cp_label_binding bind;
2805 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2806 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2807 bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
2809 decl = make_label_decl (id, /*local_p=*/1);
2810 bind.label = decl;
2811 vec_safe_push (current_binding_level->shadowed_labels, bind);
2813 return decl;
2816 /* Returns nonzero if it is ill-formed to jump past the declaration of
2817 DECL. Returns 2 if it's also a real problem. */
2819 static int
2820 decl_jump_unsafe (tree decl)
2822 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2823 with automatic storage duration is not in scope to a point where it is
2824 in scope is ill-formed unless the variable has scalar type, class type
2825 with a trivial default constructor and a trivial destructor, a
2826 cv-qualified version of one of these types, or an array of one of the
2827 preceding types and is declared without an initializer (8.5). */
2828 tree type = TREE_TYPE (decl);
2830 if (!VAR_P (decl) || TREE_STATIC (decl)
2831 || type == error_mark_node)
2832 return 0;
2834 type = strip_array_types (type);
2836 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2837 return 2;
2839 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2840 return 1;
2842 return 0;
2845 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2847 static void
2848 identify_goto (tree decl, const location_t *locus)
2850 if (decl)
2851 permerror (input_location, "jump to label %qD", decl);
2852 else
2853 permerror (input_location, "jump to case label");
2854 if (locus)
2855 permerror (*locus, " from here");
2858 /* Check that a single previously seen jump to a newly defined label
2859 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2860 the jump context; NAMES are the names in scope in LEVEL at the jump
2861 context; LOCUS is the source position of the jump or 0. Returns
2862 true if all is well. */
2864 static bool
2865 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2866 bool exited_omp, const location_t *locus)
2868 cp_binding_level *b;
2869 bool identified = false, saw_eh = false, saw_omp = false;
2871 if (exited_omp)
2873 identify_goto (decl, locus);
2874 error (" exits OpenMP structured block");
2875 identified = saw_omp = true;
2878 for (b = current_binding_level; b ; b = b->level_chain)
2880 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2882 for (new_decls = b->names; new_decls != old_decls;
2883 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2884 : TREE_CHAIN (new_decls)))
2886 int problem = decl_jump_unsafe (new_decls);
2887 if (! problem)
2888 continue;
2890 if (!identified)
2892 identify_goto (decl, locus);
2893 identified = true;
2895 if (problem > 1)
2896 error (" crosses initialization of %q+#D", new_decls);
2897 else
2898 permerror (input_location, " enters scope of %q+#D which has "
2899 "non-trivial destructor", new_decls);
2902 if (b == level)
2903 break;
2904 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2906 if (!identified)
2908 identify_goto (decl, locus);
2909 identified = true;
2911 if (b->kind == sk_try)
2912 error (" enters try block");
2913 else
2914 error (" enters catch block");
2915 saw_eh = true;
2917 if (b->kind == sk_omp && !saw_omp)
2919 if (!identified)
2921 identify_goto (decl, locus);
2922 identified = true;
2924 error (" enters OpenMP structured block");
2925 saw_omp = true;
2929 return !identified;
2932 static void
2933 check_previous_goto (tree decl, struct named_label_use_entry *use)
2935 check_previous_goto_1 (decl, use->binding_level,
2936 use->names_in_scope, use->in_omp_scope,
2937 &use->o_goto_locus);
2940 static bool
2941 check_switch_goto (cp_binding_level* level)
2943 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2946 /* Check that a new jump to a label DECL is OK. Called by
2947 finish_goto_stmt. */
2949 void
2950 check_goto (tree decl)
2952 struct named_label_entry *ent, dummy;
2953 bool saw_catch = false, identified = false;
2954 tree bad;
2955 unsigned ix;
2957 /* We can't know where a computed goto is jumping.
2958 So we assume that it's OK. */
2959 if (TREE_CODE (decl) != LABEL_DECL)
2960 return;
2962 /* We didn't record any information about this label when we created it,
2963 and there's not much point since it's trivial to analyze as a return. */
2964 if (decl == cdtor_label)
2965 return;
2967 dummy.label_decl = decl;
2968 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2969 gcc_assert (ent != NULL);
2971 /* If the label hasn't been defined yet, defer checking. */
2972 if (! DECL_INITIAL (decl))
2974 struct named_label_use_entry *new_use;
2976 /* Don't bother creating another use if the last goto had the
2977 same data, and will therefore create the same set of errors. */
2978 if (ent->uses
2979 && ent->uses->names_in_scope == current_binding_level->names)
2980 return;
2982 new_use = ggc_alloc_named_label_use_entry ();
2983 new_use->binding_level = current_binding_level;
2984 new_use->names_in_scope = current_binding_level->names;
2985 new_use->o_goto_locus = input_location;
2986 new_use->in_omp_scope = false;
2988 new_use->next = ent->uses;
2989 ent->uses = new_use;
2990 return;
2993 if (ent->in_try_scope || ent->in_catch_scope
2994 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
2996 permerror (input_location, "jump to label %q+D", decl);
2997 permerror (input_location, " from here");
2998 identified = true;
3001 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3003 int u = decl_jump_unsafe (bad);
3005 if (u > 1 && DECL_ARTIFICIAL (bad))
3007 /* Can't skip init of __exception_info. */
3008 error_at (DECL_SOURCE_LOCATION (bad), " enters catch block");
3009 saw_catch = true;
3011 else if (u > 1)
3012 error (" skips initialization of %q+#D", bad);
3013 else
3014 permerror (input_location, " enters scope of %q+#D which has "
3015 "non-trivial destructor", bad);
3018 if (ent->in_try_scope)
3019 error (" enters try block");
3020 else if (ent->in_catch_scope && !saw_catch)
3021 error (" enters catch block");
3023 if (ent->in_omp_scope)
3024 error (" enters OpenMP structured block");
3025 else if (flag_openmp)
3027 cp_binding_level *b;
3028 for (b = current_binding_level; b ; b = b->level_chain)
3030 if (b == ent->binding_level)
3031 break;
3032 if (b->kind == sk_omp)
3034 if (!identified)
3036 permerror (input_location, "jump to label %q+D", decl);
3037 permerror (input_location, " from here");
3038 identified = true;
3040 error (" exits OpenMP structured block");
3041 break;
3047 /* Check that a return is ok wrt OpenMP structured blocks.
3048 Called by finish_return_stmt. Returns true if all is well. */
3050 bool
3051 check_omp_return (void)
3053 cp_binding_level *b;
3054 for (b = current_binding_level; b ; b = b->level_chain)
3055 if (b->kind == sk_omp)
3057 error ("invalid exit from OpenMP structured block");
3058 return false;
3060 else if (b->kind == sk_function_parms)
3061 break;
3062 return true;
3065 /* Define a label, specifying the location in the source file.
3066 Return the LABEL_DECL node for the label. */
3068 static tree
3069 define_label_1 (location_t location, tree name)
3071 struct named_label_entry *ent, dummy;
3072 cp_binding_level *p;
3073 tree decl;
3075 decl = lookup_label (name);
3077 dummy.label_decl = decl;
3078 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
3079 gcc_assert (ent != NULL);
3081 /* After labels, make any new cleanups in the function go into their
3082 own new (temporary) binding contour. */
3083 for (p = current_binding_level;
3084 p->kind != sk_function_parms;
3085 p = p->level_chain)
3086 p->more_cleanups_ok = 0;
3088 if (name == get_identifier ("wchar_t"))
3089 permerror (input_location, "label named wchar_t");
3091 if (DECL_INITIAL (decl) != NULL_TREE)
3093 error ("duplicate label %qD", decl);
3094 return error_mark_node;
3096 else
3098 struct named_label_use_entry *use;
3100 /* Mark label as having been defined. */
3101 DECL_INITIAL (decl) = error_mark_node;
3102 /* Say where in the source. */
3103 DECL_SOURCE_LOCATION (decl) = location;
3105 ent->binding_level = current_binding_level;
3106 ent->names_in_scope = current_binding_level->names;
3108 for (use = ent->uses; use ; use = use->next)
3109 check_previous_goto (decl, use);
3110 ent->uses = NULL;
3113 return decl;
3116 /* Wrapper for define_label_1. */
3118 tree
3119 define_label (location_t location, tree name)
3121 tree ret;
3122 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3123 ret = define_label_1 (location, name);
3124 timevar_cond_stop (TV_NAME_LOOKUP, running);
3125 return ret;
3129 struct cp_switch
3131 cp_binding_level *level;
3132 struct cp_switch *next;
3133 /* The SWITCH_STMT being built. */
3134 tree switch_stmt;
3135 /* A splay-tree mapping the low element of a case range to the high
3136 element, or NULL_TREE if there is no high element. Used to
3137 determine whether or not a new case label duplicates an old case
3138 label. We need a tree, rather than simply a hash table, because
3139 of the GNU case range extension. */
3140 splay_tree cases;
3143 /* A stack of the currently active switch statements. The innermost
3144 switch statement is on the top of the stack. There is no need to
3145 mark the stack for garbage collection because it is only active
3146 during the processing of the body of a function, and we never
3147 collect at that point. */
3149 static struct cp_switch *switch_stack;
3151 /* Called right after a switch-statement condition is parsed.
3152 SWITCH_STMT is the switch statement being parsed. */
3154 void
3155 push_switch (tree switch_stmt)
3157 struct cp_switch *p = XNEW (struct cp_switch);
3158 p->level = current_binding_level;
3159 p->next = switch_stack;
3160 p->switch_stmt = switch_stmt;
3161 p->cases = splay_tree_new (case_compare, NULL, NULL);
3162 switch_stack = p;
3165 void
3166 pop_switch (void)
3168 struct cp_switch *cs = switch_stack;
3169 location_t switch_location;
3171 /* Emit warnings as needed. */
3172 switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3173 if (!processing_template_decl)
3174 c_do_switch_warnings (cs->cases, switch_location,
3175 SWITCH_STMT_TYPE (cs->switch_stmt),
3176 SWITCH_STMT_COND (cs->switch_stmt));
3178 splay_tree_delete (cs->cases);
3179 switch_stack = switch_stack->next;
3180 free (cs);
3183 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3184 condition. Note that if TYPE and VALUE are already integral we don't
3185 really do the conversion because the language-independent
3186 warning/optimization code will work better that way. */
3188 static tree
3189 case_conversion (tree type, tree value)
3191 if (value == NULL_TREE)
3192 return value;
3194 if (cxx_dialect >= cxx11
3195 && (SCOPED_ENUM_P (type)
3196 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3198 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3199 type = type_promotes_to (type);
3200 value = (perform_implicit_conversion_flags
3201 (type, value, tf_warning_or_error,
3202 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3204 return cxx_constant_value (value);
3207 /* Note that we've seen a definition of a case label, and complain if this
3208 is a bad place for one. */
3210 tree
3211 finish_case_label (location_t loc, tree low_value, tree high_value)
3213 tree cond, r;
3214 cp_binding_level *p;
3215 tree type;
3217 if (processing_template_decl)
3219 tree label;
3221 /* For templates, just add the case label; we'll do semantic
3222 analysis at instantiation-time. */
3223 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3224 return add_stmt (build_case_label (low_value, high_value, label));
3227 /* Find the condition on which this switch statement depends. */
3228 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3229 if (cond && TREE_CODE (cond) == TREE_LIST)
3230 cond = TREE_VALUE (cond);
3232 if (!check_switch_goto (switch_stack->level))
3233 return error_mark_node;
3235 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3237 low_value = case_conversion (type, low_value);
3238 high_value = case_conversion (type, high_value);
3240 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3241 low_value, high_value);
3243 /* After labels, make any new cleanups in the function go into their
3244 own new (temporary) binding contour. */
3245 for (p = current_binding_level;
3246 p->kind != sk_function_parms;
3247 p = p->level_chain)
3248 p->more_cleanups_ok = 0;
3250 return r;
3253 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
3255 static hashval_t
3256 typename_hash (const void* k)
3258 hashval_t hash;
3259 const_tree const t = (const_tree) k;
3261 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3262 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3264 return hash;
3267 typedef struct typename_info {
3268 tree scope;
3269 tree name;
3270 tree template_id;
3271 bool enum_p;
3272 bool class_p;
3273 } typename_info;
3275 /* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
3276 really of type `typename_info*' */
3278 static int
3279 typename_compare (const void * k1, const void * k2)
3281 const_tree const t1 = (const_tree) k1;
3282 const typename_info *const t2 = (const typename_info *) k2;
3284 return (TYPE_IDENTIFIER (t1) == t2->name
3285 && TYPE_CONTEXT (t1) == t2->scope
3286 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3287 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3288 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3291 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3292 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3294 Returns the new TYPENAME_TYPE. */
3296 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3298 static tree
3299 build_typename_type (tree context, tree name, tree fullname,
3300 enum tag_types tag_type)
3302 tree t;
3303 tree d;
3304 typename_info ti;
3305 void **e;
3306 hashval_t hash;
3308 if (typename_htab == NULL)
3309 typename_htab = htab_create_ggc (61, &typename_hash,
3310 &typename_compare, NULL);
3312 ti.scope = FROB_CONTEXT (context);
3313 ti.name = name;
3314 ti.template_id = fullname;
3315 ti.enum_p = tag_type == enum_type;
3316 ti.class_p = (tag_type == class_type
3317 || tag_type == record_type
3318 || tag_type == union_type);
3319 hash = (htab_hash_pointer (ti.scope)
3320 ^ htab_hash_pointer (ti.name));
3322 /* See if we already have this type. */
3323 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3324 if (*e)
3325 t = (tree) *e;
3326 else
3328 /* Build the TYPENAME_TYPE. */
3329 t = cxx_make_type (TYPENAME_TYPE);
3330 TYPE_CONTEXT (t) = ti.scope;
3331 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3332 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3333 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3335 /* Build the corresponding TYPE_DECL. */
3336 d = build_decl (input_location, TYPE_DECL, name, t);
3337 TYPE_NAME (TREE_TYPE (d)) = d;
3338 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3339 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3340 DECL_ARTIFICIAL (d) = 1;
3342 /* Store it in the hash table. */
3343 *e = t;
3345 /* TYPENAME_TYPEs must always be compared structurally, because
3346 they may or may not resolve down to another type depending on
3347 the currently open classes. */
3348 SET_TYPE_STRUCTURAL_EQUALITY (t);
3351 return t;
3354 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3355 provided to name the type. Returns an appropriate type, unless an
3356 error occurs, in which case error_mark_node is returned. If we
3357 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3358 return that, rather than the _TYPE it corresponds to, in other
3359 cases we look through the type decl. If TF_ERROR is set, complain
3360 about errors, otherwise be quiet. */
3362 tree
3363 make_typename_type (tree context, tree name, enum tag_types tag_type,
3364 tsubst_flags_t complain)
3366 tree fullname;
3367 tree t;
3368 bool want_template;
3370 if (name == error_mark_node
3371 || context == NULL_TREE
3372 || context == error_mark_node)
3373 return error_mark_node;
3375 if (TYPE_P (name))
3377 if (!(TYPE_LANG_SPECIFIC (name)
3378 && (CLASSTYPE_IS_TEMPLATE (name)
3379 || CLASSTYPE_USE_TEMPLATE (name))))
3380 name = TYPE_IDENTIFIER (name);
3381 else
3382 /* Create a TEMPLATE_ID_EXPR for the type. */
3383 name = build_nt (TEMPLATE_ID_EXPR,
3384 CLASSTYPE_TI_TEMPLATE (name),
3385 CLASSTYPE_TI_ARGS (name));
3387 else if (TREE_CODE (name) == TYPE_DECL)
3388 name = DECL_NAME (name);
3390 fullname = name;
3392 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3394 name = TREE_OPERAND (name, 0);
3395 if (TREE_CODE (name) == TEMPLATE_DECL)
3396 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3397 else if (TREE_CODE (name) == OVERLOAD)
3399 if (complain & tf_error)
3400 error ("%qD is not a type", name);
3401 return error_mark_node;
3404 if (TREE_CODE (name) == TEMPLATE_DECL)
3406 if (complain & tf_error)
3407 error ("%qD used without template parameters", name);
3408 return error_mark_node;
3410 gcc_assert (identifier_p (name));
3411 gcc_assert (TYPE_P (context));
3413 if (!MAYBE_CLASS_TYPE_P (context))
3415 if (complain & tf_error)
3416 error ("%q#T is not a class", context);
3417 return error_mark_node;
3420 /* When the CONTEXT is a dependent type, NAME could refer to a
3421 dependent base class of CONTEXT. But look inside it anyway
3422 if CONTEXT is a currently open scope, in case it refers to a
3423 member of the current instantiation or a non-dependent base;
3424 lookup will stop when we hit a dependent base. */
3425 if (!dependent_scope_p (context))
3426 /* We should only set WANT_TYPE when we're a nested typename type.
3427 Then we can give better diagnostics if we find a non-type. */
3428 t = lookup_field (context, name, 2, /*want_type=*/true);
3429 else
3430 t = NULL_TREE;
3432 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3433 return build_typename_type (context, name, fullname, tag_type);
3435 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3437 if (!t)
3439 if (complain & tf_error)
3440 error (want_template ? G_("no class template named %q#T in %q#T")
3441 : G_("no type named %q#T in %q#T"), name, context);
3442 return error_mark_node;
3445 /* Pull out the template from an injected-class-name (or multiple). */
3446 if (want_template)
3447 t = maybe_get_template_decl_from_type_decl (t);
3449 if (TREE_CODE (t) == TREE_LIST)
3451 if (complain & tf_error)
3453 error ("lookup of %qT in %qT is ambiguous", name, context);
3454 print_candidates (t);
3456 return error_mark_node;
3459 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3461 if (complain & tf_error)
3462 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3463 context, name, t);
3464 return error_mark_node;
3466 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3468 if (complain & tf_error)
3469 error ("%<typename %T::%D%> names %q#T, which is not a type",
3470 context, name, t);
3471 return error_mark_node;
3474 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3475 return error_mark_node;
3477 /* If we are currently parsing a template and if T is a typedef accessed
3478 through CONTEXT then we need to remember and check access of T at
3479 template instantiation time. */
3480 add_typedef_to_current_template_for_access_check (t, context, input_location);
3482 if (want_template)
3483 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3484 NULL_TREE, context,
3485 /*entering_scope=*/0,
3486 tf_warning_or_error | tf_user);
3488 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3489 t = TREE_TYPE (t);
3491 maybe_record_typedef_use (t);
3493 return t;
3496 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3497 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3498 in which case error_mark_node is returned.
3500 If PARM_LIST is non-NULL, also make sure that the template parameter
3501 list of TEMPLATE_DECL matches.
3503 If COMPLAIN zero, don't complain about any errors that occur. */
3505 tree
3506 make_unbound_class_template (tree context, tree name, tree parm_list,
3507 tsubst_flags_t complain)
3509 tree t;
3510 tree d;
3512 if (TYPE_P (name))
3513 name = TYPE_IDENTIFIER (name);
3514 else if (DECL_P (name))
3515 name = DECL_NAME (name);
3516 gcc_assert (identifier_p (name));
3518 if (!dependent_type_p (context)
3519 || currently_open_class (context))
3521 tree tmpl = NULL_TREE;
3523 if (MAYBE_CLASS_TYPE_P (context))
3524 tmpl = lookup_field (context, name, 0, false);
3526 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3527 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3529 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3531 if (complain & tf_error)
3532 error ("no class template named %q#T in %q#T", name, context);
3533 return error_mark_node;
3536 if (parm_list
3537 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3539 if (complain & tf_error)
3541 error ("template parameters do not match template");
3542 error ("%q+D declared here", tmpl);
3544 return error_mark_node;
3547 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3548 complain))
3549 return error_mark_node;
3551 return tmpl;
3554 /* Build the UNBOUND_CLASS_TEMPLATE. */
3555 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3556 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3557 TREE_TYPE (t) = NULL_TREE;
3558 SET_TYPE_STRUCTURAL_EQUALITY (t);
3560 /* Build the corresponding TEMPLATE_DECL. */
3561 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3562 TYPE_NAME (TREE_TYPE (d)) = d;
3563 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3564 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3565 DECL_ARTIFICIAL (d) = 1;
3566 DECL_TEMPLATE_PARMS (d) = parm_list;
3568 return t;
3573 /* Push the declarations of builtin types into the namespace.
3574 RID_INDEX is the index of the builtin type in the array
3575 RID_POINTERS. NAME is the name used when looking up the builtin
3576 type. TYPE is the _TYPE node for the builtin type. */
3578 void
3579 record_builtin_type (enum rid rid_index,
3580 const char* name,
3581 tree type)
3583 tree rname = NULL_TREE, tname = NULL_TREE;
3584 tree tdecl = NULL_TREE;
3586 if ((int) rid_index < (int) RID_MAX)
3587 rname = ridpointers[(int) rid_index];
3588 if (name)
3589 tname = get_identifier (name);
3591 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3592 eliminated. Built-in types should not be looked up name; their
3593 names are keywords that the parser can recognize. However, there
3594 is code in c-common.c that uses identifier_global_value to look
3595 up built-in types by name. */
3596 if (tname)
3598 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3599 DECL_ARTIFICIAL (tdecl) = 1;
3600 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3602 if (rname)
3604 if (!tdecl)
3606 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3607 DECL_ARTIFICIAL (tdecl) = 1;
3609 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3612 if (!TYPE_NAME (type))
3613 TYPE_NAME (type) = tdecl;
3615 if (tdecl)
3616 debug_hooks->type_decl (tdecl, 0);
3619 /* Record one of the standard Java types.
3620 * Declare it as having the given NAME.
3621 * If SIZE > 0, it is the size of one of the integral types;
3622 * otherwise it is the negative of the size of one of the other types. */
3624 static tree
3625 record_builtin_java_type (const char* name, int size)
3627 tree type, decl;
3628 if (size > 0)
3630 type = build_nonstandard_integer_type (size, 0);
3631 type = build_distinct_type_copy (type);
3633 else if (size > -32)
3635 tree stype;
3636 /* "__java_char" or ""__java_boolean". */
3637 type = build_nonstandard_integer_type (-size, 1);
3638 type = build_distinct_type_copy (type);
3639 /* Get the signed type cached and attached to the unsigned type,
3640 so it doesn't get garbage-collected at "random" times,
3641 causing potential codegen differences out of different UIDs
3642 and different alias set numbers. */
3643 stype = build_nonstandard_integer_type (-size, 0);
3644 stype = build_distinct_type_copy (stype);
3645 TREE_CHAIN (type) = stype;
3646 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3648 else
3649 { /* "__java_float" or ""__java_double". */
3650 type = make_node (REAL_TYPE);
3651 TYPE_PRECISION (type) = - size;
3652 layout_type (type);
3654 record_builtin_type (RID_MAX, name, type);
3655 decl = TYPE_NAME (type);
3657 /* Suppress generate debug symbol entries for these types,
3658 since for normal C++ they are just clutter.
3659 However, push_lang_context undoes this if extern "Java" is seen. */
3660 DECL_IGNORED_P (decl) = 1;
3662 TYPE_FOR_JAVA (type) = 1;
3663 return type;
3666 /* Push a type into the namespace so that the back ends ignore it. */
3668 static void
3669 record_unknown_type (tree type, const char* name)
3671 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3672 TYPE_DECL, get_identifier (name), type));
3673 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3674 DECL_IGNORED_P (decl) = 1;
3675 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3676 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3677 TYPE_ALIGN (type) = 1;
3678 TYPE_USER_ALIGN (type) = 0;
3679 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3682 /* A string for which we should create an IDENTIFIER_NODE at
3683 startup. */
3685 typedef struct predefined_identifier
3687 /* The name of the identifier. */
3688 const char *const name;
3689 /* The place where the IDENTIFIER_NODE should be stored. */
3690 tree *const node;
3691 /* Nonzero if this is the name of a constructor or destructor. */
3692 const int ctor_or_dtor_p;
3693 } predefined_identifier;
3695 /* Create all the predefined identifiers. */
3697 static void
3698 initialize_predefined_identifiers (void)
3700 const predefined_identifier *pid;
3702 /* A table of identifiers to create at startup. */
3703 static const predefined_identifier predefined_identifiers[] = {
3704 { "C++", &lang_name_cplusplus, 0 },
3705 { "C", &lang_name_c, 0 },
3706 { "Java", &lang_name_java, 0 },
3707 /* Some of these names have a trailing space so that it is
3708 impossible for them to conflict with names written by users. */
3709 { "__ct ", &ctor_identifier, 1 },
3710 { "__base_ctor ", &base_ctor_identifier, 1 },
3711 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3712 { "__dt ", &dtor_identifier, 1 },
3713 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3714 { "__base_dtor ", &base_dtor_identifier, 1 },
3715 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3716 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3717 { "nelts", &nelts_identifier, 0 },
3718 { THIS_NAME, &this_identifier, 0 },
3719 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3720 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3721 { "_vptr", &vptr_identifier, 0 },
3722 { "__vtt_parm", &vtt_parm_identifier, 0 },
3723 { "::", &global_scope_name, 0 },
3724 { "std", &std_identifier, 0 },
3725 { NULL, NULL, 0 }
3728 for (pid = predefined_identifiers; pid->name; ++pid)
3730 *pid->node = get_identifier (pid->name);
3731 if (pid->ctor_or_dtor_p)
3732 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3736 /* Create the predefined scalar types of C,
3737 and some nodes representing standard constants (0, 1, (void *)0).
3738 Initialize the global binding level.
3739 Make definitions for built-in primitive functions. */
3741 void
3742 cxx_init_decl_processing (void)
3744 tree void_ftype;
3745 tree void_ftype_ptr;
3747 /* Create all the identifiers we need. */
3748 initialize_predefined_identifiers ();
3750 /* Create the global variables. */
3751 push_to_top_level ();
3753 current_function_decl = NULL_TREE;
3754 current_binding_level = NULL;
3755 /* Enter the global namespace. */
3756 gcc_assert (global_namespace == NULL_TREE);
3757 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3758 void_type_node);
3759 DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3760 TREE_PUBLIC (global_namespace) = 1;
3761 begin_scope (sk_namespace, global_namespace);
3763 if (flag_visibility_ms_compat)
3764 default_visibility = VISIBILITY_HIDDEN;
3766 /* Initially, C. */
3767 current_lang_name = lang_name_c;
3769 /* Create the `std' namespace. */
3770 push_namespace (std_identifier);
3771 std_node = current_namespace;
3772 pop_namespace ();
3774 c_common_nodes_and_builtins ();
3776 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3777 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3778 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3779 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3780 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3781 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3782 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3783 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3785 integer_two_node = build_int_cst (NULL_TREE, 2);
3787 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3788 truthvalue_type_node = boolean_type_node;
3789 truthvalue_false_node = boolean_false_node;
3790 truthvalue_true_node = boolean_true_node;
3792 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3793 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3794 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3796 #if 0
3797 record_builtin_type (RID_MAX, NULL, string_type_node);
3798 #endif
3800 delta_type_node = ptrdiff_type_node;
3801 vtable_index_type = ptrdiff_type_node;
3803 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3804 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3805 void_ftype_ptr = build_function_type_list (void_type_node,
3806 ptr_type_node, NULL_TREE);
3807 void_ftype_ptr
3808 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3810 /* C++ extensions */
3812 unknown_type_node = make_node (LANG_TYPE);
3813 record_unknown_type (unknown_type_node, "unknown type");
3815 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3816 TREE_TYPE (unknown_type_node) = unknown_type_node;
3818 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3819 result. */
3820 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3821 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3823 init_list_type_node = make_node (LANG_TYPE);
3824 record_unknown_type (init_list_type_node, "init list");
3827 /* Make sure we get a unique function type, so we can give
3828 its pointer type a name. (This wins for gdb.) */
3829 tree vfunc_type = make_node (FUNCTION_TYPE);
3830 TREE_TYPE (vfunc_type) = integer_type_node;
3831 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3832 layout_type (vfunc_type);
3834 vtable_entry_type = build_pointer_type (vfunc_type);
3836 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3838 vtbl_type_node
3839 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3840 layout_type (vtbl_type_node);
3841 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3842 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3843 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3844 layout_type (vtbl_ptr_type_node);
3845 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3847 push_namespace (get_identifier ("__cxxabiv1"));
3848 abi_node = current_namespace;
3849 pop_namespace ();
3851 global_type_node = make_node (LANG_TYPE);
3852 record_unknown_type (global_type_node, "global type");
3854 /* Now, C++. */
3855 current_lang_name = lang_name_cplusplus;
3858 tree newattrs, extvisattr;
3859 tree newtype, deltype;
3860 tree ptr_ftype_sizetype;
3861 tree new_eh_spec;
3863 ptr_ftype_sizetype
3864 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3865 if (cxx_dialect == cxx98)
3867 tree bad_alloc_id;
3868 tree bad_alloc_type_node;
3869 tree bad_alloc_decl;
3871 push_namespace (std_identifier);
3872 bad_alloc_id = get_identifier ("bad_alloc");
3873 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3874 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3875 bad_alloc_decl
3876 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3877 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3878 pop_namespace ();
3880 new_eh_spec
3881 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3883 else
3884 new_eh_spec = noexcept_false_spec;
3886 /* Ensure attribs.c is initialized. */
3887 init_attributes ();
3888 extvisattr = build_tree_list (get_identifier ("externally_visible"),
3889 NULL_TREE);
3890 newattrs = tree_cons (get_identifier ("alloc_size"),
3891 build_tree_list (NULL_TREE, integer_one_node),
3892 extvisattr);
3893 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3894 newtype = build_exception_variant (newtype, new_eh_spec);
3895 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3896 deltype = build_exception_variant (deltype, empty_except_spec);
3897 DECL_IS_OPERATOR_NEW (push_cp_library_fn (NEW_EXPR, newtype, 0)) = 1;
3898 DECL_IS_OPERATOR_NEW (push_cp_library_fn (VEC_NEW_EXPR, newtype, 0)) = 1;
3899 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
3900 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
3902 nullptr_type_node = make_node (NULLPTR_TYPE);
3903 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3904 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3905 TYPE_UNSIGNED (nullptr_type_node) = 1;
3906 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3907 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3908 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3909 nullptr_node = build_int_cst (nullptr_type_node, 0);
3912 abort_fndecl
3913 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
3914 ECF_NORETURN | ECF_NOTHROW);
3916 /* Perform other language dependent initializations. */
3917 init_class_processing ();
3918 init_rtti_processing ();
3919 init_template_processing ();
3921 if (flag_exceptions)
3922 init_exception_processing ();
3924 if (! supports_one_only ())
3925 flag_weak = 0;
3927 make_fname_decl = cp_make_fname_decl;
3928 start_fname_decls ();
3930 /* Show we use EH for cleanups. */
3931 if (flag_exceptions)
3932 using_eh_for_cleanups ();
3935 /* Generate an initializer for a function naming variable from
3936 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3937 filled in with the type of the init. */
3939 tree
3940 cp_fname_init (const char* name, tree *type_p)
3942 tree domain = NULL_TREE;
3943 tree type;
3944 tree init = NULL_TREE;
3945 size_t length = 0;
3947 if (name)
3949 length = strlen (name);
3950 domain = build_index_type (size_int (length));
3951 init = build_string (length + 1, name);
3954 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3955 type = build_cplus_array_type (type, domain);
3957 *type_p = type;
3959 if (init)
3960 TREE_TYPE (init) = type;
3961 else
3962 init = error_mark_node;
3964 return init;
3967 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3968 the decl, LOC is the location to give the decl, NAME is the
3969 initialization string and TYPE_DEP indicates whether NAME depended
3970 on the type of the function. We make use of that to detect
3971 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3972 at the point of first use, so we mustn't push the decl now. */
3974 static tree
3975 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3977 const char *const name = (type_dep && processing_template_decl
3978 ? NULL : fname_as_string (type_dep));
3979 tree type;
3980 tree init = cp_fname_init (name, &type);
3981 tree decl = build_decl (loc, VAR_DECL, id, type);
3983 if (name)
3984 free (CONST_CAST (char *, name));
3986 /* As we're using pushdecl_with_scope, we must set the context. */
3987 DECL_CONTEXT (decl) = current_function_decl;
3989 TREE_STATIC (decl) = 1;
3990 TREE_READONLY (decl) = 1;
3991 DECL_ARTIFICIAL (decl) = 1;
3993 TREE_USED (decl) = 1;
3995 if (current_function_decl)
3997 cp_binding_level *b = current_binding_level;
3998 if (b->kind == sk_function_parms)
3999 return error_mark_node;
4000 while (b->level_chain->kind != sk_function_parms)
4001 b = b->level_chain;
4002 pushdecl_with_scope (decl, b, /*is_friend=*/false);
4003 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4004 LOOKUP_ONLYCONVERTING);
4006 else
4008 DECL_THIS_STATIC (decl) = true;
4009 pushdecl_top_level_and_finish (decl, init);
4012 return decl;
4015 static tree
4016 builtin_function_1 (tree decl, tree context, bool is_global)
4018 tree id = DECL_NAME (decl);
4019 const char *name = IDENTIFIER_POINTER (id);
4021 retrofit_lang_decl (decl);
4023 DECL_ARTIFICIAL (decl) = 1;
4024 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
4025 SET_DECL_LANGUAGE (decl, lang_c);
4026 /* Runtime library routines are, by definition, available in an
4027 external shared object. */
4028 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4029 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4031 DECL_CONTEXT (decl) = context;
4033 if (is_global)
4034 pushdecl_top_level (decl);
4035 else
4036 pushdecl (decl);
4038 /* A function in the user's namespace should have an explicit
4039 declaration before it is used. Mark the built-in function as
4040 anticipated but not actually declared. */
4041 if (name[0] != '_' || name[1] != '_')
4042 DECL_ANTICIPATED (decl) = 1;
4043 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4045 size_t len = strlen (name);
4047 /* Treat __*_chk fortification functions as anticipated as well,
4048 unless they are __builtin_*. */
4049 if (len > strlen ("___chk")
4050 && memcmp (name + len - strlen ("_chk"),
4051 "_chk", strlen ("_chk") + 1) == 0)
4052 DECL_ANTICIPATED (decl) = 1;
4055 return decl;
4058 tree
4059 cxx_builtin_function (tree decl)
4061 tree id = DECL_NAME (decl);
4062 const char *name = IDENTIFIER_POINTER (id);
4063 /* All builtins that don't begin with an '_' should additionally
4064 go in the 'std' namespace. */
4065 if (name[0] != '_')
4067 tree decl2 = copy_node(decl);
4068 push_namespace (std_identifier);
4069 builtin_function_1 (decl2, std_node, false);
4070 pop_namespace ();
4073 return builtin_function_1 (decl, NULL_TREE, false);
4076 /* Like cxx_builtin_function, but guarantee the function is added to the global
4077 scope. This is to allow function specific options to add new machine
4078 dependent builtins when the target ISA changes via attribute((target(...)))
4079 which saves space on program startup if the program does not use non-generic
4080 ISAs. */
4082 tree
4083 cxx_builtin_function_ext_scope (tree decl)
4086 tree id = DECL_NAME (decl);
4087 const char *name = IDENTIFIER_POINTER (id);
4088 /* All builtins that don't begin with an '_' should additionally
4089 go in the 'std' namespace. */
4090 if (name[0] != '_')
4092 tree decl2 = copy_node(decl);
4093 push_namespace (std_identifier);
4094 builtin_function_1 (decl2, std_node, true);
4095 pop_namespace ();
4098 return builtin_function_1 (decl, NULL_TREE, true);
4101 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4102 function. Not called directly. */
4104 static tree
4105 build_library_fn (tree name, enum tree_code operator_code, tree type,
4106 int ecf_flags)
4108 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4109 DECL_EXTERNAL (fn) = 1;
4110 TREE_PUBLIC (fn) = 1;
4111 DECL_ARTIFICIAL (fn) = 1;
4112 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4113 SET_DECL_LANGUAGE (fn, lang_c);
4114 /* Runtime library routines are, by definition, available in an
4115 external shared object. */
4116 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4117 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4118 set_call_expr_flags (fn, ecf_flags);
4119 return fn;
4122 /* Returns the _DECL for a library function with C++ linkage. */
4124 static tree
4125 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4126 int ecf_flags)
4128 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4129 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4130 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4131 return fn;
4134 /* Like build_library_fn, but takes a C string instead of an
4135 IDENTIFIER_NODE. */
4137 tree
4138 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4140 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4143 /* Like build_cp_library_fn, but takes a C string instead of an
4144 IDENTIFIER_NODE. */
4146 tree
4147 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4149 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4150 ecf_flags);
4153 /* Like build_library_fn, but also pushes the function so that we will
4154 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
4155 may throw exceptions listed in RAISES. */
4157 tree
4158 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4160 tree fn;
4162 if (raises)
4163 type = build_exception_variant (type, raises);
4165 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4166 pushdecl_top_level (fn);
4167 return fn;
4170 /* Like build_cp_library_fn, but also pushes the function so that it
4171 will be found by normal lookup. */
4173 static tree
4174 push_cp_library_fn (enum tree_code operator_code, tree type,
4175 int ecf_flags)
4177 tree fn = build_cp_library_fn (ansi_opname (operator_code),
4178 operator_code,
4179 type, ecf_flags);
4180 pushdecl (fn);
4181 if (flag_tm)
4182 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4183 return fn;
4186 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4187 a FUNCTION_TYPE. */
4189 tree
4190 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4192 tree type = build_function_type (void_type_node, parmtypes);
4193 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4196 /* Like push_library_fn, but also note that this function throws
4197 and does not return. Used for __throw_foo and the like. */
4199 tree
4200 push_throw_library_fn (tree name, tree type)
4202 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4203 return fn;
4206 /* When we call finish_struct for an anonymous union, we create
4207 default copy constructors and such. But, an anonymous union
4208 shouldn't have such things; this function undoes the damage to the
4209 anonymous union type T.
4211 (The reason that we create the synthesized methods is that we don't
4212 distinguish `union { int i; }' from `typedef union { int i; } U'.
4213 The first is an anonymous union; the second is just an ordinary
4214 union type.) */
4216 void
4217 fixup_anonymous_aggr (tree t)
4219 tree *q;
4221 /* Wipe out memory of synthesized methods. */
4222 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4223 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4224 TYPE_HAS_COPY_CTOR (t) = 0;
4225 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4226 TYPE_HAS_COPY_ASSIGN (t) = 0;
4227 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4229 /* Splice the implicitly generated functions out of the TYPE_METHODS
4230 list. */
4231 q = &TYPE_METHODS (t);
4232 while (*q)
4234 if (DECL_ARTIFICIAL (*q))
4235 *q = TREE_CHAIN (*q);
4236 else
4237 q = &DECL_CHAIN (*q);
4240 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
4241 if (TYPE_METHODS (t))
4243 tree decl = TYPE_MAIN_DECL (t);
4245 if (TREE_CODE (t) != UNION_TYPE)
4246 error_at (DECL_SOURCE_LOCATION (decl),
4247 "an anonymous struct cannot have function members");
4248 else
4249 error_at (DECL_SOURCE_LOCATION (decl),
4250 "an anonymous union cannot have function members");
4253 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4254 assignment operators (because they cannot have these methods themselves).
4255 For anonymous unions this is already checked because they are not allowed
4256 in any union, otherwise we have to check it. */
4257 if (TREE_CODE (t) != UNION_TYPE)
4259 tree field, type;
4261 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4262 if (TREE_CODE (field) == FIELD_DECL)
4264 type = TREE_TYPE (field);
4265 if (CLASS_TYPE_P (type))
4267 if (TYPE_NEEDS_CONSTRUCTING (type))
4268 error ("member %q+#D with constructor not allowed "
4269 "in anonymous aggregate", field);
4270 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4271 error ("member %q+#D with destructor not allowed "
4272 "in anonymous aggregate", field);
4273 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4274 error ("member %q+#D with copy assignment operator "
4275 "not allowed in anonymous aggregate", field);
4281 /* Warn for an attribute located at LOCATION that appertains to the
4282 class type CLASS_TYPE that has not been properly placed after its
4283 class-key, in it class-specifier. */
4285 void
4286 warn_misplaced_attr_for_class_type (source_location location,
4287 tree class_type)
4289 gcc_assert (OVERLOAD_TYPE_P (class_type));
4291 warning_at (location, OPT_Wattributes,
4292 "attribute ignored in declaration "
4293 "of %q#T", class_type);
4294 inform (location,
4295 "attribute for %q#T must follow the %qs keyword",
4296 class_type, class_key_or_enum_as_string (class_type));
4299 /* Make sure that a declaration with no declarator is well-formed, i.e.
4300 just declares a tagged type or anonymous union.
4302 Returns the type declared; or NULL_TREE if none. */
4304 tree
4305 check_tag_decl (cp_decl_specifier_seq *declspecs,
4306 bool explicit_type_instantiation_p)
4308 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4309 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4310 /* If a class, struct, or enum type is declared by the DECLSPECS
4311 (i.e, if a class-specifier, enum-specifier, or non-typename
4312 elaborated-type-specifier appears in the DECLSPECS),
4313 DECLARED_TYPE is set to the corresponding type. */
4314 tree declared_type = NULL_TREE;
4315 bool error_p = false;
4317 if (declspecs->multiple_types_p)
4318 error ("multiple types in one declaration");
4319 else if (declspecs->redefined_builtin_type)
4321 if (!in_system_header_at (input_location))
4322 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4323 "redeclaration of C++ built-in type %qT",
4324 declspecs->redefined_builtin_type);
4325 return NULL_TREE;
4328 if (declspecs->type
4329 && TYPE_P (declspecs->type)
4330 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4331 && MAYBE_CLASS_TYPE_P (declspecs->type))
4332 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4333 declared_type = declspecs->type;
4334 else if (declspecs->type == error_mark_node)
4335 error_p = true;
4336 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4337 permerror (input_location, "declaration does not declare anything");
4338 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4340 error ("%<auto%> can only be specified for variables "
4341 "or function declarations");
4342 return error_mark_node;
4344 /* Check for an anonymous union. */
4345 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4346 && TYPE_ANONYMOUS_P (declared_type))
4348 /* 7/3 In a simple-declaration, the optional init-declarator-list
4349 can be omitted only when declaring a class (clause 9) or
4350 enumeration (7.2), that is, when the decl-specifier-seq contains
4351 either a class-specifier, an elaborated-type-specifier with
4352 a class-key (9.1), or an enum-specifier. In these cases and
4353 whenever a class-specifier or enum-specifier is present in the
4354 decl-specifier-seq, the identifiers in these specifiers are among
4355 the names being declared by the declaration (as class-name,
4356 enum-names, or enumerators, depending on the syntax). In such
4357 cases, and except for the declaration of an unnamed bit-field (9.6),
4358 the decl-specifier-seq shall introduce one or more names into the
4359 program, or shall redeclare a name introduced by a previous
4360 declaration. [Example:
4361 enum { }; // ill-formed
4362 typedef class { }; // ill-formed
4363 --end example] */
4364 if (saw_typedef)
4366 error ("missing type-name in typedef-declaration");
4367 return NULL_TREE;
4369 /* Anonymous unions are objects, so they can have specifiers. */;
4370 SET_ANON_AGGR_TYPE_P (declared_type);
4372 if (TREE_CODE (declared_type) != UNION_TYPE
4373 && !in_system_header_at (input_location))
4374 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4377 else
4379 if (decl_spec_seq_has_spec_p (declspecs, ds_inline)
4380 || decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4381 error ("%qs can only be specified for functions",
4382 decl_spec_seq_has_spec_p (declspecs, ds_inline)
4383 ? "inline" : "virtual");
4384 else if (saw_friend
4385 && (!current_class_type
4386 || current_scope () != current_class_type))
4387 error ("%<friend%> can only be specified inside a class");
4388 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4389 error ("%<explicit%> can only be specified for constructors");
4390 else if (declspecs->storage_class)
4391 error ("a storage class can only be specified for objects "
4392 "and functions");
4393 else if (decl_spec_seq_has_spec_p (declspecs, ds_const)
4394 || decl_spec_seq_has_spec_p (declspecs, ds_volatile)
4395 || decl_spec_seq_has_spec_p (declspecs, ds_restrict)
4396 || decl_spec_seq_has_spec_p (declspecs, ds_thread))
4397 error ("qualifiers can only be specified for objects "
4398 "and functions");
4399 else if (saw_typedef)
4400 warning (0, "%<typedef%> was ignored in this declaration");
4401 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4402 error ("%<constexpr%> cannot be used for type declarations");
4405 if (declspecs->attributes && warn_attributes && declared_type)
4407 location_t loc;
4408 if (!CLASS_TYPE_P (declared_type)
4409 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4410 /* For a non-template class, use the name location. */
4411 loc = location_of (declared_type);
4412 else
4413 /* For a template class (an explicit instantiation), use the
4414 current location. */
4415 loc = input_location;
4417 if (explicit_type_instantiation_p)
4418 /* [dcl.attr.grammar]/4:
4420 No attribute-specifier-seq shall appertain to an explicit
4421 instantiation. */
4423 warning_at (loc, OPT_Wattributes,
4424 "attribute ignored in explicit instantiation %q#T",
4425 declared_type);
4426 inform (loc,
4427 "no attribute can be applied to "
4428 "an explicit instantiation");
4430 else
4431 warn_misplaced_attr_for_class_type (loc, declared_type);
4434 return declared_type;
4437 /* Called when a declaration is seen that contains no names to declare.
4438 If its type is a reference to a structure, union or enum inherited
4439 from a containing scope, shadow that tag name for the current scope
4440 with a forward reference.
4441 If its type defines a new named structure or union
4442 or defines an enum, it is valid but we need not do anything here.
4443 Otherwise, it is an error.
4445 C++: may have to grok the declspecs to learn about static,
4446 complain for anonymous unions.
4448 Returns the TYPE declared -- or NULL_TREE if none. */
4450 tree
4451 shadow_tag (cp_decl_specifier_seq *declspecs)
4453 tree t = check_tag_decl (declspecs,
4454 /*explicit_type_instantiation_p=*/false);
4456 if (!t)
4457 return NULL_TREE;
4459 if (maybe_process_partial_specialization (t) == error_mark_node)
4460 return NULL_TREE;
4462 /* This is where the variables in an anonymous union are
4463 declared. An anonymous union declaration looks like:
4464 union { ... } ;
4465 because there is no declarator after the union, the parser
4466 sends that declaration here. */
4467 if (ANON_AGGR_TYPE_P (t))
4469 fixup_anonymous_aggr (t);
4471 if (TYPE_FIELDS (t))
4473 tree decl = grokdeclarator (/*declarator=*/NULL,
4474 declspecs, NORMAL, 0, NULL);
4475 finish_anon_union (decl);
4479 return t;
4482 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4484 tree
4485 groktypename (cp_decl_specifier_seq *type_specifiers,
4486 const cp_declarator *declarator,
4487 bool is_template_arg)
4489 tree attrs;
4490 tree type;
4491 enum decl_context context
4492 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4493 attrs = type_specifiers->attributes;
4494 type_specifiers->attributes = NULL_TREE;
4495 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4496 if (attrs && type != error_mark_node)
4498 if (CLASS_TYPE_P (type))
4499 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4500 "outside of definition", type);
4501 else if (MAYBE_CLASS_TYPE_P (type))
4502 /* A template type parameter or other dependent type. */
4503 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4504 "type %qT without an associated declaration", type);
4505 else
4506 cplus_decl_attributes (&type, attrs, 0);
4508 return type;
4511 /* Process a DECLARATOR for a function-scope variable declaration,
4512 namespace-scope variable declaration, or function declaration.
4513 (Function definitions go through start_function; class member
4514 declarations appearing in the body of the class go through
4515 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4516 If an error occurs, the error_mark_node is returned instead.
4518 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4519 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4520 for an explicitly defaulted function, or SD_DELETED for an explicitly
4521 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4522 implicitly initialized via a default constructor. ATTRIBUTES and
4523 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4525 The scope represented by the context of the returned DECL is pushed
4526 (if it is not the global namespace) and is assigned to
4527 *PUSHED_SCOPE_P. The caller is then responsible for calling
4528 pop_scope on *PUSHED_SCOPE_P if it is set. */
4530 tree
4531 start_decl (const cp_declarator *declarator,
4532 cp_decl_specifier_seq *declspecs,
4533 int initialized,
4534 tree attributes,
4535 tree prefix_attributes,
4536 tree *pushed_scope_p)
4538 tree decl;
4539 tree context;
4540 bool was_public;
4541 int flags;
4542 bool alias;
4544 *pushed_scope_p = NULL_TREE;
4546 /* An object declared as __attribute__((deprecated)) suppresses
4547 warnings of uses of other deprecated items. */
4548 if (lookup_attribute ("deprecated", attributes))
4549 deprecated_state = DEPRECATED_SUPPRESS;
4551 attributes = chainon (attributes, prefix_attributes);
4553 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4554 &attributes);
4556 deprecated_state = DEPRECATED_NORMAL;
4558 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4559 || decl == error_mark_node)
4560 return error_mark_node;
4562 context = CP_DECL_CONTEXT (decl);
4563 if (context != global_namespace)
4564 *pushed_scope_p = push_scope (context);
4566 if (initialized)
4567 /* Is it valid for this decl to have an initializer at all?
4568 If not, set INITIALIZED to zero, which will indirectly
4569 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4570 switch (TREE_CODE (decl))
4572 case TYPE_DECL:
4573 error ("typedef %qD is initialized (use decltype instead)", decl);
4574 return error_mark_node;
4576 case FUNCTION_DECL:
4577 if (initialized == SD_DELETED)
4578 /* We'll handle the rest of the semantics later, but we need to
4579 set this now so it's visible to duplicate_decls. */
4580 DECL_DELETED_FN (decl) = 1;
4581 break;
4583 default:
4584 break;
4587 if (initialized)
4589 if (! toplevel_bindings_p ()
4590 && DECL_EXTERNAL (decl))
4591 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4592 decl);
4593 DECL_EXTERNAL (decl) = 0;
4594 if (toplevel_bindings_p ())
4595 TREE_STATIC (decl) = 1;
4597 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4599 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4600 record_key_method_defined (decl);
4602 /* If this is a typedef that names the class for linkage purposes
4603 (7.1.3p8), apply any attributes directly to the type. */
4604 if (TREE_CODE (decl) == TYPE_DECL
4605 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4606 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4607 flags = ATTR_FLAG_TYPE_IN_PLACE;
4608 else
4609 flags = 0;
4611 /* Set attributes here so if duplicate decl, will have proper attributes. */
4612 cplus_decl_attributes (&decl, attributes, flags);
4614 /* Dllimported symbols cannot be defined. Static data members (which
4615 can be initialized in-class and dllimported) go through grokfield,
4616 not here, so we don't need to exclude those decls when checking for
4617 a definition. */
4618 if (initialized && DECL_DLLIMPORT_P (decl))
4620 error ("definition of %q#D is marked %<dllimport%>", decl);
4621 DECL_DLLIMPORT_P (decl) = 0;
4624 /* If #pragma weak was used, mark the decl weak now. */
4625 if (!processing_template_decl)
4626 maybe_apply_pragma_weak (decl);
4628 if (TREE_CODE (decl) == FUNCTION_DECL
4629 && DECL_DECLARED_INLINE_P (decl)
4630 && DECL_UNINLINABLE (decl)
4631 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4632 warning (0, "inline function %q+D given attribute noinline", decl);
4634 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4636 if (VAR_P (decl))
4638 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4639 if (field == NULL_TREE || !VAR_P (field))
4640 error ("%q#D is not a static member of %q#T", decl, context);
4641 else
4643 if (DECL_CONTEXT (field) != context)
4645 if (!same_type_p (DECL_CONTEXT (field), context))
4646 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4647 "to be defined as %<%T::%D%>",
4648 DECL_CONTEXT (field), DECL_NAME (decl),
4649 context, DECL_NAME (decl));
4650 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4652 /* Static data member are tricky; an in-class initialization
4653 still doesn't provide a definition, so the in-class
4654 declaration will have DECL_EXTERNAL set, but will have an
4655 initialization. Thus, duplicate_decls won't warn
4656 about this situation, and so we check here. */
4657 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4658 error ("duplicate initialization of %qD", decl);
4659 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4660 decl = field;
4661 if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4662 && !DECL_DECLARED_CONSTEXPR_P (field))
4663 error ("%qD declared %<constexpr%> outside its class", field);
4666 else
4668 tree field = check_classfn (context, decl,
4669 (processing_template_decl
4670 > template_class_depth (context))
4671 ? current_template_parms
4672 : NULL_TREE);
4673 if (field && field != error_mark_node
4674 && duplicate_decls (decl, field,
4675 /*newdecl_is_friend=*/false))
4676 decl = field;
4679 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4680 DECL_IN_AGGR_P (decl) = 0;
4681 /* Do not mark DECL as an explicit specialization if it was not
4682 already marked as an instantiation; a declaration should
4683 never be marked as a specialization unless we know what
4684 template is being specialized. */
4685 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4687 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4689 /* [temp.expl.spec] An explicit specialization of a static data
4690 member of a template is a definition if the declaration
4691 includes an initializer; otherwise, it is a declaration.
4693 We check for processing_specialization so this only applies
4694 to the new specialization syntax. */
4695 if (!initialized && processing_specialization)
4696 DECL_EXTERNAL (decl) = 1;
4699 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4700 /* Aliases are definitions. */
4701 && !alias)
4702 permerror (input_location, "declaration of %q#D outside of class is not definition",
4703 decl);
4706 was_public = TREE_PUBLIC (decl);
4708 /* Enter this declaration into the symbol table. */
4709 decl = maybe_push_decl (decl);
4711 if (processing_template_decl)
4712 decl = push_template_decl (decl);
4713 if (decl == error_mark_node)
4714 return error_mark_node;
4716 if (VAR_P (decl)
4717 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4718 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4720 /* This is a const variable with implicit 'static'. Set
4721 DECL_THIS_STATIC so we can tell it from variables that are
4722 !TREE_PUBLIC because of the anonymous namespace. */
4723 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4724 DECL_THIS_STATIC (decl) = 1;
4727 if (!processing_template_decl && VAR_P (decl))
4728 start_decl_1 (decl, initialized);
4730 return decl;
4733 /* Process the declaration of a variable DECL. INITIALIZED is true
4734 iff DECL is explicitly initialized. (INITIALIZED is false if the
4735 variable is initialized via an implicitly-called constructor.)
4736 This function must be called for ordinary variables (including, for
4737 example, implicit instantiations of templates), but must not be
4738 called for template declarations. */
4740 void
4741 start_decl_1 (tree decl, bool initialized)
4743 tree type;
4744 bool complete_p;
4745 bool aggregate_definition_p;
4747 gcc_assert (!processing_template_decl);
4749 if (error_operand_p (decl))
4750 return;
4752 gcc_assert (VAR_P (decl));
4754 type = TREE_TYPE (decl);
4755 complete_p = COMPLETE_TYPE_P (type);
4756 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4758 /* If an explicit initializer is present, or if this is a definition
4759 of an aggregate, then we need a complete type at this point.
4760 (Scalars are always complete types, so there is nothing to
4761 check.) This code just sets COMPLETE_P; errors (if necessary)
4762 are issued below. */
4763 if ((initialized || aggregate_definition_p)
4764 && !complete_p
4765 && COMPLETE_TYPE_P (complete_type (type)))
4767 complete_p = true;
4768 /* We will not yet have set TREE_READONLY on DECL if the type
4769 was "const", but incomplete, before this point. But, now, we
4770 have a complete type, so we can try again. */
4771 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4774 if (initialized)
4775 /* Is it valid for this decl to have an initializer at all? */
4777 /* Don't allow initializations for incomplete types except for
4778 arrays which might be completed by the initialization. */
4779 if (complete_p)
4780 ; /* A complete type is ok. */
4781 else if (type_uses_auto (type))
4782 ; /* An auto type is ok. */
4783 else if (TREE_CODE (type) != ARRAY_TYPE)
4785 error ("variable %q#D has initializer but incomplete type", decl);
4786 type = TREE_TYPE (decl) = error_mark_node;
4788 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4790 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4791 error ("elements of array %q#D have incomplete type", decl);
4792 /* else we already gave an error in start_decl. */
4795 else if (aggregate_definition_p && !complete_p)
4797 if (type_uses_auto (type))
4798 error ("declaration of %q#D has no initializer", decl);
4799 else
4800 error ("aggregate %q#D has incomplete type and cannot be defined",
4801 decl);
4802 /* Change the type so that assemble_variable will give
4803 DECL an rtl we can live with: (mem (const_int 0)). */
4804 type = TREE_TYPE (decl) = error_mark_node;
4807 /* Create a new scope to hold this declaration if necessary.
4808 Whether or not a new scope is necessary cannot be determined
4809 until after the type has been completed; if the type is a
4810 specialization of a class template it is not until after
4811 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4812 will be set correctly. */
4813 maybe_push_cleanup_level (type);
4816 /* Handle initialization of references. DECL, TYPE, and INIT have the
4817 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4818 but will be set to a new CLEANUP_STMT if a temporary is created
4819 that must be destroyed subsequently.
4821 Returns an initializer expression to use to initialize DECL, or
4822 NULL if the initialization can be performed statically.
4824 Quotes on semantics can be found in ARM 8.4.3. */
4826 static tree
4827 grok_reference_init (tree decl, tree type, tree init, int flags)
4829 if (init == NULL_TREE)
4831 if ((DECL_LANG_SPECIFIC (decl) == 0
4832 || DECL_IN_AGGR_P (decl) == 0)
4833 && ! DECL_THIS_EXTERN (decl))
4834 error ("%qD declared as reference but not initialized", decl);
4835 return NULL_TREE;
4838 if (TREE_CODE (init) == TREE_LIST)
4839 init = build_x_compound_expr_from_list (init, ELK_INIT,
4840 tf_warning_or_error);
4842 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4843 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4844 /* Note: default conversion is only called in very special cases. */
4845 init = decay_conversion (init, tf_warning_or_error);
4847 /* Convert INIT to the reference type TYPE. This may involve the
4848 creation of a temporary, whose lifetime must be the same as that
4849 of the reference. If so, a DECL_EXPR for the temporary will be
4850 added just after the DECL_EXPR for DECL. That's why we don't set
4851 DECL_INITIAL for local references (instead assigning to them
4852 explicitly); we need to allow the temporary to be initialized
4853 first. */
4854 return initialize_reference (type, init, flags,
4855 tf_warning_or_error);
4858 /* Designated initializers in arrays are not supported in GNU C++.
4859 The parser cannot detect this error since it does not know whether
4860 a given brace-enclosed initializer is for a class type or for an
4861 array. This function checks that CE does not use a designated
4862 initializer. If it does, an error is issued. Returns true if CE
4863 is valid, i.e., does not have a designated initializer. */
4865 static bool
4866 check_array_designated_initializer (constructor_elt *ce,
4867 unsigned HOST_WIDE_INT index)
4869 /* Designated initializers for array elements are not supported. */
4870 if (ce->index)
4872 /* The parser only allows identifiers as designated
4873 initializers. */
4874 if (ce->index == error_mark_node)
4876 error ("name used in a GNU-style designated "
4877 "initializer for an array");
4878 return false;
4880 else if (identifier_p (ce->index))
4882 error ("name %qD used in a GNU-style designated "
4883 "initializer for an array", ce->index);
4884 return false;
4887 ce->index = cxx_constant_value (ce->index);
4889 if (TREE_CODE (ce->index) == INTEGER_CST)
4891 /* A C99 designator is OK if it matches the current index. */
4892 if (TREE_INT_CST_LOW (ce->index) == index)
4893 return true;
4894 else
4895 sorry ("non-trivial designated initializers not supported");
4897 else
4898 gcc_unreachable ();
4900 return false;
4903 return true;
4906 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4907 array until we finish parsing the initializer. If that's the
4908 situation we're in, update DECL accordingly. */
4910 static void
4911 maybe_deduce_size_from_array_init (tree decl, tree init)
4913 tree type = TREE_TYPE (decl);
4915 if (TREE_CODE (type) == ARRAY_TYPE
4916 && TYPE_DOMAIN (type) == NULL_TREE
4917 && TREE_CODE (decl) != TYPE_DECL)
4919 /* do_default is really a C-ism to deal with tentative definitions.
4920 But let's leave it here to ease the eventual merge. */
4921 int do_default = !DECL_EXTERNAL (decl);
4922 tree initializer = init ? init : DECL_INITIAL (decl);
4923 int failure = 0;
4925 /* Check that there are no designated initializers in INIT, as
4926 those are not supported in GNU C++, and as the middle-end
4927 will crash if presented with a non-numeric designated
4928 initializer. */
4929 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
4931 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
4932 constructor_elt *ce;
4933 HOST_WIDE_INT i;
4934 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
4935 if (!check_array_designated_initializer (ce, i))
4936 failure = 1;
4939 if (!failure)
4941 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4942 do_default);
4943 if (failure == 1)
4945 error ("initializer fails to determine size of %qD", decl);
4947 else if (failure == 2)
4949 if (do_default)
4951 error ("array size missing in %qD", decl);
4953 /* If a `static' var's size isn't known, make it extern as
4954 well as static, so it does not get allocated. If it's not
4955 `static', then don't mark it extern; finish_incomplete_decl
4956 will give it a default size and it will get allocated. */
4957 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4958 DECL_EXTERNAL (decl) = 1;
4960 else if (failure == 3)
4962 error ("zero-size array %qD", decl);
4966 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4968 relayout_decl (decl);
4972 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4973 any appropriate error messages regarding the layout. */
4975 static void
4976 layout_var_decl (tree decl)
4978 tree type;
4980 type = TREE_TYPE (decl);
4981 if (type == error_mark_node)
4982 return;
4984 /* If we haven't already laid out this declaration, do so now.
4985 Note that we must not call complete type for an external object
4986 because it's type might involve templates that we are not
4987 supposed to instantiate yet. (And it's perfectly valid to say
4988 `extern X x' for some incomplete type `X'.) */
4989 if (!DECL_EXTERNAL (decl))
4990 complete_type (type);
4991 if (!DECL_SIZE (decl)
4992 && TREE_TYPE (decl) != error_mark_node
4993 && (COMPLETE_TYPE_P (type)
4994 || (TREE_CODE (type) == ARRAY_TYPE
4995 && !TYPE_DOMAIN (type)
4996 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4997 layout_decl (decl, 0);
4999 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5001 /* An automatic variable with an incomplete type: that is an error.
5002 Don't talk about array types here, since we took care of that
5003 message in grokdeclarator. */
5004 error ("storage size of %qD isn%'t known", decl);
5005 TREE_TYPE (decl) = error_mark_node;
5007 #if 0
5008 /* Keep this code around in case we later want to control debug info
5009 based on whether a type is "used". (jason 1999-11-11) */
5011 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5012 /* Let debugger know it should output info for this type. */
5013 note_debug_info_needed (ttype);
5015 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5016 note_debug_info_needed (DECL_CONTEXT (decl));
5017 #endif
5019 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5020 && DECL_SIZE (decl) != NULL_TREE
5021 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5023 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5024 constant_expression_warning (DECL_SIZE (decl));
5025 else
5027 error ("storage size of %qD isn%'t constant", decl);
5028 TREE_TYPE (decl) = error_mark_node;
5033 /* If a local static variable is declared in an inline function, or if
5034 we have a weak definition, we must endeavor to create only one
5035 instance of the variable at link-time. */
5037 void
5038 maybe_commonize_var (tree decl)
5040 /* Static data in a function with comdat linkage also has comdat
5041 linkage. */
5042 if (TREE_STATIC (decl)
5043 /* Don't mess with __FUNCTION__. */
5044 && ! DECL_ARTIFICIAL (decl)
5045 && DECL_FUNCTION_SCOPE_P (decl)
5046 && vague_linkage_p (DECL_CONTEXT (decl)))
5048 if (flag_weak)
5050 /* With weak symbols, we simply make the variable COMDAT;
5051 that will cause copies in multiple translations units to
5052 be merged. */
5053 comdat_linkage (decl);
5055 else
5057 if (DECL_INITIAL (decl) == NULL_TREE
5058 || DECL_INITIAL (decl) == error_mark_node)
5060 /* Without weak symbols, we can use COMMON to merge
5061 uninitialized variables. */
5062 TREE_PUBLIC (decl) = 1;
5063 DECL_COMMON (decl) = 1;
5065 else
5067 /* While for initialized variables, we must use internal
5068 linkage -- which means that multiple copies will not
5069 be merged. */
5070 TREE_PUBLIC (decl) = 0;
5071 DECL_COMMON (decl) = 0;
5072 warning_at (input_location, 0,
5073 "sorry: semantics of inline function static "
5074 "data %q+#D are wrong (you%'ll wind up "
5075 "with multiple copies)", decl);
5076 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5077 " you can work around this by removing "
5078 "the initializer");
5082 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
5083 /* Set it up again; we might have set DECL_INITIAL since the last
5084 time. */
5085 comdat_linkage (decl);
5088 /* Issue an error message if DECL is an uninitialized const variable. */
5090 static void
5091 check_for_uninitialized_const_var (tree decl)
5093 tree type = strip_array_types (TREE_TYPE (decl));
5095 /* ``Unless explicitly declared extern, a const object does not have
5096 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5097 7.1.6 */
5098 if (VAR_P (decl)
5099 && TREE_CODE (type) != REFERENCE_TYPE
5100 && CP_TYPE_CONST_P (type)
5101 && !DECL_INITIAL (decl))
5103 tree field = default_init_uninitialized_part (type);
5104 if (!field)
5105 return;
5107 permerror (DECL_SOURCE_LOCATION (decl),
5108 "uninitialized const %qD", decl);
5110 if (CLASS_TYPE_P (type))
5112 tree defaulted_ctor;
5114 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5115 "%q#T has no user-provided default constructor", type);
5116 defaulted_ctor = in_class_defaulted_default_constructor (type);
5117 if (defaulted_ctor)
5118 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5119 "constructor is not user-provided because it is "
5120 "explicitly defaulted in the class body");
5121 inform (0, "and the implicitly-defined constructor does not "
5122 "initialize %q+#D", field);
5127 /* Structure holding the current initializer being processed by reshape_init.
5128 CUR is a pointer to the current element being processed, END is a pointer
5129 after the last element present in the initializer. */
5130 typedef struct reshape_iterator_t
5132 constructor_elt *cur;
5133 constructor_elt *end;
5134 } reshape_iter;
5136 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5138 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5139 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5140 initialized. If there are no more such fields, the return value
5141 will be NULL. */
5143 tree
5144 next_initializable_field (tree field)
5146 while (field
5147 && (TREE_CODE (field) != FIELD_DECL
5148 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5149 || DECL_ARTIFICIAL (field)))
5150 field = DECL_CHAIN (field);
5152 return field;
5155 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5156 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5157 INTEGER_CST representing the size of the array minus one (the maximum index),
5158 or NULL_TREE if the array was declared without specifying the size. D is
5159 the iterator within the constructor. */
5161 static tree
5162 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5163 tsubst_flags_t complain)
5165 tree new_init;
5166 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5167 unsigned HOST_WIDE_INT max_index_cst = 0;
5168 unsigned HOST_WIDE_INT index;
5170 /* The initializer for an array is always a CONSTRUCTOR. */
5171 new_init = build_constructor (init_list_type_node, NULL);
5173 if (sized_array_p)
5175 /* Minus 1 is used for zero sized arrays. */
5176 if (integer_all_onesp (max_index))
5177 return new_init;
5179 if (tree_fits_uhwi_p (max_index))
5180 max_index_cst = tree_to_uhwi (max_index);
5181 /* sizetype is sign extended, not zero extended. */
5182 else
5183 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5186 /* Loop until there are no more initializers. */
5187 for (index = 0;
5188 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5189 ++index)
5191 tree elt_init;
5192 constructor_elt *old_cur = d->cur;
5194 check_array_designated_initializer (d->cur, index);
5195 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5196 complain);
5197 if (elt_init == error_mark_node)
5198 return error_mark_node;
5199 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5200 size_int (index), elt_init);
5201 if (!TREE_CONSTANT (elt_init))
5202 TREE_CONSTANT (new_init) = false;
5204 /* This can happen with an invalid initializer (c++/54501). */
5205 if (d->cur == old_cur && !sized_array_p)
5206 break;
5209 return new_init;
5212 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5213 Parameters are the same of reshape_init_r. */
5215 static tree
5216 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5218 tree max_index = NULL_TREE;
5220 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5222 if (TYPE_DOMAIN (type))
5223 max_index = array_type_nelts (type);
5225 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5228 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5229 Parameters are the same of reshape_init_r. */
5231 static tree
5232 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5234 tree max_index = NULL_TREE;
5236 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5238 if (COMPOUND_LITERAL_P (d->cur->value))
5240 tree value = d->cur->value;
5241 if (!same_type_p (TREE_TYPE (value), type))
5243 if (complain & tf_error)
5244 error ("invalid type %qT as initializer for a vector of type %qT",
5245 TREE_TYPE (d->cur->value), type);
5246 value = error_mark_node;
5248 ++d->cur;
5249 return value;
5252 /* For a vector, we initialize it as an array of the appropriate size. */
5253 if (TREE_CODE (type) == VECTOR_TYPE)
5254 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5256 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5259 /* Subroutine of reshape_init_r, processes the initializers for classes
5260 or union. Parameters are the same of reshape_init_r. */
5262 static tree
5263 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5264 tsubst_flags_t complain)
5266 tree field;
5267 tree new_init;
5269 gcc_assert (CLASS_TYPE_P (type));
5271 /* The initializer for a class is always a CONSTRUCTOR. */
5272 new_init = build_constructor (init_list_type_node, NULL);
5273 field = next_initializable_field (TYPE_FIELDS (type));
5275 if (!field)
5277 /* [dcl.init.aggr]
5279 An initializer for an aggregate member that is an
5280 empty class shall have the form of an empty
5281 initializer-list {}. */
5282 if (!first_initializer_p)
5284 if (complain & tf_error)
5285 error ("initializer for %qT must be brace-enclosed", type);
5286 return error_mark_node;
5288 return new_init;
5291 /* Loop through the initializable fields, gathering initializers. */
5292 while (d->cur != d->end)
5294 tree field_init;
5295 constructor_elt *old_cur = d->cur;
5297 /* Handle designated initializers, as an extension. */
5298 if (d->cur->index)
5300 if (d->cur->index == error_mark_node)
5301 return error_mark_node;
5303 if (TREE_CODE (d->cur->index) == INTEGER_CST)
5305 if (complain & tf_error)
5306 error ("%<[%E] =%> used in a GNU-style designated initializer"
5307 " for class %qT", d->cur->index, type);
5308 return error_mark_node;
5311 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5312 /* We already reshaped this. */
5313 gcc_assert (d->cur->index == field);
5314 else
5315 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5317 if (!field || TREE_CODE (field) != FIELD_DECL)
5319 if (complain & tf_error)
5320 error ("%qT has no non-static data member named %qD", type,
5321 d->cur->index);
5322 return error_mark_node;
5326 /* If we processed all the member of the class, we are done. */
5327 if (!field)
5328 break;
5330 field_init = reshape_init_r (TREE_TYPE (field), d,
5331 /*first_initializer_p=*/false, complain);
5332 if (field_init == error_mark_node)
5333 return error_mark_node;
5335 if (d->cur == old_cur && d->cur->index)
5337 /* This can happen with an invalid initializer for a flexible
5338 array member (c++/54441). */
5339 if (complain & tf_error)
5340 error ("invalid initializer for %q#D", field);
5341 return error_mark_node;
5344 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5346 /* [dcl.init.aggr]
5348 When a union is initialized with a brace-enclosed
5349 initializer, the braces shall only contain an
5350 initializer for the first member of the union. */
5351 if (TREE_CODE (type) == UNION_TYPE)
5352 break;
5354 field = next_initializable_field (DECL_CHAIN (field));
5357 return new_init;
5360 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5361 designators are not valid; either complain or return true to indicate
5362 that reshape_init_r should return error_mark_node. */
5364 static bool
5365 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5367 if (d->cur->index)
5369 if (complain & tf_error)
5370 error ("C99 designator %qE outside aggregate initializer",
5371 d->cur->index);
5372 else
5373 return true;
5375 return false;
5378 /* Subroutine of reshape_init, which processes a single initializer (part of
5379 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5380 iterator within the CONSTRUCTOR which points to the initializer to process.
5381 FIRST_INITIALIZER_P is true if this is the first initializer of the
5382 outermost CONSTRUCTOR node. */
5384 static tree
5385 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5386 tsubst_flags_t complain)
5388 tree init = d->cur->value;
5390 if (error_operand_p (init))
5391 return error_mark_node;
5393 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5394 && has_designator_problem (d, complain))
5395 return error_mark_node;
5397 if (TREE_CODE (type) == COMPLEX_TYPE)
5399 /* A complex type can be initialized from one or two initializers,
5400 but braces are not elided. */
5401 d->cur++;
5402 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5404 if (CONSTRUCTOR_NELTS (init) > 2)
5406 if (complain & tf_error)
5407 error ("too many initializers for %qT", type);
5408 else
5409 return error_mark_node;
5412 else if (first_initializer_p && d->cur != d->end)
5414 vec<constructor_elt, va_gc> *v = 0;
5415 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5416 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5417 if (has_designator_problem (d, complain))
5418 return error_mark_node;
5419 d->cur++;
5420 init = build_constructor (init_list_type_node, v);
5422 return init;
5425 /* A non-aggregate type is always initialized with a single
5426 initializer. */
5427 if (!CP_AGGREGATE_TYPE_P (type))
5429 /* It is invalid to initialize a non-aggregate type with a
5430 brace-enclosed initializer before C++0x.
5431 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5432 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5433 a CONSTRUCTOR (with a record type). */
5434 if (TREE_CODE (init) == CONSTRUCTOR
5435 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5437 if (SCALAR_TYPE_P (type))
5439 if (complain & tf_error)
5440 error ("braces around scalar initializer for type %qT", type);
5441 init = error_mark_node;
5443 else
5444 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5447 d->cur++;
5448 return init;
5451 /* [dcl.init.aggr]
5453 All implicit type conversions (clause _conv_) are considered when
5454 initializing the aggregate member with an initializer from an
5455 initializer-list. If the initializer can initialize a member,
5456 the member is initialized. Otherwise, if the member is itself a
5457 non-empty subaggregate, brace elision is assumed and the
5458 initializer is considered for the initialization of the first
5459 member of the subaggregate. */
5460 if (TREE_CODE (init) != CONSTRUCTOR
5461 /* But don't try this for the first initializer, since that would be
5462 looking through the outermost braces; A a2 = { a1 }; is not a
5463 valid aggregate initialization. */
5464 && !first_initializer_p
5465 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5466 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5467 complain)))
5469 d->cur++;
5470 return init;
5473 /* [dcl.init.string]
5475 A char array (whether plain char, signed char, or unsigned char)
5476 can be initialized by a string-literal (optionally enclosed in
5477 braces); a wchar_t array can be initialized by a wide
5478 string-literal (optionally enclosed in braces). */
5479 if (TREE_CODE (type) == ARRAY_TYPE
5480 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5482 tree str_init = init;
5484 /* Strip one level of braces if and only if they enclose a single
5485 element (as allowed by [dcl.init.string]). */
5486 if (!first_initializer_p
5487 && TREE_CODE (str_init) == CONSTRUCTOR
5488 && vec_safe_length (CONSTRUCTOR_ELTS (str_init)) == 1)
5490 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5493 /* If it's a string literal, then it's the initializer for the array
5494 as a whole. Otherwise, continue with normal initialization for
5495 array types (one value per array element). */
5496 if (TREE_CODE (str_init) == STRING_CST)
5498 if (has_designator_problem (d, complain))
5499 return error_mark_node;
5500 d->cur++;
5501 return str_init;
5505 /* The following cases are about aggregates. If we are not within a full
5506 initializer already, and there is not a CONSTRUCTOR, it means that there
5507 is a missing set of braces (that is, we are processing the case for
5508 which reshape_init exists). */
5509 if (!first_initializer_p)
5511 if (TREE_CODE (init) == CONSTRUCTOR)
5513 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5514 /* There is no need to reshape pointer-to-member function
5515 initializers, as they are always constructed correctly
5516 by the front end. */
5518 else if (COMPOUND_LITERAL_P (init))
5519 /* For a nested compound literal, there is no need to reshape since
5520 brace elision is not allowed. Even if we decided to allow it,
5521 we should add a call to reshape_init in finish_compound_literal,
5522 before calling digest_init, so changing this code would still
5523 not be necessary. */
5524 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5525 else
5527 ++d->cur;
5528 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5529 return reshape_init (type, init, complain);
5533 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5534 type);
5537 /* Dispatch to specialized routines. */
5538 if (CLASS_TYPE_P (type))
5539 return reshape_init_class (type, d, first_initializer_p, complain);
5540 else if (TREE_CODE (type) == ARRAY_TYPE)
5541 return reshape_init_array (type, d, complain);
5542 else if (TREE_CODE (type) == VECTOR_TYPE)
5543 return reshape_init_vector (type, d, complain);
5544 else
5545 gcc_unreachable();
5548 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5549 brace-enclosed aggregate initializer.
5551 INIT is the CONSTRUCTOR containing the list of initializers describing
5552 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5553 It may not presently match the shape of the TYPE; for example:
5555 struct S { int a; int b; };
5556 struct S a[] = { 1, 2, 3, 4 };
5558 Here INIT will hold a vector of four elements, rather than a
5559 vector of two elements, each itself a vector of two elements. This
5560 routine transforms INIT from the former form into the latter. The
5561 revised CONSTRUCTOR node is returned. */
5563 tree
5564 reshape_init (tree type, tree init, tsubst_flags_t complain)
5566 vec<constructor_elt, va_gc> *v;
5567 reshape_iter d;
5568 tree new_init;
5570 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5572 v = CONSTRUCTOR_ELTS (init);
5574 /* An empty constructor does not need reshaping, and it is always a valid
5575 initializer. */
5576 if (vec_safe_is_empty (v))
5577 return init;
5579 /* Recurse on this CONSTRUCTOR. */
5580 d.cur = &(*v)[0];
5581 d.end = d.cur + v->length ();
5583 new_init = reshape_init_r (type, &d, true, complain);
5584 if (new_init == error_mark_node)
5585 return error_mark_node;
5587 /* Make sure all the element of the constructor were used. Otherwise,
5588 issue an error about exceeding initializers. */
5589 if (d.cur != d.end)
5591 if (complain & tf_error)
5592 error ("too many initializers for %qT", type);
5593 else
5594 return error_mark_node;
5597 return new_init;
5600 /* Verify array initializer. Returns true if errors have been reported. */
5602 bool
5603 check_array_initializer (tree decl, tree type, tree init)
5605 tree element_type = TREE_TYPE (type);
5607 /* The array type itself need not be complete, because the
5608 initializer may tell us how many elements are in the array.
5609 But, the elements of the array must be complete. */
5610 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5612 if (decl)
5613 error ("elements of array %q#D have incomplete type", decl);
5614 else
5615 error ("elements of array %q#T have incomplete type", type);
5616 return true;
5618 /* A compound literal can't have variable size. */
5619 if (init && !decl
5620 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5621 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5623 error ("variable-sized compound literal");
5624 return true;
5626 return false;
5629 /* Subroutine of check_initializer; args are passed down from that function.
5630 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5632 static tree
5633 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5636 gcc_assert (stmts_are_full_exprs_p ());
5637 return build_aggr_init (decl, init, flags, tf_warning_or_error);
5640 /* Verify INIT (the initializer for DECL), and record the
5641 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5642 grok_reference_init.
5644 If the return value is non-NULL, it is an expression that must be
5645 evaluated dynamically to initialize DECL. */
5647 static tree
5648 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
5650 tree type = TREE_TYPE (decl);
5651 tree init_code = NULL;
5652 tree core_type;
5654 /* Things that are going to be initialized need to have complete
5655 type. */
5656 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5658 if (DECL_HAS_VALUE_EXPR_P (decl))
5660 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5661 it doesn't have storage to be initialized. */
5662 gcc_assert (init == NULL_TREE);
5663 return NULL_TREE;
5666 if (type == error_mark_node)
5667 /* We will have already complained. */
5668 return NULL_TREE;
5670 if (TREE_CODE (type) == ARRAY_TYPE)
5672 if (check_array_initializer (decl, type, init))
5673 return NULL_TREE;
5675 else if (!COMPLETE_TYPE_P (type))
5677 error ("%q#D has incomplete type", decl);
5678 TREE_TYPE (decl) = error_mark_node;
5679 return NULL_TREE;
5681 else
5682 /* There is no way to make a variable-sized class type in GNU C++. */
5683 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5685 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5687 int init_len = vec_safe_length (CONSTRUCTOR_ELTS (init));
5688 if (SCALAR_TYPE_P (type))
5690 if (init_len == 0)
5692 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5693 init = build_zero_init (type, NULL_TREE, false);
5695 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5697 error ("scalar object %qD requires one element in initializer",
5698 decl);
5699 TREE_TYPE (decl) = error_mark_node;
5700 return NULL_TREE;
5705 if (TREE_CODE (decl) == CONST_DECL)
5707 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5709 DECL_INITIAL (decl) = init;
5711 gcc_assert (init != NULL_TREE);
5712 init = NULL_TREE;
5714 else if (!init && DECL_REALLY_EXTERN (decl))
5716 else if (init || type_build_ctor_call (type)
5717 || TREE_CODE (type) == REFERENCE_TYPE)
5719 if (TREE_CODE (type) == REFERENCE_TYPE)
5721 init = grok_reference_init (decl, type, init, flags);
5722 flags |= LOOKUP_ALREADY_DIGESTED;
5724 else if (!init)
5725 check_for_uninitialized_const_var (decl);
5726 /* Do not reshape constructors of vectors (they don't need to be
5727 reshaped. */
5728 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5730 if (is_std_init_list (type))
5732 init = perform_implicit_conversion (type, init,
5733 tf_warning_or_error);
5734 flags |= LOOKUP_ALREADY_DIGESTED;
5736 else if (TYPE_NON_AGGREGATE_CLASS (type))
5738 /* Don't reshape if the class has constructors. */
5739 if (cxx_dialect == cxx98)
5740 error ("in C++98 %qD must be initialized by constructor, "
5741 "not by %<{...}%>",
5742 decl);
5744 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5746 error ("opaque vector types cannot be initialized");
5747 init = error_mark_node;
5749 else
5751 init = reshape_init (type, init, tf_warning_or_error);
5752 if (SCALAR_TYPE_P (type))
5753 check_narrowing (type, init);
5757 /* If DECL has an array type without a specific bound, deduce the
5758 array size from the initializer. */
5759 maybe_deduce_size_from_array_init (decl, init);
5760 type = TREE_TYPE (decl);
5761 if (type == error_mark_node)
5762 return NULL_TREE;
5764 if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5765 && !(flags & LOOKUP_ALREADY_DIGESTED)
5766 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5767 && CP_AGGREGATE_TYPE_P (type)
5768 && (CLASS_TYPE_P (type)
5769 || !TYPE_NEEDS_CONSTRUCTING (type)
5770 || type_has_extended_temps (type))))
5772 init_code = build_aggr_init_full_exprs (decl, init, flags);
5774 /* A constructor call is a non-trivial initializer even if
5775 it isn't explicitly written. */
5776 if (TREE_SIDE_EFFECTS (init_code))
5777 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
5779 /* If this is a constexpr initializer, expand_default_init will
5780 have returned an INIT_EXPR rather than a CALL_EXPR. In that
5781 case, pull the initializer back out and pass it down into
5782 store_init_value. */
5783 while (TREE_CODE (init_code) == EXPR_STMT
5784 || TREE_CODE (init_code) == CONVERT_EXPR)
5785 init_code = TREE_OPERAND (init_code, 0);
5786 if (TREE_CODE (init_code) == INIT_EXPR)
5788 init = TREE_OPERAND (init_code, 1);
5789 init_code = NULL_TREE;
5790 /* Don't call digest_init; it's unnecessary and will complain
5791 about aggregate initialization of non-aggregate classes. */
5792 flags |= LOOKUP_ALREADY_DIGESTED;
5794 else if (DECL_DECLARED_CONSTEXPR_P (decl))
5796 /* Declared constexpr, but no suitable initializer; massage
5797 init appropriately so we can pass it into store_init_value
5798 for the error. */
5799 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5800 init = finish_compound_literal (type, init,
5801 tf_warning_or_error);
5802 else if (CLASS_TYPE_P (type)
5803 && (!init || TREE_CODE (init) == TREE_LIST))
5805 init = build_functional_cast (type, init, tf_none);
5806 if (TREE_CODE (init) == TARGET_EXPR)
5807 TARGET_EXPR_DIRECT_INIT_P (init) = true;
5809 init_code = NULL_TREE;
5811 else
5812 init = NULL_TREE;
5815 if (init && TREE_CODE (init) != TREE_VEC)
5817 /* In aggregate initialization of a variable, each element
5818 initialization is a full-expression because there is no
5819 enclosing expression. */
5820 gcc_assert (stmts_are_full_exprs_p ());
5822 init_code = store_init_value (decl, init, cleanups, flags);
5824 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5825 && DECL_INITIAL (decl)
5826 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5827 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5828 warning (0, "array %qD initialized by parenthesized string literal %qE",
5829 decl, DECL_INITIAL (decl));
5830 init = NULL;
5833 else
5835 if (CLASS_TYPE_P (core_type = strip_array_types (type))
5836 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5837 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5838 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5839 /*complain=*/true);
5841 check_for_uninitialized_const_var (decl);
5844 if (init && init != error_mark_node)
5845 init_code = build2 (INIT_EXPR, type, decl, init);
5847 if (init_code && DECL_IN_AGGR_P (decl))
5849 static int explained = 0;
5851 if (cxx_dialect < cxx11)
5852 error ("initializer invalid for static member with constructor");
5853 else
5854 error ("non-constant in-class initialization invalid for static "
5855 "member %qD", decl);
5856 if (!explained)
5858 inform (input_location,
5859 "(an out of class initialization is required)");
5860 explained = 1;
5862 return NULL_TREE;
5865 return init_code;
5868 /* If DECL is not a local variable, give it RTL. */
5870 static void
5871 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5873 int toplev = toplevel_bindings_p ();
5874 int defer_p;
5875 const char *filename;
5877 /* Set the DECL_ASSEMBLER_NAME for the object. */
5878 if (asmspec)
5880 /* The `register' keyword, when used together with an
5881 asm-specification, indicates that the variable should be
5882 placed in a particular register. */
5883 if (VAR_P (decl) && DECL_REGISTER (decl))
5885 set_user_assembler_name (decl, asmspec);
5886 DECL_HARD_REGISTER (decl) = 1;
5888 else
5890 if (TREE_CODE (decl) == FUNCTION_DECL
5891 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5892 set_builtin_user_assembler_name (decl, asmspec);
5893 set_user_assembler_name (decl, asmspec);
5897 /* Handle non-variables up front. */
5898 if (!VAR_P (decl))
5900 rest_of_decl_compilation (decl, toplev, at_eof);
5901 return;
5904 /* If we see a class member here, it should be a static data
5905 member. */
5906 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5908 gcc_assert (TREE_STATIC (decl));
5909 /* An in-class declaration of a static data member should be
5910 external; it is only a declaration, and not a definition. */
5911 if (init == NULL_TREE)
5912 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5915 /* We don't create any RTL for local variables. */
5916 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5917 return;
5919 /* We defer emission of local statics until the corresponding
5920 DECL_EXPR is expanded. */
5921 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5923 /* We try to defer namespace-scope static constants so that they are
5924 not emitted into the object file unnecessarily. */
5925 filename = LOCATION_FILE (input_location);
5926 if (!DECL_VIRTUAL_P (decl)
5927 && TREE_READONLY (decl)
5928 && DECL_INITIAL (decl) != NULL_TREE
5929 && DECL_INITIAL (decl) != error_mark_node
5930 && filename != NULL
5931 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5932 && toplev
5933 && !TREE_PUBLIC (decl))
5935 /* Fool with the linkage of static consts according to #pragma
5936 interface. */
5937 struct c_fileinfo *finfo = get_fileinfo (filename);
5938 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5940 TREE_PUBLIC (decl) = 1;
5941 DECL_EXTERNAL (decl) = finfo->interface_only;
5944 defer_p = 1;
5946 /* Likewise for template instantiations. */
5947 else if (DECL_LANG_SPECIFIC (decl)
5948 && DECL_IMPLICIT_INSTANTIATION (decl))
5949 defer_p = 1;
5951 /* If we're not deferring, go ahead and assemble the variable. */
5952 if (!defer_p)
5953 rest_of_decl_compilation (decl, toplev, at_eof);
5956 /* walk_tree helper for wrap_temporary_cleanups, below. */
5958 static tree
5959 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5961 /* Stop at types or full-expression boundaries. */
5962 if (TYPE_P (*stmt_p)
5963 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5965 *walk_subtrees = 0;
5966 return NULL_TREE;
5969 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5971 tree guard = (tree)data;
5972 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5974 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5975 /* Tell honor_protect_cleanup_actions to handle this as a separate
5976 cleanup. */
5977 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5979 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5982 return NULL_TREE;
5985 /* We're initializing a local variable which has a cleanup GUARD. If there
5986 are any temporaries used in the initializer INIT of this variable, we
5987 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5988 variable will be cleaned up properly if one of them throws.
5990 Unfortunately, there's no way to express this properly in terms of
5991 nesting, as the regions for the temporaries overlap the region for the
5992 variable itself; if there are two temporaries, the variable needs to be
5993 the first thing destroyed if either of them throws. However, we only
5994 want to run the variable's cleanup if it actually got constructed. So
5995 we need to guard the temporary cleanups with the variable's cleanup if
5996 they are run on the normal path, but not if they are run on the
5997 exceptional path. We implement this by telling
5998 honor_protect_cleanup_actions to strip the variable cleanup from the
5999 exceptional path. */
6001 static void
6002 wrap_temporary_cleanups (tree init, tree guard)
6004 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6007 /* Generate code to initialize DECL (a local variable). */
6009 static void
6010 initialize_local_var (tree decl, tree init)
6012 tree type = TREE_TYPE (decl);
6013 tree cleanup;
6014 int already_used;
6016 gcc_assert (VAR_P (decl)
6017 || TREE_CODE (decl) == RESULT_DECL);
6018 gcc_assert (!TREE_STATIC (decl));
6020 if (DECL_SIZE (decl) == NULL_TREE)
6022 /* If we used it already as memory, it must stay in memory. */
6023 DECL_INITIAL (decl) = NULL_TREE;
6024 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6025 return;
6028 if (type == error_mark_node)
6029 return;
6031 /* Compute and store the initial value. */
6032 already_used = TREE_USED (decl) || TREE_USED (type);
6033 if (TREE_USED (type))
6034 DECL_READ_P (decl) = 1;
6036 /* Generate a cleanup, if necessary. */
6037 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6039 /* Perform the initialization. */
6040 if (init)
6042 if (TREE_CODE (init) == INIT_EXPR
6043 && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
6045 /* Stick simple initializers in DECL_INITIAL so that
6046 -Wno-init-self works (c++/34772). */
6047 gcc_assert (TREE_OPERAND (init, 0) == decl);
6048 DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
6050 else
6052 int saved_stmts_are_full_exprs_p;
6054 /* If we're only initializing a single object, guard the
6055 destructors of any temporaries used in its initializer with
6056 its destructor. This isn't right for arrays because each
6057 element initialization is a full-expression. */
6058 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6059 wrap_temporary_cleanups (init, cleanup);
6061 gcc_assert (building_stmt_list_p ());
6062 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6063 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6064 finish_expr_stmt (init);
6065 current_stmt_tree ()->stmts_are_full_exprs_p =
6066 saved_stmts_are_full_exprs_p;
6070 /* Set this to 0 so we can tell whether an aggregate which was
6071 initialized was ever used. Don't do this if it has a
6072 destructor, so we don't complain about the 'resource
6073 allocation is initialization' idiom. Now set
6074 attribute((unused)) on types so decls of that type will be
6075 marked used. (see TREE_USED, above.) */
6076 if (TYPE_NEEDS_CONSTRUCTING (type)
6077 && ! already_used
6078 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6079 && DECL_NAME (decl))
6080 TREE_USED (decl) = 0;
6081 else if (already_used)
6082 TREE_USED (decl) = 1;
6084 if (cleanup)
6085 finish_decl_cleanup (decl, cleanup);
6088 /* DECL is a VAR_DECL for a compiler-generated variable with static
6089 storage duration (like a virtual table) whose initializer is a
6090 compile-time constant. Initialize the variable and provide it to the
6091 back end. */
6093 void
6094 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6096 tree init;
6097 gcc_assert (DECL_ARTIFICIAL (decl));
6098 init = build_constructor (TREE_TYPE (decl), v);
6099 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6100 DECL_INITIAL (decl) = init;
6101 DECL_INITIALIZED_P (decl) = 1;
6102 determine_visibility (decl);
6103 layout_var_decl (decl);
6104 maybe_commonize_var (decl);
6105 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6108 /* INIT is the initializer for a variable, as represented by the
6109 parser. Returns true iff INIT is type-dependent. */
6111 static bool
6112 type_dependent_init_p (tree init)
6114 if (TREE_CODE (init) == TREE_LIST)
6115 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6116 return any_type_dependent_elements_p (init);
6117 else if (TREE_CODE (init) == CONSTRUCTOR)
6118 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6120 vec<constructor_elt, va_gc> *elts;
6121 size_t nelts;
6122 size_t i;
6124 elts = CONSTRUCTOR_ELTS (init);
6125 nelts = vec_safe_length (elts);
6126 for (i = 0; i < nelts; ++i)
6127 if (type_dependent_init_p ((*elts)[i].value))
6128 return true;
6130 else
6131 /* It must be a simple expression, e.g., int i = 3; */
6132 return type_dependent_expression_p (init);
6134 return false;
6137 /* INIT is the initializer for a variable, as represented by the
6138 parser. Returns true iff INIT is value-dependent. */
6140 static bool
6141 value_dependent_init_p (tree init)
6143 if (TREE_CODE (init) == TREE_LIST)
6144 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6145 return any_value_dependent_elements_p (init);
6146 else if (TREE_CODE (init) == CONSTRUCTOR)
6147 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6149 vec<constructor_elt, va_gc> *elts;
6150 size_t nelts;
6151 size_t i;
6153 elts = CONSTRUCTOR_ELTS (init);
6154 nelts = vec_safe_length (elts);
6155 for (i = 0; i < nelts; ++i)
6156 if (value_dependent_init_p ((*elts)[i].value))
6157 return true;
6159 else
6160 /* It must be a simple expression, e.g., int i = 3; */
6161 return value_dependent_expression_p (init);
6163 return false;
6166 /* Finish processing of a declaration;
6167 install its line number and initial value.
6168 If the length of an array type is not known before,
6169 it must be determined now, from the initial value, or it is an error.
6171 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6172 true, then INIT is an integral constant expression.
6174 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6175 if the (init) syntax was used. */
6177 void
6178 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6179 tree asmspec_tree, int flags)
6181 tree type;
6182 vec<tree, va_gc> *cleanups = NULL;
6183 const char *asmspec = NULL;
6184 int was_readonly = 0;
6185 bool var_definition_p = false;
6186 tree auto_node;
6188 if (decl == error_mark_node)
6189 return;
6190 else if (! decl)
6192 if (init)
6193 error ("assignment (not initialization) in declaration");
6194 return;
6197 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6198 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6199 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6201 type = TREE_TYPE (decl);
6202 if (type == error_mark_node)
6203 return;
6205 /* If a name was specified, get the string. */
6206 if (at_namespace_scope_p ())
6207 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6208 if (asmspec_tree && asmspec_tree != error_mark_node)
6209 asmspec = TREE_STRING_POINTER (asmspec_tree);
6211 if (current_class_type
6212 && CP_DECL_CONTEXT (decl) == current_class_type
6213 && TYPE_BEING_DEFINED (current_class_type)
6214 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6215 && (DECL_INITIAL (decl) || init))
6216 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6218 if (TREE_CODE (decl) != FUNCTION_DECL
6219 && (auto_node = type_uses_auto (type)))
6221 tree d_init;
6222 if (init == NULL_TREE)
6224 if (DECL_LANG_SPECIFIC (decl)
6225 && DECL_TEMPLATE_INSTANTIATION (decl)
6226 && !DECL_TEMPLATE_INSTANTIATED (decl))
6228 /* init is null because we're deferring instantiating the
6229 initializer until we need it. Well, we need it now. */
6230 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6231 return;
6234 error ("declaration of %q#D has no initializer", decl);
6235 TREE_TYPE (decl) = error_mark_node;
6236 return;
6238 d_init = init;
6239 if (TREE_CODE (d_init) == TREE_LIST)
6240 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6241 tf_warning_or_error);
6242 d_init = resolve_nondeduced_context (d_init);
6243 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6244 auto_node);
6245 if (type == error_mark_node)
6246 return;
6247 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6250 if (!ensure_literal_type_for_constexpr_object (decl))
6251 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6253 if (VAR_P (decl)
6254 && DECL_CLASS_SCOPE_P (decl)
6255 && DECL_INITIALIZED_IN_CLASS_P (decl))
6256 check_static_variable_definition (decl, type);
6258 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6260 tree clone;
6261 if (init == ridpointers[(int)RID_DELETE])
6263 /* FIXME check this is 1st decl. */
6264 DECL_DELETED_FN (decl) = 1;
6265 DECL_DECLARED_INLINE_P (decl) = 1;
6266 DECL_INITIAL (decl) = error_mark_node;
6267 FOR_EACH_CLONE (clone, decl)
6269 DECL_DELETED_FN (clone) = 1;
6270 DECL_DECLARED_INLINE_P (clone) = 1;
6271 DECL_INITIAL (clone) = error_mark_node;
6273 init = NULL_TREE;
6275 else if (init == ridpointers[(int)RID_DEFAULT])
6277 if (defaultable_fn_check (decl))
6278 DECL_DEFAULTED_FN (decl) = 1;
6279 else
6280 DECL_INITIAL (decl) = NULL_TREE;
6284 if (init && VAR_P (decl))
6286 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6287 /* If DECL is a reference, then we want to know whether init is a
6288 reference constant; init_const_expr_p as passed tells us whether
6289 it's an rvalue constant. */
6290 if (TREE_CODE (type) == REFERENCE_TYPE)
6291 init_const_expr_p = potential_constant_expression (init);
6292 if (init_const_expr_p)
6294 /* Set these flags now for templates. We'll update the flags in
6295 store_init_value for instantiations. */
6296 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6297 if (decl_maybe_constant_var_p (decl))
6298 TREE_CONSTANT (decl) = 1;
6302 if (processing_template_decl)
6304 bool type_dependent_p;
6306 /* Add this declaration to the statement-tree. */
6307 if (at_function_scope_p ())
6308 add_decl_expr (decl);
6310 type_dependent_p = dependent_type_p (type);
6312 if (check_for_bare_parameter_packs (init))
6314 init = NULL_TREE;
6315 DECL_INITIAL (decl) = NULL_TREE;
6318 /* Generally, initializers in templates are expanded when the
6319 template is instantiated. But, if DECL is a variable constant
6320 then it can be used in future constant expressions, so its value
6321 must be available. */
6323 if (!VAR_P (decl) || dependent_type_p (type))
6324 /* We can't do anything if the decl has dependent type. */;
6325 else if (init
6326 && init_const_expr_p
6327 && !type_dependent_p
6328 && decl_maybe_constant_var_p (decl)
6329 && !type_dependent_init_p (init)
6330 && !value_dependent_init_p (init))
6332 /* This variable seems to be a non-dependent constant, so process
6333 its initializer. If check_initializer returns non-null the
6334 initialization wasn't constant after all. */
6335 tree init_code;
6336 cleanups = make_tree_vector ();
6337 init_code = check_initializer (decl, init, flags, &cleanups);
6338 if (init_code == NULL_TREE)
6339 init = NULL_TREE;
6340 release_tree_vector (cleanups);
6342 else if (!DECL_PRETTY_FUNCTION_P (decl))
6344 /* Deduce array size even if the initializer is dependent. */
6345 maybe_deduce_size_from_array_init (decl, init);
6346 /* And complain about multiple initializers. */
6347 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6348 && !MAYBE_CLASS_TYPE_P (type))
6349 init = build_x_compound_expr_from_list (init, ELK_INIT,
6350 tf_warning_or_error);
6353 if (init)
6354 DECL_INITIAL (decl) = init;
6355 return;
6358 /* Just store non-static data member initializers for later. */
6359 if (init && TREE_CODE (decl) == FIELD_DECL)
6360 DECL_INITIAL (decl) = init;
6362 /* Take care of TYPE_DECLs up front. */
6363 if (TREE_CODE (decl) == TYPE_DECL)
6365 if (type != error_mark_node
6366 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6368 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6369 warning (0, "shadowing previous type declaration of %q#D", decl);
6370 set_identifier_type_value (DECL_NAME (decl), decl);
6373 /* If we have installed this as the canonical typedef for this
6374 type, and that type has not been defined yet, delay emitting
6375 the debug information for it, as we will emit it later. */
6376 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6377 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6378 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6380 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6381 at_eof);
6382 return;
6385 /* A reference will be modified here, as it is initialized. */
6386 if (! DECL_EXTERNAL (decl)
6387 && TREE_READONLY (decl)
6388 && TREE_CODE (type) == REFERENCE_TYPE)
6390 was_readonly = 1;
6391 TREE_READONLY (decl) = 0;
6394 if (VAR_P (decl))
6396 /* If this is a local variable that will need a mangled name,
6397 register it now. We must do this before processing the
6398 initializer for the variable, since the initialization might
6399 require a guard variable, and since the mangled name of the
6400 guard variable will depend on the mangled name of this
6401 variable. */
6402 if (DECL_FUNCTION_SCOPE_P (decl)
6403 && TREE_STATIC (decl)
6404 && !DECL_ARTIFICIAL (decl))
6406 push_local_name (decl);
6407 if (DECL_CONSTRUCTOR_P (current_function_decl)
6408 || DECL_DESTRUCTOR_P (current_function_decl))
6409 /* Normally local_decls is populated during GIMPLE lowering,
6410 but [cd]tors are never actually compiled directly. We need
6411 to put statics on the list so we can deal with the label
6412 address extension. FIXME. */
6413 add_local_decl (cfun, decl);
6416 /* Convert the initializer to the type of DECL, if we have not
6417 already initialized DECL. */
6418 if (!DECL_INITIALIZED_P (decl)
6419 /* If !DECL_EXTERNAL then DECL is being defined. In the
6420 case of a static data member initialized inside the
6421 class-specifier, there can be an initializer even if DECL
6422 is *not* defined. */
6423 && (!DECL_EXTERNAL (decl) || init))
6425 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6427 tree jclass
6428 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6429 /* Allow libjava/prims.cc define primitive classes. */
6430 if (init != NULL_TREE
6431 || jclass == NULL_TREE
6432 || TREE_CODE (jclass) != TYPE_DECL
6433 || !POINTER_TYPE_P (TREE_TYPE (jclass))
6434 || !same_type_ignoring_top_level_qualifiers_p
6435 (type, TREE_TYPE (TREE_TYPE (jclass))))
6436 error ("Java object %qD not allocated with %<new%>", decl);
6437 init = NULL_TREE;
6439 cleanups = make_tree_vector ();
6440 init = check_initializer (decl, init, flags, &cleanups);
6442 /* Handle:
6444 [dcl.init]
6446 The memory occupied by any object of static storage
6447 duration is zero-initialized at program startup before
6448 any other initialization takes place.
6450 We cannot create an appropriate initializer until after
6451 the type of DECL is finalized. If DECL_INITIAL is set,
6452 then the DECL is statically initialized, and any
6453 necessary zero-initialization has already been performed. */
6454 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6455 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6456 /*nelts=*/NULL_TREE,
6457 /*static_storage_p=*/true);
6458 /* Remember that the initialization for this variable has
6459 taken place. */
6460 DECL_INITIALIZED_P (decl) = 1;
6461 /* This declaration is the definition of this variable,
6462 unless we are initializing a static data member within
6463 the class specifier. */
6464 if (!DECL_EXTERNAL (decl))
6465 var_definition_p = true;
6467 /* If the variable has an array type, lay out the type, even if
6468 there is no initializer. It is valid to index through the
6469 array, and we must get TYPE_ALIGN set correctly on the array
6470 type. */
6471 else if (TREE_CODE (type) == ARRAY_TYPE)
6472 layout_type (type);
6474 if (TREE_STATIC (decl)
6475 && !at_function_scope_p ()
6476 && current_function_decl == NULL)
6477 /* So decl is a global variable or a static member of a
6478 non local class. Record the types it uses
6479 so that we can decide later to emit debug info for them. */
6480 record_types_used_by_current_var_decl (decl);
6482 else if (TREE_CODE (decl) == FIELD_DECL
6483 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6484 error ("non-static data member %qD has Java class type", decl);
6486 /* Add this declaration to the statement-tree. This needs to happen
6487 after the call to check_initializer so that the DECL_EXPR for a
6488 reference temp is added before the DECL_EXPR for the reference itself. */
6489 if (DECL_FUNCTION_SCOPE_P (decl))
6490 add_decl_expr (decl);
6492 /* Let the middle end know about variables and functions -- but not
6493 static data members in uninstantiated class templates. */
6494 if (VAR_OR_FUNCTION_DECL_P (decl))
6496 if (VAR_P (decl))
6498 layout_var_decl (decl);
6499 maybe_commonize_var (decl);
6502 /* This needs to happen after the linkage is set. */
6503 determine_visibility (decl);
6505 if (var_definition_p && TREE_STATIC (decl))
6507 /* If a TREE_READONLY variable needs initialization
6508 at runtime, it is no longer readonly and we need to
6509 avoid MEM_READONLY_P being set on RTL created for it. */
6510 if (init)
6512 if (TREE_READONLY (decl))
6513 TREE_READONLY (decl) = 0;
6514 was_readonly = 0;
6516 else if (was_readonly)
6517 TREE_READONLY (decl) = 1;
6519 /* Likewise if it needs destruction. */
6520 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6521 TREE_READONLY (decl) = 0;
6524 make_rtl_for_nonlocal_decl (decl, init, asmspec);
6526 /* Check for abstractness of the type. Notice that there is no
6527 need to strip array types here since the check for those types
6528 is already done within create_array_type_for_decl. */
6529 abstract_virtuals_error (decl, type);
6531 if (TREE_TYPE (decl) == error_mark_node)
6532 /* No initialization required. */
6534 else if (TREE_CODE (decl) == FUNCTION_DECL)
6536 if (init)
6538 if (init == ridpointers[(int)RID_DEFAULT])
6540 /* An out-of-class default definition is defined at
6541 the point where it is explicitly defaulted. */
6542 if (DECL_DELETED_FN (decl))
6543 maybe_explain_implicit_delete (decl);
6544 else if (DECL_INITIAL (decl) == error_mark_node)
6545 synthesize_method (decl);
6547 else
6548 error ("function %q#D is initialized like a variable", decl);
6550 /* else no initialization required. */
6552 else if (DECL_EXTERNAL (decl)
6553 && ! (DECL_LANG_SPECIFIC (decl)
6554 && DECL_NOT_REALLY_EXTERN (decl)))
6556 if (init)
6557 DECL_INITIAL (decl) = init;
6559 /* A variable definition. */
6560 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6561 /* Initialize the local variable. */
6562 initialize_local_var (decl, init);
6564 /* If a variable is defined, and then a subsequent
6565 definition with external linkage is encountered, we will
6566 get here twice for the same variable. We want to avoid
6567 calling expand_static_init more than once. For variables
6568 that are not static data members, we can call
6569 expand_static_init only when we actually process the
6570 initializer. It is not legal to redeclare a static data
6571 member, so this issue does not arise in that case. */
6572 else if (var_definition_p && TREE_STATIC (decl))
6573 expand_static_init (decl, init);
6576 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6577 reference, insert it in the statement-tree now. */
6578 if (cleanups)
6580 unsigned i; tree t;
6581 FOR_EACH_VEC_ELT (*cleanups, i, t)
6582 push_cleanup (decl, t, false);
6583 release_tree_vector (cleanups);
6586 if (was_readonly)
6587 TREE_READONLY (decl) = 1;
6589 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6592 /* Returns a declaration for a VAR_DECL as if:
6594 extern "C" TYPE NAME;
6596 had been seen. Used to create compiler-generated global
6597 variables. */
6599 static tree
6600 declare_global_var (tree name, tree type)
6602 tree decl;
6604 push_to_top_level ();
6605 decl = build_decl (input_location, VAR_DECL, name, type);
6606 TREE_PUBLIC (decl) = 1;
6607 DECL_EXTERNAL (decl) = 1;
6608 DECL_ARTIFICIAL (decl) = 1;
6609 /* If the user has explicitly declared this variable (perhaps
6610 because the code we are compiling is part of a low-level runtime
6611 library), then it is possible that our declaration will be merged
6612 with theirs by pushdecl. */
6613 decl = pushdecl (decl);
6614 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6615 pop_from_top_level ();
6617 return decl;
6620 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6621 if "__cxa_atexit" is not being used) corresponding to the function
6622 to be called when the program exits. */
6624 static tree
6625 get_atexit_fn_ptr_type (void)
6627 tree fn_type;
6629 if (!atexit_fn_ptr_type_node)
6631 tree arg_type;
6632 if (flag_use_cxa_atexit
6633 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6634 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
6635 arg_type = ptr_type_node;
6636 else
6637 /* The parameter to "atexit" is "void (*)(void)". */
6638 arg_type = NULL_TREE;
6640 fn_type = build_function_type_list (void_type_node,
6641 arg_type, NULL_TREE);
6642 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6645 return atexit_fn_ptr_type_node;
6648 /* Returns a pointer to the `atexit' function. Note that if
6649 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6650 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6652 static tree
6653 get_atexit_node (void)
6655 tree atexit_fndecl;
6656 tree fn_type;
6657 tree fn_ptr_type;
6658 const char *name;
6659 bool use_aeabi_atexit;
6661 if (atexit_node)
6662 return atexit_node;
6664 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6666 /* The declaration for `__cxa_atexit' is:
6668 int __cxa_atexit (void (*)(void *), void *, void *)
6670 We build up the argument types and then the function type
6671 itself. */
6672 tree argtype0, argtype1, argtype2;
6674 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6675 /* First, build the pointer-to-function type for the first
6676 argument. */
6677 fn_ptr_type = get_atexit_fn_ptr_type ();
6678 /* Then, build the rest of the argument types. */
6679 argtype2 = ptr_type_node;
6680 if (use_aeabi_atexit)
6682 argtype1 = fn_ptr_type;
6683 argtype0 = ptr_type_node;
6685 else
6687 argtype1 = ptr_type_node;
6688 argtype0 = fn_ptr_type;
6690 /* And the final __cxa_atexit type. */
6691 fn_type = build_function_type_list (integer_type_node,
6692 argtype0, argtype1, argtype2,
6693 NULL_TREE);
6694 if (use_aeabi_atexit)
6695 name = "__aeabi_atexit";
6696 else
6697 name = "__cxa_atexit";
6699 else
6701 /* The declaration for `atexit' is:
6703 int atexit (void (*)());
6705 We build up the argument types and then the function type
6706 itself. */
6707 fn_ptr_type = get_atexit_fn_ptr_type ();
6708 /* Build the final atexit type. */
6709 fn_type = build_function_type_list (integer_type_node,
6710 fn_ptr_type, NULL_TREE);
6711 name = "atexit";
6714 /* Now, build the function declaration. */
6715 push_lang_context (lang_name_c);
6716 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
6717 mark_used (atexit_fndecl);
6718 pop_lang_context ();
6719 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
6721 return atexit_node;
6724 /* Like get_atexit_node, but for thread-local cleanups. */
6726 static tree
6727 get_thread_atexit_node (void)
6729 /* The declaration for `__cxa_thread_atexit' is:
6731 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
6732 tree fn_type = build_function_type_list (integer_type_node,
6733 get_atexit_fn_ptr_type (),
6734 ptr_type_node, ptr_type_node,
6735 NULL_TREE);
6737 /* Now, build the function declaration. */
6738 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
6739 ECF_LEAF | ECF_NOTHROW);
6740 return decay_conversion (atexit_fndecl, tf_warning_or_error);
6743 /* Returns the __dso_handle VAR_DECL. */
6745 static tree
6746 get_dso_handle_node (void)
6748 if (dso_handle_node)
6749 return dso_handle_node;
6751 /* Declare the variable. */
6752 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6753 ptr_type_node);
6755 #ifdef HAVE_GAS_HIDDEN
6756 if (dso_handle_node != error_mark_node)
6758 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6759 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6761 #endif
6763 return dso_handle_node;
6766 /* Begin a new function with internal linkage whose job will be simply
6767 to destroy some particular variable. */
6769 static GTY(()) int start_cleanup_cnt;
6771 static tree
6772 start_cleanup_fn (void)
6774 char name[32];
6775 tree fntype;
6776 tree fndecl;
6777 bool use_cxa_atexit = flag_use_cxa_atexit
6778 && !targetm.cxx.use_atexit_for_cxa_atexit ();
6780 push_to_top_level ();
6782 /* No need to mangle this. */
6783 push_lang_context (lang_name_c);
6785 /* Build the name of the function. */
6786 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6787 /* Build the function declaration. */
6788 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6789 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6790 /* It's a function with internal linkage, generated by the
6791 compiler. */
6792 TREE_PUBLIC (fndecl) = 0;
6793 DECL_ARTIFICIAL (fndecl) = 1;
6794 /* Make the function `inline' so that it is only emitted if it is
6795 actually needed. It is unlikely that it will be inlined, since
6796 it is only called via a function pointer, but we avoid unnecessary
6797 emissions this way. */
6798 DECL_DECLARED_INLINE_P (fndecl) = 1;
6799 DECL_INTERFACE_KNOWN (fndecl) = 1;
6800 /* Build the parameter. */
6801 if (use_cxa_atexit)
6803 tree parmdecl;
6805 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6806 DECL_CONTEXT (parmdecl) = fndecl;
6807 TREE_USED (parmdecl) = 1;
6808 DECL_READ_P (parmdecl) = 1;
6809 DECL_ARGUMENTS (fndecl) = parmdecl;
6812 pushdecl (fndecl);
6813 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6815 pop_lang_context ();
6817 return current_function_decl;
6820 /* Finish the cleanup function begun by start_cleanup_fn. */
6822 static void
6823 end_cleanup_fn (void)
6825 expand_or_defer_fn (finish_function (0));
6827 pop_from_top_level ();
6830 /* Generate code to handle the destruction of DECL, an object with
6831 static storage duration. */
6833 tree
6834 register_dtor_fn (tree decl)
6836 tree cleanup;
6837 tree addr;
6838 tree compound_stmt;
6839 tree fcall;
6840 tree type;
6841 bool ob_parm, dso_parm, use_dtor;
6842 tree arg0, arg1, arg2;
6843 tree atex_node;
6845 type = TREE_TYPE (decl);
6846 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6847 return void_zero_node;
6849 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
6850 "__aeabi_atexit"), and DECL is a class object, we can just pass the
6851 destructor to "__cxa_atexit"; we don't have to build a temporary
6852 function to do the cleanup. */
6853 dso_parm = (flag_use_cxa_atexit
6854 && !targetm.cxx.use_atexit_for_cxa_atexit ());
6855 ob_parm = (DECL_THREAD_LOCAL_P (decl) || dso_parm);
6856 use_dtor = ob_parm && CLASS_TYPE_P (type);
6857 if (use_dtor)
6859 int idx;
6861 /* Find the destructor. */
6862 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6863 gcc_assert (idx >= 0);
6864 cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
6865 /* Make sure it is accessible. */
6866 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
6867 tf_warning_or_error);
6869 else
6871 /* Call build_cleanup before we enter the anonymous function so
6872 that any access checks will be done relative to the current
6873 scope, rather than the scope of the anonymous function. */
6874 build_cleanup (decl);
6876 /* Now start the function. */
6877 cleanup = start_cleanup_fn ();
6879 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6880 to the original function, rather than the anonymous one. That
6881 will make the back end think that nested functions are in use,
6882 which causes confusion. */
6883 push_deferring_access_checks (dk_no_check);
6884 fcall = build_cleanup (decl);
6885 pop_deferring_access_checks ();
6887 /* Create the body of the anonymous function. */
6888 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6889 finish_expr_stmt (fcall);
6890 finish_compound_stmt (compound_stmt);
6891 end_cleanup_fn ();
6894 /* Call atexit with the cleanup function. */
6895 mark_used (cleanup);
6896 cleanup = build_address (cleanup);
6898 if (DECL_THREAD_LOCAL_P (decl))
6899 atex_node = get_thread_atexit_node ();
6900 else
6901 atex_node = get_atexit_node ();
6903 if (use_dtor)
6905 /* We must convert CLEANUP to the type that "__cxa_atexit"
6906 expects. */
6907 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6908 /* "__cxa_atexit" will pass the address of DECL to the
6909 cleanup function. */
6910 mark_used (decl);
6911 addr = build_address (decl);
6912 /* The declared type of the parameter to "__cxa_atexit" is
6913 "void *". For plain "T*", we could just let the
6914 machinery in cp_build_function_call convert it -- but if the
6915 type is "cv-qualified T *", then we need to convert it
6916 before passing it in, to avoid spurious errors. */
6917 addr = build_nop (ptr_type_node, addr);
6919 else
6920 /* Since the cleanup functions we build ignore the address
6921 they're given, there's no reason to pass the actual address
6922 in, and, in general, it's cheaper to pass NULL than any
6923 other value. */
6924 addr = null_pointer_node;
6926 if (dso_parm)
6927 arg2 = cp_build_addr_expr (get_dso_handle_node (),
6928 tf_warning_or_error);
6929 else if (ob_parm)
6930 /* Just pass NULL to the dso handle parm if we don't actually
6931 have a DSO handle on this target. */
6932 arg2 = null_pointer_node;
6933 else
6934 arg2 = NULL_TREE;
6936 if (ob_parm)
6938 if (!DECL_THREAD_LOCAL_P (decl)
6939 && targetm.cxx.use_aeabi_atexit ())
6941 arg1 = cleanup;
6942 arg0 = addr;
6944 else
6946 arg1 = addr;
6947 arg0 = cleanup;
6950 else
6952 arg0 = cleanup;
6953 arg1 = NULL_TREE;
6955 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
6956 arg0, arg1, arg2, NULL_TREE);
6959 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
6960 is its initializer. Generate code to handle the construction
6961 and destruction of DECL. */
6963 static void
6964 expand_static_init (tree decl, tree init)
6966 gcc_assert (VAR_P (decl));
6967 gcc_assert (TREE_STATIC (decl));
6969 /* Some variables require no dynamic initialization. */
6970 if (!init
6971 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6973 /* Make sure the destructor is callable. */
6974 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6975 return;
6978 if (DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
6979 && !DECL_FUNCTION_SCOPE_P (decl))
6981 if (init)
6982 error ("non-local variable %qD declared %<__thread%> "
6983 "needs dynamic initialization", decl);
6984 else
6985 error ("non-local variable %qD declared %<__thread%> "
6986 "has a non-trivial destructor", decl);
6987 static bool informed;
6988 if (!informed)
6990 inform (DECL_SOURCE_LOCATION (decl),
6991 "C++11 %<thread_local%> allows dynamic initialization "
6992 "and destruction");
6993 informed = true;
6995 return;
6998 if (DECL_FUNCTION_SCOPE_P (decl))
7000 /* Emit code to perform this initialization but once. */
7001 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
7002 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
7003 tree guard, guard_addr;
7004 tree flag, begin;
7005 /* We don't need thread-safety code for thread-local vars. */
7006 bool thread_guard = (flag_threadsafe_statics
7007 && !DECL_THREAD_LOCAL_P (decl));
7009 /* Emit code to perform this initialization but once. This code
7010 looks like:
7012 static <type> guard;
7013 if (!guard.first_byte) {
7014 if (__cxa_guard_acquire (&guard)) {
7015 bool flag = false;
7016 try {
7017 // Do initialization.
7018 flag = true; __cxa_guard_release (&guard);
7019 // Register variable for destruction at end of program.
7020 } catch {
7021 if (!flag) __cxa_guard_abort (&guard);
7025 Note that the `flag' variable is only set to 1 *after* the
7026 initialization is complete. This ensures that an exception,
7027 thrown during the construction, will cause the variable to
7028 reinitialized when we pass through this code again, as per:
7030 [stmt.dcl]
7032 If the initialization exits by throwing an exception, the
7033 initialization is not complete, so it will be tried again
7034 the next time control enters the declaration.
7036 This process should be thread-safe, too; multiple threads
7037 should not be able to initialize the variable more than
7038 once. */
7040 /* Create the guard variable. */
7041 guard = get_guard (decl);
7043 /* This optimization isn't safe on targets with relaxed memory
7044 consistency. On such targets we force synchronization in
7045 __cxa_guard_acquire. */
7046 if (!targetm.relaxed_ordering || !thread_guard)
7048 /* Begin the conditional initialization. */
7049 if_stmt = begin_if_stmt ();
7050 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
7051 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7054 if (thread_guard)
7056 tree vfntype = NULL_TREE;
7057 tree acquire_name, release_name, abort_name;
7058 tree acquire_fn, release_fn, abort_fn;
7059 guard_addr = build_address (guard);
7061 acquire_name = get_identifier ("__cxa_guard_acquire");
7062 release_name = get_identifier ("__cxa_guard_release");
7063 abort_name = get_identifier ("__cxa_guard_abort");
7064 acquire_fn = identifier_global_value (acquire_name);
7065 release_fn = identifier_global_value (release_name);
7066 abort_fn = identifier_global_value (abort_name);
7067 if (!acquire_fn)
7068 acquire_fn = push_library_fn
7069 (acquire_name, build_function_type_list (integer_type_node,
7070 TREE_TYPE (guard_addr),
7071 NULL_TREE),
7072 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
7073 if (!release_fn || !abort_fn)
7074 vfntype = build_function_type_list (void_type_node,
7075 TREE_TYPE (guard_addr),
7076 NULL_TREE);
7077 if (!release_fn)
7078 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
7079 ECF_NOTHROW | ECF_LEAF);
7080 if (!abort_fn)
7081 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
7082 ECF_NOTHROW | ECF_LEAF);
7084 inner_if_stmt = begin_if_stmt ();
7085 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
7086 inner_if_stmt);
7088 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7089 begin = get_target_expr (boolean_false_node);
7090 flag = TARGET_EXPR_SLOT (begin);
7092 TARGET_EXPR_CLEANUP (begin)
7093 = build3 (COND_EXPR, void_type_node, flag,
7094 void_zero_node,
7095 build_call_n (abort_fn, 1, guard_addr));
7096 CLEANUP_EH_ONLY (begin) = 1;
7098 /* Do the initialization itself. */
7099 init = add_stmt_to_compound (begin, init);
7100 init = add_stmt_to_compound
7101 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7102 init = add_stmt_to_compound
7103 (init, build_call_n (release_fn, 1, guard_addr));
7105 else
7106 init = add_stmt_to_compound (init, set_guard (guard));
7108 /* Use atexit to register a function for destroying this static
7109 variable. */
7110 init = add_stmt_to_compound (init, register_dtor_fn (decl));
7112 finish_expr_stmt (init);
7114 if (thread_guard)
7116 finish_compound_stmt (inner_then_clause);
7117 finish_then_clause (inner_if_stmt);
7118 finish_if_stmt (inner_if_stmt);
7121 if (!targetm.relaxed_ordering || !thread_guard)
7123 finish_compound_stmt (then_clause);
7124 finish_then_clause (if_stmt);
7125 finish_if_stmt (if_stmt);
7128 else if (DECL_THREAD_LOCAL_P (decl))
7129 tls_aggregates = tree_cons (init, decl, tls_aggregates);
7130 else
7131 static_aggregates = tree_cons (init, decl, static_aggregates);
7135 /* Make TYPE a complete type based on INITIAL_VALUE.
7136 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7137 2 if there was no information (in which case assume 0 if DO_DEFAULT),
7138 3 if the initializer list is empty (in pedantic mode). */
7141 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7143 int failure;
7144 tree type, elt_type;
7146 /* Don't get confused by a CONSTRUCTOR for some other type. */
7147 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
7148 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value))
7149 return 1;
7151 if (initial_value)
7153 unsigned HOST_WIDE_INT i;
7154 tree value;
7156 /* An array of character type can be initialized from a
7157 brace-enclosed string constant.
7159 FIXME: this code is duplicated from reshape_init. Probably
7160 we should just call reshape_init here? */
7161 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7162 && TREE_CODE (initial_value) == CONSTRUCTOR
7163 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
7165 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
7166 tree value = (*v)[0].value;
7168 if (TREE_CODE (value) == STRING_CST
7169 && v->length () == 1)
7170 initial_value = value;
7173 /* If any of the elements are parameter packs, we can't actually
7174 complete this type now because the array size is dependent. */
7175 if (TREE_CODE (initial_value) == CONSTRUCTOR)
7177 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
7178 i, value)
7180 if (PACK_EXPANSION_P (value))
7181 return 0;
7186 failure = complete_array_type (ptype, initial_value, do_default);
7188 /* We can create the array before the element type is complete, which
7189 means that we didn't have these two bits set in the original type
7190 either. In completing the type, we are expected to propagate these
7191 bits. See also complete_type which does the same thing for arrays
7192 of fixed size. */
7193 type = *ptype;
7194 if (TYPE_DOMAIN (type))
7196 elt_type = TREE_TYPE (type);
7197 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7198 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7199 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7202 return failure;
7205 /* As above, but either give an error or reject zero-size arrays, depending
7206 on COMPLAIN. */
7209 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7210 bool do_default, tsubst_flags_t complain)
7212 int failure;
7213 bool sfinae = !(complain & tf_error);
7214 /* In SFINAE context we can't be lenient about zero-size arrays. */
7215 if (sfinae)
7216 ++pedantic;
7217 failure = cp_complete_array_type (ptype, initial_value, do_default);
7218 if (sfinae)
7219 --pedantic;
7220 if (failure)
7222 if (sfinae)
7223 /* Not an error. */;
7224 else if (failure == 1)
7225 error ("initializer fails to determine size of %qT", *ptype);
7226 else if (failure == 2)
7228 if (do_default)
7229 error ("array size missing in %qT", *ptype);
7231 else if (failure == 3)
7232 error ("zero-size array %qT", *ptype);
7233 *ptype = error_mark_node;
7235 return failure;
7238 /* Return zero if something is declared to be a member of type
7239 CTYPE when in the context of CUR_TYPE. STRING is the error
7240 message to print in that case. Otherwise, quietly return 1. */
7242 static int
7243 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7245 if (ctype && ctype != cur_type)
7247 if (flags == DTOR_FLAG)
7248 error ("destructor for alien class %qT cannot be a member", ctype);
7249 else
7250 error ("constructor for alien class %qT cannot be a member", ctype);
7251 return 0;
7253 return 1;
7256 /* Subroutine of `grokdeclarator'. */
7258 /* Generate errors possibly applicable for a given set of specifiers.
7259 This is for ARM $7.1.2. */
7261 static void
7262 bad_specifiers (tree object,
7263 enum bad_spec_place type,
7264 int virtualp,
7265 int quals,
7266 int inlinep,
7267 int friendp,
7268 int raises)
7270 switch (type)
7272 case BSP_VAR:
7273 if (virtualp)
7274 error ("%qD declared as a %<virtual%> variable", object);
7275 if (inlinep)
7276 error ("%qD declared as an %<inline%> variable", object);
7277 if (quals)
7278 error ("%<const%> and %<volatile%> function specifiers on "
7279 "%qD invalid in variable declaration", object);
7280 break;
7281 case BSP_PARM:
7282 if (virtualp)
7283 error ("%qD declared as a %<virtual%> parameter", object);
7284 if (inlinep)
7285 error ("%qD declared as an %<inline%> parameter", object);
7286 if (quals)
7287 error ("%<const%> and %<volatile%> function specifiers on "
7288 "%qD invalid in parameter declaration", object);
7289 break;
7290 case BSP_TYPE:
7291 if (virtualp)
7292 error ("%qD declared as a %<virtual%> type", object);
7293 if (inlinep)
7294 error ("%qD declared as an %<inline%> type", object);
7295 if (quals)
7296 error ("%<const%> and %<volatile%> function specifiers on "
7297 "%qD invalid in type declaration", object);
7298 break;
7299 case BSP_FIELD:
7300 if (virtualp)
7301 error ("%qD declared as a %<virtual%> field", object);
7302 if (inlinep)
7303 error ("%qD declared as an %<inline%> field", object);
7304 if (quals)
7305 error ("%<const%> and %<volatile%> function specifiers on "
7306 "%qD invalid in field declaration", object);
7307 break;
7308 default:
7309 gcc_unreachable();
7311 if (friendp)
7312 error ("%q+D declared as a friend", object);
7313 if (raises
7314 && (TREE_CODE (object) == TYPE_DECL
7315 || (!TYPE_PTRFN_P (TREE_TYPE (object))
7316 && !TYPE_REFFN_P (TREE_TYPE (object))
7317 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7318 error ("%q+D declared with an exception specification", object);
7321 /* DECL is a member function or static data member and is presently
7322 being defined. Check that the definition is taking place in a
7323 valid namespace. */
7325 static void
7326 check_class_member_definition_namespace (tree decl)
7328 /* These checks only apply to member functions and static data
7329 members. */
7330 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
7331 /* We check for problems with specializations in pt.c in
7332 check_specialization_namespace, where we can issue better
7333 diagnostics. */
7334 if (processing_specialization)
7335 return;
7336 /* There are no restrictions on the placement of
7337 explicit instantiations. */
7338 if (processing_explicit_instantiation)
7339 return;
7340 /* [class.mfct]
7342 A member function definition that appears outside of the
7343 class definition shall appear in a namespace scope enclosing
7344 the class definition.
7346 [class.static.data]
7348 The definition for a static data member shall appear in a
7349 namespace scope enclosing the member's class definition. */
7350 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7351 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7352 decl, DECL_CONTEXT (decl));
7355 /* Build a PARM_DECL for the "this" parameter. TYPE is the
7356 METHOD_TYPE for a non-static member function; QUALS are the
7357 cv-qualifiers that apply to the function. */
7359 tree
7360 build_this_parm (tree type, cp_cv_quals quals)
7362 tree this_type;
7363 tree qual_type;
7364 tree parm;
7365 cp_cv_quals this_quals;
7367 if (CLASS_TYPE_P (type))
7369 this_type
7370 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7371 this_type = build_pointer_type (this_type);
7373 else
7374 this_type = type_of_this_parm (type);
7375 /* The `this' parameter is implicitly `const'; it cannot be
7376 assigned to. */
7377 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7378 qual_type = cp_build_qualified_type (this_type, this_quals);
7379 parm = build_artificial_parm (this_identifier, qual_type);
7380 cp_apply_type_quals_to_decl (this_quals, parm);
7381 return parm;
7384 /* DECL is a static member function. Complain if it was declared
7385 with function-cv-quals. */
7387 static void
7388 check_static_quals (tree decl, cp_cv_quals quals)
7390 if (quals != TYPE_UNQUALIFIED)
7391 error ("static member function %q#D declared with type qualifiers",
7392 decl);
7395 // Check that FN takes no arguments and returns bool.
7396 static void
7397 check_concept_fn (tree fn)
7399 // A constraint is nullary.
7400 if (DECL_ARGUMENTS (fn))
7401 error ("concept %q#D declared with function parameters", fn);
7403 // The result type must be convertible to bool.
7404 if (!same_type_p (TREE_TYPE (TREE_TYPE (fn)), boolean_type_node))
7405 error ("concept %q#D result must be bool", fn);
7408 /* Helper function. Replace the temporary this parameter injected
7409 during cp_finish_omp_declare_simd with the real this parameter. */
7411 static tree
7412 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
7414 tree this_parm = (tree) data;
7415 if (TREE_CODE (*tp) == PARM_DECL
7416 && DECL_NAME (*tp) == this_identifier
7417 && *tp != this_parm)
7418 *tp = this_parm;
7419 else if (TYPE_P (*tp))
7420 *walk_subtrees = 0;
7421 return NULL_TREE;
7424 /* CTYPE is class type, or null if non-class.
7425 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7426 or METHOD_TYPE.
7427 DECLARATOR is the function's name.
7428 PARMS is a chain of PARM_DECLs for the function.
7429 VIRTUALP is truthvalue of whether the function is virtual or not.
7430 FLAGS are to be passed through to `grokclassfn'.
7431 QUALS are qualifiers indicating whether the function is `const'
7432 or `volatile'.
7433 RAISES is a list of exceptions that this function can raise.
7434 CHECK is 1 if we must find this method in CTYPE, 0 if we should
7435 not look, and -1 if we should not call `grokclassfn' at all.
7437 SFK is the kind of special function (if any) for the new function.
7439 Returns `NULL_TREE' if something goes wrong, after issuing
7440 applicable error messages. */
7442 static tree
7443 grokfndecl (tree ctype,
7444 tree type,
7445 tree declarator,
7446 tree parms,
7447 tree orig_declarator,
7448 int virtualp,
7449 enum overload_flags flags,
7450 cp_cv_quals quals,
7451 cp_ref_qualifier rqual,
7452 tree raises,
7453 int check,
7454 int friendp,
7455 int publicp,
7456 int inlinep,
7457 special_function_kind sfk,
7458 bool funcdef_flag,
7459 int template_count,
7460 tree in_namespace,
7461 tree* attrlist,
7462 location_t location)
7464 tree decl;
7465 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7466 tree t;
7468 // Was the concept specifier present?
7469 bool concept_p = inlinep & 4;
7471 if (rqual)
7472 type = build_ref_qualified_type (type, rqual);
7473 if (raises)
7474 type = build_exception_variant (type, raises);
7476 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7478 /* If we have an explicit location, use it, otherwise use whatever
7479 build_lang_decl used (probably input_location). */
7480 if (location != UNKNOWN_LOCATION)
7481 DECL_SOURCE_LOCATION (decl) = location;
7483 if (TREE_CODE (type) == METHOD_TYPE)
7485 tree parm;
7486 parm = build_this_parm (type, quals);
7487 DECL_CHAIN (parm) = parms;
7488 parms = parm;
7490 DECL_ARGUMENTS (decl) = parms;
7491 for (t = parms; t; t = DECL_CHAIN (t))
7492 DECL_CONTEXT (t) = decl;
7493 /* Propagate volatile out from type to decl. */
7494 if (TYPE_VOLATILE (type))
7495 TREE_THIS_VOLATILE (decl) = 1;
7497 /* Setup decl according to sfk. */
7498 switch (sfk)
7500 case sfk_constructor:
7501 case sfk_copy_constructor:
7502 case sfk_move_constructor:
7503 DECL_CONSTRUCTOR_P (decl) = 1;
7504 break;
7505 case sfk_destructor:
7506 DECL_DESTRUCTOR_P (decl) = 1;
7507 break;
7508 default:
7509 break;
7512 /* If pointers to member functions use the least significant bit to
7513 indicate whether a function is virtual, ensure a pointer
7514 to this function will have that bit clear. */
7515 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7516 && TREE_CODE (type) == METHOD_TYPE
7517 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7518 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7520 if (friendp
7521 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7523 if (funcdef_flag)
7524 error
7525 ("defining explicit specialization %qD in friend declaration",
7526 orig_declarator);
7527 else
7529 tree fns = TREE_OPERAND (orig_declarator, 0);
7530 tree args = TREE_OPERAND (orig_declarator, 1);
7532 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7534 /* Something like `template <class T> friend void f<T>()'. */
7535 error ("invalid use of template-id %qD in declaration "
7536 "of primary template",
7537 orig_declarator);
7538 return NULL_TREE;
7541 // Do not allow the declaration of constrained friend template
7542 // specializations. They cannot be instantiated since they
7543 // must match a fully instantiated function, and non-dependent
7544 // functions cannot be constrained.
7545 if (current_template_reqs)
7547 error ("constraints are not allowed in declaration "
7548 "of friend template specialization %qD", decl);
7549 return NULL_TREE;
7552 /* A friend declaration of the form friend void f<>(). Record
7553 the information in the TEMPLATE_ID_EXPR. */
7554 SET_DECL_IMPLICIT_INSTANTIATION (decl);
7556 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
7557 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7559 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7560 if (TREE_PURPOSE (t)
7561 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7563 error ("default arguments are not allowed in declaration "
7564 "of friend template specialization %qD",
7565 decl);
7566 return NULL_TREE;
7569 if (inlinep & 1)
7570 error ("%<inline%> is not allowed in declaration of friend "
7571 "template specialization %qD",
7572 decl);
7573 if (inlinep & 2)
7574 error ("%<constexpr%> is not allowed in declaration of friend "
7575 "template specialization %qD",
7576 decl);
7577 if (inlinep)
7578 return NULL_TREE;
7582 /* If this decl has namespace scope, set that up. */
7583 if (in_namespace)
7584 set_decl_namespace (decl, in_namespace, friendp);
7585 else if (!ctype)
7586 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7588 /* `main' and builtins have implicit 'C' linkage. */
7589 if ((MAIN_NAME_P (declarator)
7590 || (IDENTIFIER_LENGTH (declarator) > 10
7591 && IDENTIFIER_POINTER (declarator)[0] == '_'
7592 && IDENTIFIER_POINTER (declarator)[1] == '_'
7593 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
7594 || (targetcm.cxx_implicit_extern_c
7595 && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
7596 && current_lang_name == lang_name_cplusplus
7597 && ctype == NULL_TREE
7598 && DECL_FILE_SCOPE_P (decl))
7599 SET_DECL_LANGUAGE (decl, lang_c);
7601 /* Should probably propagate const out from type to decl I bet (mrs). */
7602 if (staticp)
7604 DECL_STATIC_FUNCTION_P (decl) = 1;
7605 DECL_CONTEXT (decl) = ctype;
7608 if (ctype)
7610 DECL_CONTEXT (decl) = ctype;
7611 if (funcdef_flag)
7612 check_class_member_definition_namespace (decl);
7615 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7617 if (PROCESSING_REAL_TEMPLATE_DECL_P())
7618 error ("cannot declare %<::main%> to be a template");
7619 if (inlinep & 1)
7620 error ("cannot declare %<::main%> to be inline");
7621 if (inlinep & 2)
7622 error ("cannot declare %<::main%> to be constexpr");
7623 if (!publicp)
7624 error ("cannot declare %<::main%> to be static");
7625 inlinep = 0;
7626 publicp = 1;
7629 /* Members of anonymous types and local classes have no linkage; make
7630 them internal. If a typedef is made later, this will be changed. */
7631 if (ctype && (TYPE_ANONYMOUS_P (ctype)
7632 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7633 publicp = 0;
7635 if (publicp && cxx_dialect == cxx98)
7637 /* [basic.link]: A name with no linkage (notably, the name of a class
7638 or enumeration declared in a local scope) shall not be used to
7639 declare an entity with linkage.
7641 DR 757 relaxes this restriction for C++0x. */
7642 no_linkage_error (decl);
7645 TREE_PUBLIC (decl) = publicp;
7646 if (! publicp)
7648 DECL_INTERFACE_KNOWN (decl) = 1;
7649 DECL_NOT_REALLY_EXTERN (decl) = 1;
7652 /* If the declaration was declared inline, mark it as such. */
7653 if (inlinep)
7654 DECL_DECLARED_INLINE_P (decl) = 1;
7655 if (inlinep & 2)
7656 DECL_DECLARED_CONSTEXPR_P (decl) = true;
7658 // If the concept declaration specifier was found, check
7659 // that the declaration satisfies the necessary requirements.
7660 if (inlinep & 4)
7662 DECL_DECLARED_CONCEPT_P (decl) = true;
7663 check_concept_fn (decl);
7666 DECL_EXTERNAL (decl) = 1;
7667 if (TREE_CODE (type) == FUNCTION_TYPE)
7669 if (quals)
7671 error (ctype
7672 ? G_("static member function %qD cannot have cv-qualifier")
7673 : G_("non-member function %qD cannot have cv-qualifier"),
7674 decl);
7675 quals = TYPE_UNQUALIFIED;
7678 if (rqual)
7680 error (ctype
7681 ? G_("static member function %qD cannot have ref-qualifier")
7682 : G_("non-member function %qD cannot have ref-qualifier"),
7683 decl);
7684 rqual = REF_QUAL_NONE;
7688 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7689 && !grok_op_properties (decl, /*complain=*/true))
7690 return NULL_TREE;
7691 else if (UDLIT_OPER_P (DECL_NAME (decl)))
7693 bool long_long_unsigned_p;
7694 bool long_double_p;
7695 const char *suffix = NULL;
7696 /* [over.literal]/6: Literal operators shall not have C linkage. */
7697 if (DECL_LANGUAGE (decl) == lang_c)
7699 error ("literal operator with C linkage");
7700 return NULL_TREE;
7703 if (DECL_NAMESPACE_SCOPE_P (decl))
7705 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7706 &long_double_p))
7708 error ("%qD has invalid argument list", decl);
7709 return NULL_TREE;
7712 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7713 if (long_long_unsigned_p)
7715 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
7716 warning (0, "integer suffix %<%s%>"
7717 " shadowed by implementation", suffix);
7719 else if (long_double_p)
7721 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
7722 warning (0, "floating point suffix %<%s%>"
7723 " shadowed by implementation", suffix);
7726 else
7728 error ("%qD must be a non-member function", decl);
7729 return NULL_TREE;
7733 if (funcdef_flag)
7734 /* Make the init_value nonzero so pushdecl knows this is not
7735 tentative. error_mark_node is replaced later with the BLOCK. */
7736 DECL_INITIAL (decl) = error_mark_node;
7738 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7739 TREE_NOTHROW (decl) = 1;
7741 if (flag_openmp || flag_cilkplus)
7743 /* Adjust "omp declare simd" attributes. */
7744 tree ods = lookup_attribute ("omp declare simd", *attrlist);
7745 if (ods)
7747 tree attr;
7748 for (attr = ods; attr;
7749 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
7751 if (TREE_CODE (type) == METHOD_TYPE)
7752 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
7753 DECL_ARGUMENTS (decl), NULL);
7754 if (TREE_VALUE (attr) != NULL_TREE)
7756 tree cl = TREE_VALUE (TREE_VALUE (attr));
7757 cl = c_omp_declare_simd_clauses_to_numbers
7758 (DECL_ARGUMENTS (decl), cl);
7759 if (cl)
7760 TREE_VALUE (TREE_VALUE (attr)) = cl;
7761 else
7762 TREE_VALUE (attr) = NULL_TREE;
7768 /* Caller will do the rest of this. */
7769 if (check < 0)
7770 return decl;
7772 if (ctype != NULL_TREE)
7773 grokclassfn (ctype, decl, flags);
7775 /* 12.4/3 */
7776 if (cxx_dialect >= cxx11
7777 && DECL_DESTRUCTOR_P (decl)
7778 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
7779 && !processing_template_decl)
7780 deduce_noexcept_on_destructor (decl);
7782 decl = check_explicit_specialization (orig_declarator, decl,
7783 template_count,
7784 2 * funcdef_flag +
7785 4 * (friendp != 0) +
7786 8 * concept_p);
7787 if (decl == error_mark_node)
7788 return NULL_TREE;
7790 if (DECL_STATIC_FUNCTION_P (decl))
7791 check_static_quals (decl, quals);
7793 if (attrlist)
7795 cplus_decl_attributes (&decl, *attrlist, 0);
7796 *attrlist = NULL_TREE;
7799 /* Check main's type after attributes have been applied. */
7800 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7802 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7803 integer_type_node))
7805 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7806 tree newtype;
7807 error ("%<::main%> must return %<int%>");
7808 newtype = build_function_type (integer_type_node, oldtypeargs);
7809 TREE_TYPE (decl) = newtype;
7811 if (warn_main)
7812 check_main_parameter_types (decl);
7815 if (ctype != NULL_TREE
7816 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7817 && check)
7819 tree old_decl = check_classfn (ctype, decl,
7820 (processing_template_decl
7821 > template_class_depth (ctype))
7822 ? current_template_parms
7823 : NULL_TREE);
7825 if (old_decl == error_mark_node)
7826 return NULL_TREE;
7828 if (old_decl)
7830 tree ok;
7831 tree pushed_scope;
7833 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7834 /* Because grokfndecl is always supposed to return a
7835 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7836 here. We depend on our callers to figure out that its
7837 really a template that's being returned. */
7838 old_decl = DECL_TEMPLATE_RESULT (old_decl);
7840 if (DECL_STATIC_FUNCTION_P (old_decl)
7841 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7843 /* Remove the `this' parm added by grokclassfn. */
7844 revert_static_member_fn (decl);
7845 check_static_quals (decl, quals);
7847 if (DECL_ARTIFICIAL (old_decl))
7849 error ("definition of implicitly-declared %qD", old_decl);
7850 return NULL_TREE;
7852 else if (DECL_DEFAULTED_FN (old_decl))
7854 error ("definition of explicitly-defaulted %q+D", decl);
7855 error ("%q+#D explicitly defaulted here", old_decl);
7856 return NULL_TREE;
7859 /* Since we've smashed OLD_DECL to its
7860 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
7861 if (TREE_CODE (decl) == TEMPLATE_DECL)
7862 decl = DECL_TEMPLATE_RESULT (decl);
7864 /* Attempt to merge the declarations. This can fail, in
7865 the case of some invalid specialization declarations. */
7866 pushed_scope = push_scope (ctype);
7867 ok = duplicate_decls (decl, old_decl, friendp);
7868 if (pushed_scope)
7869 pop_scope (pushed_scope);
7870 if (!ok)
7872 error ("no %q#D member function declared in class %qT",
7873 decl, ctype);
7874 return NULL_TREE;
7876 return old_decl;
7880 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7881 return NULL_TREE;
7883 if (ctype == NULL_TREE || check)
7884 return decl;
7886 if (virtualp)
7887 DECL_VIRTUAL_P (decl) = 1;
7889 return decl;
7892 /* decl is a FUNCTION_DECL.
7893 specifiers are the parsed virt-specifiers.
7895 Set flags to reflect the virt-specifiers.
7897 Returns decl. */
7899 static tree
7900 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7902 if (decl == NULL_TREE)
7903 return decl;
7904 if (specifiers & VIRT_SPEC_OVERRIDE)
7905 DECL_OVERRIDE_P (decl) = 1;
7906 if (specifiers & VIRT_SPEC_FINAL)
7907 DECL_FINAL_P (decl) = 1;
7908 return decl;
7911 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
7912 the linkage that DECL will receive in the object file. */
7914 static void
7915 set_linkage_for_static_data_member (tree decl)
7917 /* A static data member always has static storage duration and
7918 external linkage. Note that static data members are forbidden in
7919 local classes -- the only situation in which a class has
7920 non-external linkage. */
7921 TREE_PUBLIC (decl) = 1;
7922 TREE_STATIC (decl) = 1;
7923 /* For non-template classes, static data members are always put
7924 out in exactly those files where they are defined, just as
7925 with ordinary namespace-scope variables. */
7926 if (!processing_template_decl)
7927 DECL_INTERFACE_KNOWN (decl) = 1;
7930 /* Create a VAR_DECL named NAME with the indicated TYPE.
7932 If SCOPE is non-NULL, it is the class type or namespace containing
7933 the variable. If SCOPE is NULL, the variable should is created in
7934 the innermost enclosing scope. */
7936 static tree
7937 grokvardecl (tree type,
7938 tree name,
7939 const cp_decl_specifier_seq *declspecs,
7940 int initialized,
7941 int constp,
7942 tree scope)
7944 tree decl;
7945 tree explicit_scope;
7947 gcc_assert (!name || identifier_p (name));
7949 /* Compute the scope in which to place the variable, but remember
7950 whether or not that scope was explicitly specified by the user. */
7951 explicit_scope = scope;
7952 if (!scope)
7954 /* An explicit "extern" specifier indicates a namespace-scope
7955 variable. */
7956 if (declspecs->storage_class == sc_extern)
7957 scope = current_decl_namespace ();
7958 else if (!at_function_scope_p ())
7959 scope = current_scope ();
7962 if (scope
7963 && (/* If the variable is a namespace-scope variable declared in a
7964 template, we need DECL_LANG_SPECIFIC. */
7965 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7966 /* Similarly for namespace-scope variables with language linkage
7967 other than C++. */
7968 || (TREE_CODE (scope) == NAMESPACE_DECL
7969 && current_lang_name != lang_name_cplusplus)
7970 /* Similarly for static data members. */
7971 || TYPE_P (scope)))
7972 decl = build_lang_decl (VAR_DECL, name, type);
7973 else
7974 decl = build_decl (input_location, VAR_DECL, name, type);
7976 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7977 set_decl_namespace (decl, explicit_scope, 0);
7978 else
7979 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7981 if (declspecs->storage_class == sc_extern)
7983 DECL_THIS_EXTERN (decl) = 1;
7984 DECL_EXTERNAL (decl) = !initialized;
7987 if (DECL_CLASS_SCOPE_P (decl))
7989 set_linkage_for_static_data_member (decl);
7990 /* This function is only called with out-of-class definitions. */
7991 DECL_EXTERNAL (decl) = 0;
7992 check_class_member_definition_namespace (decl);
7994 /* At top level, either `static' or no s.c. makes a definition
7995 (perhaps tentative), and absence of `static' makes it public. */
7996 else if (toplevel_bindings_p ())
7998 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7999 && (DECL_THIS_EXTERN (decl) || ! constp));
8000 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8002 /* Not at top level, only `static' makes a static definition. */
8003 else
8005 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8006 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8009 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
8011 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8012 if (declspecs->gnu_thread_keyword_p)
8013 DECL_GNU_TLS_P (decl) = true;
8016 /* If the type of the decl has no linkage, make sure that we'll
8017 notice that in mark_used. */
8018 if (cxx_dialect > cxx98
8019 && decl_linkage (decl) != lk_none
8020 && DECL_LANG_SPECIFIC (decl) == NULL
8021 && !DECL_EXTERN_C_P (decl)
8022 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
8023 retrofit_lang_decl (decl);
8025 if (TREE_PUBLIC (decl))
8027 /* [basic.link]: A name with no linkage (notably, the name of a class
8028 or enumeration declared in a local scope) shall not be used to
8029 declare an entity with linkage.
8031 DR 757 relaxes this restriction for C++0x. */
8032 if (cxx_dialect < cxx11)
8033 no_linkage_error (decl);
8035 else
8036 DECL_INTERFACE_KNOWN (decl) = 1;
8038 return decl;
8041 /* Create and return a canonical pointer to member function type, for
8042 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8044 tree
8045 build_ptrmemfunc_type (tree type)
8047 tree field, fields;
8048 tree t;
8049 tree unqualified_variant = NULL_TREE;
8051 if (type == error_mark_node)
8052 return type;
8054 /* If a canonical type already exists for this type, use it. We use
8055 this method instead of type_hash_canon, because it only does a
8056 simple equality check on the list of field members. */
8058 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8059 return t;
8061 /* Make sure that we always have the unqualified pointer-to-member
8062 type first. */
8063 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
8064 unqualified_variant
8065 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8067 t = make_class_type (RECORD_TYPE);
8068 xref_basetypes (t, NULL_TREE);
8070 /* Let the front end know this is a pointer to member function... */
8071 TYPE_PTRMEMFUNC_FLAG (t) = 1;
8072 /* ... and not really a class type. */
8073 SET_CLASS_TYPE_P (t, 0);
8075 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
8076 fields = field;
8078 field = build_decl (input_location, FIELD_DECL, delta_identifier,
8079 delta_type_node);
8080 DECL_CHAIN (field) = fields;
8081 fields = field;
8083 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8085 /* Zap out the name so that the back end will give us the debugging
8086 information for this anonymous RECORD_TYPE. */
8087 TYPE_NAME (t) = NULL_TREE;
8089 /* If this is not the unqualified form of this pointer-to-member
8090 type, set the TYPE_MAIN_VARIANT for this type to be the
8091 unqualified type. Since they are actually RECORD_TYPEs that are
8092 not variants of each other, we must do this manually.
8093 As we just built a new type there is no need to do yet another copy. */
8094 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
8096 int type_quals = cp_type_quals (type);
8097 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
8098 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
8099 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
8100 TYPE_MAIN_VARIANT (t) = unqualified_variant;
8101 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8102 TYPE_NEXT_VARIANT (unqualified_variant) = t;
8103 TREE_TYPE (TYPE_BINFO (t)) = t;
8106 /* Cache this pointer-to-member type so that we can find it again
8107 later. */
8108 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8110 if (TYPE_STRUCTURAL_EQUALITY_P (type))
8111 SET_TYPE_STRUCTURAL_EQUALITY (t);
8112 else if (TYPE_CANONICAL (type) != type)
8113 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
8115 return t;
8118 /* Create and return a pointer to data member type. */
8120 tree
8121 build_ptrmem_type (tree class_type, tree member_type)
8123 if (TREE_CODE (member_type) == METHOD_TYPE)
8125 cp_cv_quals quals = type_memfn_quals (member_type);
8126 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
8127 member_type = build_memfn_type (member_type, class_type, quals, rqual);
8128 return build_ptrmemfunc_type (build_pointer_type (member_type));
8130 else
8132 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
8133 return build_offset_type (class_type, member_type);
8137 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8138 Check to see that the definition is valid. Issue appropriate error
8139 messages. Return 1 if the definition is particularly bad, or 0
8140 otherwise. */
8142 static int
8143 check_static_variable_definition (tree decl, tree type)
8145 /* Can't check yet if we don't know the type. */
8146 if (dependent_type_p (type))
8147 return 0;
8148 /* If DECL is declared constexpr, we'll do the appropriate checks
8149 in check_initializer. */
8150 if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8151 return 0;
8152 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8154 if (!COMPLETE_TYPE_P (type))
8155 error ("in-class initialization of static data member %q#D of "
8156 "incomplete type", decl);
8157 else if (literal_type_p (type))
8158 permerror (input_location,
8159 "%<constexpr%> needed for in-class initialization of "
8160 "static data member %q#D of non-integral type", decl);
8161 else
8162 error ("in-class initialization of static data member %q#D of "
8163 "non-literal type", decl);
8164 return 1;
8167 /* Motion 10 at San Diego: If a static const integral data member is
8168 initialized with an integral constant expression, the initializer
8169 may appear either in the declaration (within the class), or in
8170 the definition, but not both. If it appears in the class, the
8171 member is a member constant. The file-scope definition is always
8172 required. */
8173 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8175 error ("invalid in-class initialization of static data member "
8176 "of non-integral type %qT",
8177 type);
8178 return 1;
8180 else if (!CP_TYPE_CONST_P (type))
8181 error ("ISO C++ forbids in-class initialization of non-const "
8182 "static member %qD",
8183 decl);
8184 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8185 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8186 "%qD of non-integral type %qT", decl, type);
8188 return 0;
8191 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
8192 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8193 expressions out into temporary variables so that walk_tree doesn't
8194 step into them (c++/15764). */
8196 static tree
8197 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8199 struct pointer_set_t *pset = (struct pointer_set_t *)data;
8200 tree expr = *expr_p;
8201 if (TREE_CODE (expr) == SAVE_EXPR)
8203 tree op = TREE_OPERAND (expr, 0);
8204 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8205 if (TREE_SIDE_EFFECTS (op))
8206 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8207 *walk_subtrees = 0;
8209 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8210 *walk_subtrees = 0;
8211 return NULL;
8214 /* Entry point for the above. */
8216 static void
8217 stabilize_vla_size (tree size)
8219 struct pointer_set_t *pset = pointer_set_create ();
8220 /* Break out any function calls into temporary variables. */
8221 cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
8222 pointer_set_destroy (pset);
8225 /* Helper function for compute_array_index_type. Look for SIZEOF_EXPR
8226 not inside of SAVE_EXPR and fold them. */
8228 static tree
8229 fold_sizeof_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8231 tree expr = *expr_p;
8232 if (TREE_CODE (expr) == SAVE_EXPR || TYPE_P (expr))
8233 *walk_subtrees = 0;
8234 else if (TREE_CODE (expr) == SIZEOF_EXPR)
8236 *(bool *)data = true;
8237 if (SIZEOF_EXPR_TYPE_P (expr))
8238 expr = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (expr, 0)),
8239 SIZEOF_EXPR, false);
8240 else if (TYPE_P (TREE_OPERAND (expr, 0)))
8241 expr = cxx_sizeof_or_alignof_type (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8242 false);
8243 else
8244 expr = cxx_sizeof_or_alignof_expr (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8245 false);
8246 if (expr == error_mark_node)
8247 expr = size_one_node;
8248 *expr_p = expr;
8249 *walk_subtrees = 0;
8251 return NULL;
8254 /* Given the SIZE (i.e., number of elements) in an array, compute an
8255 appropriate index type for the array. If non-NULL, NAME is the
8256 name of the thing being declared. */
8258 tree
8259 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8261 tree itype;
8262 tree osize = size;
8263 tree abi_1_itype = NULL_TREE;
8265 if (error_operand_p (size))
8266 return error_mark_node;
8268 if (!type_dependent_expression_p (size))
8270 tree type = TREE_TYPE (size);
8272 mark_rvalue_use (size);
8274 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
8275 && TREE_SIDE_EFFECTS (size))
8276 /* In C++98, we mark a non-constant array bound with a magic
8277 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
8278 else
8280 size = fold_non_dependent_expr_sfinae (size, complain);
8282 if (CLASS_TYPE_P (type)
8283 && CLASSTYPE_LITERAL_P (type))
8285 size = build_expr_type_conversion (WANT_INT, size, true);
8286 if (!size)
8288 if (!(complain & tf_error))
8289 return error_mark_node;
8290 if (name)
8291 error ("size of array %qD has non-integral type %qT",
8292 name, type);
8293 else
8294 error ("size of array has non-integral type %qT", type);
8295 size = integer_one_node;
8297 if (size == error_mark_node)
8298 return error_mark_node;
8299 type = TREE_TYPE (size);
8300 /* We didn't support this case in GCC 3.2, so don't bother
8301 trying to model it now in ABI v1. */
8302 abi_1_itype = error_mark_node;
8305 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8306 size = maybe_constant_value (size);
8308 if (!TREE_CONSTANT (size))
8309 size = osize;
8312 if (error_operand_p (size))
8313 return error_mark_node;
8315 /* The array bound must be an integer type. */
8316 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8318 if (!(complain & tf_error))
8319 return error_mark_node;
8320 if (name)
8321 error ("size of array %qD has non-integral type %qT", name, type);
8322 else
8323 error ("size of array has non-integral type %qT", type);
8324 size = integer_one_node;
8325 type = TREE_TYPE (size);
8329 /* A type is dependent if it is...an array type constructed from any
8330 dependent type or whose size is specified by a constant expression
8331 that is value-dependent. */
8332 /* We can only call value_dependent_expression_p on integral constant
8333 expressions; treat non-constant expressions as dependent, too. */
8334 if (processing_template_decl
8335 && (type_dependent_expression_p (size)
8336 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8338 /* We cannot do any checking for a SIZE that isn't known to be
8339 constant. Just build the index type and mark that it requires
8340 structural equality checks. */
8341 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8342 size, size_one_node));
8343 TYPE_DEPENDENT_P (itype) = 1;
8344 TYPE_DEPENDENT_P_VALID (itype) = 1;
8345 SET_TYPE_STRUCTURAL_EQUALITY (itype);
8346 return itype;
8349 if (!abi_version_at_least (2) && processing_template_decl
8350 && abi_1_itype == NULL_TREE)
8351 /* For abi-1, we handled all instances in templates the same way,
8352 even when they were non-dependent. This affects the manglings
8353 produced. So, we do the normal checking for non-dependent
8354 sizes, but at the end we'll return the same type that abi-1
8355 would have, but with TYPE_CANONICAL set to the "right"
8356 value that the current ABI would provide. */
8357 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8358 osize, integer_one_node));
8360 /* Normally, the array-bound will be a constant. */
8361 if (TREE_CODE (size) == INTEGER_CST)
8363 /* Check to see if the array bound overflowed. Make that an
8364 error, no matter how generous we're being. */
8365 constant_expression_error (size);
8367 /* An array must have a positive number of elements. */
8368 if (INT_CST_LT (size, integer_zero_node))
8370 if (!(complain & tf_error))
8371 return error_mark_node;
8372 if (name)
8373 error ("size of array %qD is negative", name);
8374 else
8375 error ("size of array is negative");
8376 size = integer_one_node;
8378 /* As an extension we allow zero-sized arrays. */
8379 else if (integer_zerop (size))
8381 if (!(complain & tf_error))
8382 /* We must fail if performing argument deduction (as
8383 indicated by the state of complain), so that
8384 another substitution can be found. */
8385 return error_mark_node;
8386 else if (in_system_header_at (input_location))
8387 /* Allow them in system headers because glibc uses them. */;
8388 else if (name)
8389 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8390 else
8391 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8394 else if (TREE_CONSTANT (size)
8395 /* We don't allow VLAs at non-function scopes, or during
8396 tentative template substitution. */
8397 || !at_function_scope_p ()
8398 || (cxx_dialect < cxx1y && !(complain & tf_error)))
8400 if (!(complain & tf_error))
8401 return error_mark_node;
8402 /* `(int) &fn' is not a valid array bound. */
8403 if (name)
8404 error ("size of array %qD is not an integral constant-expression",
8405 name);
8406 else
8407 error ("size of array is not an integral constant-expression");
8408 size = integer_one_node;
8410 else if (cxx_dialect < cxx1y && pedantic && warn_vla != 0)
8412 if (name)
8413 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8414 else
8415 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8417 else if (warn_vla > 0)
8419 if (name)
8420 warning (OPT_Wvla,
8421 "variable length array %qD is used", name);
8422 else
8423 warning (OPT_Wvla,
8424 "variable length array is used");
8427 if (processing_template_decl && !TREE_CONSTANT (size))
8428 /* A variable sized array. */
8429 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8430 else
8432 HOST_WIDE_INT saved_processing_template_decl;
8434 /* Compute the index of the largest element in the array. It is
8435 one less than the number of elements in the array. We save
8436 and restore PROCESSING_TEMPLATE_DECL so that computations in
8437 cp_build_binary_op will be appropriately folded. */
8438 saved_processing_template_decl = processing_template_decl;
8439 processing_template_decl = 0;
8440 itype = cp_build_binary_op (input_location,
8441 MINUS_EXPR,
8442 cp_convert (ssizetype, size, complain),
8443 cp_convert (ssizetype, integer_one_node,
8444 complain),
8445 complain);
8446 itype = fold (itype);
8447 processing_template_decl = saved_processing_template_decl;
8449 if (!TREE_CONSTANT (itype))
8451 /* A variable sized array. */
8452 itype = variable_size (itype);
8454 if (TREE_CODE (itype) != SAVE_EXPR)
8456 /* Look for SIZEOF_EXPRs in itype and fold them, otherwise
8457 they might survive till gimplification. */
8458 tree newitype = itype;
8459 bool found = false;
8460 cp_walk_tree_without_duplicates (&newitype,
8461 fold_sizeof_expr_r, &found);
8462 if (found)
8463 itype = variable_size (fold (newitype));
8466 stabilize_vla_size (itype);
8468 if (cxx_dialect >= cxx1y && flag_exceptions)
8470 /* If the VLA bound is larger than half the address space,
8471 or less than zero, throw std::bad_array_length. */
8472 tree comp = build2 (LT_EXPR, boolean_type_node, itype,
8473 ssize_int (-1));
8474 comp = build3 (COND_EXPR, void_type_node, comp,
8475 throw_bad_array_length (), void_zero_node);
8476 finish_expr_stmt (comp);
8478 else if (flag_sanitize & SANITIZE_VLA)
8480 /* From C++1y onwards, we throw an exception on a negative
8481 length size of an array; see above. */
8483 /* We have to add 1 -- in the ubsan routine we generate
8484 LE_EXPR rather than LT_EXPR. */
8485 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
8486 build_one_cst (TREE_TYPE (itype)));
8487 t = ubsan_instrument_vla (input_location, t);
8488 finish_expr_stmt (t);
8491 /* Make sure that there was no overflow when creating to a signed
8492 index type. (For example, on a 32-bit machine, an array with
8493 size 2^32 - 1 is too big.) */
8494 else if (TREE_CODE (itype) == INTEGER_CST
8495 && TREE_OVERFLOW (itype))
8497 if (!(complain & tf_error))
8498 return error_mark_node;
8499 error ("overflow in array dimension");
8500 TREE_OVERFLOW (itype) = 0;
8504 /* Create and return the appropriate index type. */
8505 if (abi_1_itype && abi_1_itype != error_mark_node)
8507 tree t = build_index_type (itype);
8508 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8509 itype = abi_1_itype;
8511 else
8512 itype = build_index_type (itype);
8514 /* If the index type were dependent, we would have returned early, so
8515 remember that it isn't. */
8516 TYPE_DEPENDENT_P (itype) = 0;
8517 TYPE_DEPENDENT_P_VALID (itype) = 1;
8518 return itype;
8521 /* Returns the scope (if any) in which the entity declared by
8522 DECLARATOR will be located. If the entity was declared with an
8523 unqualified name, NULL_TREE is returned. */
8525 tree
8526 get_scope_of_declarator (const cp_declarator *declarator)
8528 while (declarator && declarator->kind != cdk_id)
8529 declarator = declarator->declarator;
8531 /* If the declarator-id is a SCOPE_REF, the scope in which the
8532 declaration occurs is the first operand. */
8533 if (declarator
8534 && declarator->u.id.qualifying_scope)
8535 return declarator->u.id.qualifying_scope;
8537 /* Otherwise, the declarator is not a qualified name; the entity will
8538 be declared in the current scope. */
8539 return NULL_TREE;
8542 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8543 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
8544 with this type. */
8546 static tree
8547 create_array_type_for_decl (tree name, tree type, tree size)
8549 tree itype = NULL_TREE;
8551 /* If things have already gone awry, bail now. */
8552 if (type == error_mark_node || size == error_mark_node)
8553 return error_mark_node;
8555 /* 8.3.4/1: If the type of the identifier of D contains the auto
8556 type-specifier, the program is ill-formed. */
8557 if (pedantic && type_uses_auto (type))
8558 pedwarn (input_location, OPT_Wpedantic,
8559 "declaration of %qD as array of %<auto%>", name);
8561 /* If there are some types which cannot be array elements,
8562 issue an error-message and return. */
8563 switch (TREE_CODE (type))
8565 case VOID_TYPE:
8566 if (name)
8567 error ("declaration of %qD as array of void", name);
8568 else
8569 error ("creating array of void");
8570 return error_mark_node;
8572 case FUNCTION_TYPE:
8573 if (name)
8574 error ("declaration of %qD as array of functions", name);
8575 else
8576 error ("creating array of functions");
8577 return error_mark_node;
8579 case REFERENCE_TYPE:
8580 if (name)
8581 error ("declaration of %qD as array of references", name);
8582 else
8583 error ("creating array of references");
8584 return error_mark_node;
8586 case METHOD_TYPE:
8587 if (name)
8588 error ("declaration of %qD as array of function members", name);
8589 else
8590 error ("creating array of function members");
8591 return error_mark_node;
8593 default:
8594 break;
8597 /* [dcl.array]
8599 The constant expressions that specify the bounds of the arrays
8600 can be omitted only for the first member of the sequence. */
8601 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8603 if (name)
8604 error ("declaration of %qD as multidimensional array must "
8605 "have bounds for all dimensions except the first",
8606 name);
8607 else
8608 error ("multidimensional array must have bounds for all "
8609 "dimensions except the first");
8611 return error_mark_node;
8614 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type)
8615 && (flag_iso || warn_vla > 0))
8616 pedwarn (input_location, OPT_Wvla, "array of array of runtime bound");
8618 /* Figure out the index type for the array. */
8619 if (size)
8620 itype = compute_array_index_type (name, size, tf_warning_or_error);
8622 /* [dcl.array]
8623 T is called the array element type; this type shall not be [...] an
8624 abstract class type. */
8625 abstract_virtuals_error (name, type);
8627 return build_cplus_array_type (type, itype);
8630 /* Check that it's OK to declare a function with the indicated TYPE.
8631 SFK indicates the kind of special function (if any) that this
8632 function is. OPTYPE is the type given in a conversion operator
8633 declaration, or the class type for a constructor/destructor.
8634 Returns the actual return type of the function; that
8635 may be different than TYPE if an error occurs, or for certain
8636 special functions. */
8638 static tree
8639 check_special_function_return_type (special_function_kind sfk,
8640 tree type,
8641 tree optype)
8643 switch (sfk)
8645 case sfk_constructor:
8646 if (type)
8647 error ("return type specification for constructor invalid");
8649 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8650 type = build_pointer_type (optype);
8651 else
8652 type = void_type_node;
8653 break;
8655 case sfk_destructor:
8656 if (type)
8657 error ("return type specification for destructor invalid");
8658 /* We can't use the proper return type here because we run into
8659 problems with ambiguous bases and covariant returns.
8660 Java classes are left unchanged because (void *) isn't a valid
8661 Java type, and we don't want to change the Java ABI. */
8662 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8663 type = build_pointer_type (void_type_node);
8664 else
8665 type = void_type_node;
8666 break;
8668 case sfk_conversion:
8669 if (type)
8670 error ("return type specified for %<operator %T%>", optype);
8671 type = optype;
8672 break;
8674 default:
8675 gcc_unreachable ();
8678 return type;
8681 /* A variable or data member (whose unqualified name is IDENTIFIER)
8682 has been declared with the indicated TYPE. If the TYPE is not
8683 acceptable, issue an error message and return a type to use for
8684 error-recovery purposes. */
8686 tree
8687 check_var_type (tree identifier, tree type)
8689 if (VOID_TYPE_P (type))
8691 if (!identifier)
8692 error ("unnamed variable or field declared void");
8693 else if (identifier_p (identifier))
8695 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8696 error ("variable or field %qE declared void", identifier);
8698 else
8699 error ("variable or field declared void");
8700 type = error_mark_node;
8703 return type;
8706 /* Given declspecs and a declarator (abstract or otherwise), determine
8707 the name and type of the object declared and construct a DECL node
8708 for it.
8710 DECLSPECS points to the representation of declaration-specifier
8711 sequence that precedes declarator.
8713 DECL_CONTEXT says which syntactic context this declaration is in:
8714 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8715 FUNCDEF for a function definition. Like NORMAL but a few different
8716 error messages in each case. Return value may be zero meaning
8717 this definition is too screwy to try to parse.
8718 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8719 handle member functions (which have FIELD context).
8720 Return value may be zero meaning this definition is too screwy to
8721 try to parse.
8722 PARM for a parameter declaration (either within a function prototype
8723 or before a function body). Make a PARM_DECL, or return void_type_node.
8724 TPARM for a template parameter declaration.
8725 CATCHPARM for a parameter declaration before a catch clause.
8726 TYPENAME if for a typename (in a cast or sizeof).
8727 Don't make a DECL node; just return the ..._TYPE node.
8728 FIELD for a struct or union field; make a FIELD_DECL.
8729 BITFIELD for a field with specified width.
8731 INITIALIZED is as for start_decl.
8733 ATTRLIST is a pointer to the list of attributes, which may be NULL
8734 if there are none; *ATTRLIST may be modified if attributes from inside
8735 the declarator should be applied to the declaration.
8737 When this function is called, scoping variables (such as
8738 CURRENT_CLASS_TYPE) should reflect the scope in which the
8739 declaration occurs, not the scope in which the new declaration will
8740 be placed. For example, on:
8742 void S::f() { ... }
8744 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8745 should not be `S'.
8747 Returns a DECL (if a declarator is present), a TYPE (if there is no
8748 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8749 error occurs. */
8751 tree
8752 grokdeclarator (const cp_declarator *declarator,
8753 cp_decl_specifier_seq *declspecs,
8754 enum decl_context decl_context,
8755 int initialized,
8756 tree* attrlist)
8758 tree type = NULL_TREE;
8759 int longlong = 0;
8760 int explicit_int128 = 0;
8761 int virtualp, explicitp, friendp, inlinep, staticp;
8762 int explicit_int = 0;
8763 int explicit_char = 0;
8764 int defaulted_int = 0;
8766 tree typedef_decl = NULL_TREE;
8767 const char *name = NULL;
8768 tree typedef_type = NULL_TREE;
8769 /* True if this declarator is a function definition. */
8770 bool funcdef_flag = false;
8771 cp_declarator_kind innermost_code = cdk_error;
8772 int bitfield = 0;
8773 #if 0
8774 /* See the code below that used this. */
8775 tree decl_attr = NULL_TREE;
8776 #endif
8778 /* Keep track of what sort of function is being processed
8779 so that we can warn about default return values, or explicit
8780 return values which do not match prescribed defaults. */
8781 special_function_kind sfk = sfk_none;
8783 tree dname = NULL_TREE;
8784 tree ctor_return_type = NULL_TREE;
8785 enum overload_flags flags = NO_SPECIAL;
8786 /* cv-qualifiers that apply to the declarator, for a declaration of
8787 a member function. */
8788 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8789 /* virt-specifiers that apply to the declarator, for a declaration of
8790 a member function. */
8791 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8792 /* ref-qualifier that applies to the declarator, for a declaration of
8793 a member function. */
8794 cp_ref_qualifier rqual = REF_QUAL_NONE;
8795 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
8796 int type_quals;
8797 tree raises = NULL_TREE;
8798 int template_count = 0;
8799 tree returned_attrs = NULL_TREE;
8800 tree parms = NULL_TREE;
8801 const cp_declarator *id_declarator;
8802 /* The unqualified name of the declarator; either an
8803 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
8804 tree unqualified_id;
8805 /* The class type, if any, in which this entity is located,
8806 or NULL_TREE if none. Note that this value may be different from
8807 the current class type; for example if an attempt is made to declare
8808 "A::f" inside "B", this value will be "A". */
8809 tree ctype = current_class_type;
8810 /* The NAMESPACE_DECL for the namespace in which this entity is
8811 located. If an unqualified name is used to declare the entity,
8812 this value will be NULL_TREE, even if the entity is located at
8813 namespace scope. */
8814 tree in_namespace = NULL_TREE;
8815 cp_storage_class storage_class;
8816 bool unsigned_p, signed_p, short_p, long_p, thread_p;
8817 bool type_was_error_mark_node = false;
8818 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8819 bool template_type_arg = false;
8820 bool template_parm_flag = false;
8821 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
8822 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
8823 source_location saved_loc = input_location;
8824 const char *errmsg;
8826 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
8827 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
8828 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
8829 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
8830 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
8831 explicit_int128 = declspecs->explicit_int128_p;
8832 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
8834 // Was concept_p specified? Note that ds_concept
8835 // implies ds_constexpr!
8836 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
8837 if (concept_p)
8838 constexpr_p = true;
8840 if (decl_context == FUNCDEF)
8841 funcdef_flag = true, decl_context = NORMAL;
8842 else if (decl_context == MEMFUNCDEF)
8843 funcdef_flag = true, decl_context = FIELD;
8844 else if (decl_context == BITFIELD)
8845 bitfield = 1, decl_context = FIELD;
8846 else if (decl_context == TEMPLATE_TYPE_ARG)
8847 template_type_arg = true, decl_context = TYPENAME;
8848 else if (decl_context == TPARM)
8849 template_parm_flag = true, decl_context = PARM;
8851 if (initialized > 1)
8852 funcdef_flag = true;
8854 /* Look inside a declarator for the name being declared
8855 and get it as a string, for an error message. */
8856 for (id_declarator = declarator;
8857 id_declarator;
8858 id_declarator = id_declarator->declarator)
8860 if (id_declarator->kind != cdk_id)
8861 innermost_code = id_declarator->kind;
8863 switch (id_declarator->kind)
8865 case cdk_function:
8866 if (id_declarator->declarator
8867 && id_declarator->declarator->kind == cdk_id)
8869 sfk = id_declarator->declarator->u.id.sfk;
8870 if (sfk == sfk_destructor)
8871 flags = DTOR_FLAG;
8873 break;
8875 case cdk_id:
8877 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8878 tree decl = id_declarator->u.id.unqualified_name;
8879 if (!decl)
8880 break;
8881 if (qualifying_scope)
8883 if (at_function_scope_p ())
8885 /* [dcl.meaning]
8887 A declarator-id shall not be qualified except
8888 for ...
8890 None of the cases are permitted in block
8891 scope. */
8892 if (qualifying_scope == global_namespace)
8893 error ("invalid use of qualified-name %<::%D%>",
8894 decl);
8895 else if (TYPE_P (qualifying_scope))
8896 error ("invalid use of qualified-name %<%T::%D%>",
8897 qualifying_scope, decl);
8898 else
8899 error ("invalid use of qualified-name %<%D::%D%>",
8900 qualifying_scope, decl);
8901 return error_mark_node;
8903 else if (TYPE_P (qualifying_scope))
8905 ctype = qualifying_scope;
8906 if (!MAYBE_CLASS_TYPE_P (ctype))
8908 error ("%q#T is not a class or a namespace", ctype);
8909 ctype = NULL_TREE;
8911 else if (innermost_code != cdk_function
8912 && current_class_type
8913 && !uniquely_derived_from_p (ctype,
8914 current_class_type))
8916 error ("invalid use of qualified-name %<%T::%D%>",
8917 qualifying_scope, decl);
8918 return error_mark_node;
8921 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8922 in_namespace = qualifying_scope;
8924 switch (TREE_CODE (decl))
8926 case BIT_NOT_EXPR:
8928 tree type;
8930 if (innermost_code != cdk_function)
8932 error ("declaration of %qD as non-function", decl);
8933 return error_mark_node;
8935 else if (!qualifying_scope
8936 && !(current_class_type && at_class_scope_p ()))
8938 error ("declaration of %qD as non-member", decl);
8939 return error_mark_node;
8942 type = TREE_OPERAND (decl, 0);
8943 if (TYPE_P (type))
8944 type = constructor_name (type);
8945 name = identifier_to_locale (IDENTIFIER_POINTER (type));
8946 dname = decl;
8948 break;
8950 case TEMPLATE_ID_EXPR:
8952 tree fns = TREE_OPERAND (decl, 0);
8954 dname = fns;
8955 if (!identifier_p (dname))
8957 gcc_assert (is_overloaded_fn (dname));
8958 dname = DECL_NAME (get_first_fn (dname));
8961 /* Fall through. */
8963 case IDENTIFIER_NODE:
8964 if (identifier_p (decl))
8965 dname = decl;
8967 if (C_IS_RESERVED_WORD (dname))
8969 error ("declarator-id missing; using reserved word %qD",
8970 dname);
8971 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8973 else if (!IDENTIFIER_TYPENAME_P (dname))
8974 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8975 else
8977 gcc_assert (flags == NO_SPECIAL);
8978 flags = TYPENAME_FLAG;
8979 ctor_return_type = TREE_TYPE (dname);
8980 sfk = sfk_conversion;
8981 if (is_typename_at_global_scope (dname))
8982 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8983 else
8984 name = "<invalid operator>";
8986 break;
8988 default:
8989 gcc_unreachable ();
8991 break;
8994 case cdk_array:
8995 case cdk_pointer:
8996 case cdk_reference:
8997 case cdk_ptrmem:
8998 break;
9000 case cdk_error:
9001 return error_mark_node;
9003 default:
9004 gcc_unreachable ();
9006 if (id_declarator->kind == cdk_id)
9007 break;
9010 /* [dcl.fct.edf]
9012 The declarator in a function-definition shall have the form
9013 D1 ( parameter-declaration-clause) ... */
9014 if (funcdef_flag && innermost_code != cdk_function)
9016 error ("function definition does not declare parameters");
9017 return error_mark_node;
9020 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9021 && innermost_code != cdk_function
9022 && ! (ctype && !declspecs->any_specifiers_p))
9024 error ("declaration of %qD as non-function", dname);
9025 return error_mark_node;
9028 if (dname
9029 && identifier_p (dname)
9030 && UDLIT_OPER_P (dname)
9031 && innermost_code != cdk_function)
9033 error ("declaration of %qD as non-function", dname);
9034 return error_mark_node;
9037 if (dname && IDENTIFIER_OPNAME_P (dname))
9039 if (typedef_p)
9041 error ("declaration of %qD as %<typedef%>", dname);
9042 return error_mark_node;
9044 else if (decl_context == PARM || decl_context == CATCHPARM)
9046 error ("declaration of %qD as parameter", dname);
9047 return error_mark_node;
9051 /* Anything declared one level down from the top level
9052 must be one of the parameters of a function
9053 (because the body is at least two levels down). */
9055 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9056 by not allowing C++ class definitions to specify their parameters
9057 with xdecls (must be spec.d in the parmlist).
9059 Since we now wait to push a class scope until we are sure that
9060 we are in a legitimate method context, we must set oldcname
9061 explicitly (since current_class_name is not yet alive).
9063 We also want to avoid calling this a PARM if it is in a namespace. */
9065 if (decl_context == NORMAL && !toplevel_bindings_p ())
9067 cp_binding_level *b = current_binding_level;
9068 current_binding_level = b->level_chain;
9069 if (current_binding_level != 0 && toplevel_bindings_p ())
9070 decl_context = PARM;
9071 current_binding_level = b;
9074 if (name == NULL)
9075 name = decl_context == PARM ? "parameter" : "type name";
9077 if (concept_p && typedef_p)
9079 error ("%<concept%> cannot appear in a typedef declaration");
9080 return error_mark_node;
9083 if (constexpr_p && typedef_p)
9085 error ("%<constexpr%> cannot appear in a typedef declaration");
9086 return error_mark_node;
9089 /* If there were multiple types specified in the decl-specifier-seq,
9090 issue an error message. */
9091 if (declspecs->multiple_types_p)
9093 error ("two or more data types in declaration of %qs", name);
9094 return error_mark_node;
9097 if (declspecs->conflicting_specifiers_p)
9099 error ("conflicting specifiers in declaration of %qs", name);
9100 return error_mark_node;
9103 /* Extract the basic type from the decl-specifier-seq. */
9104 type = declspecs->type;
9105 if (type == error_mark_node)
9107 type = NULL_TREE;
9108 type_was_error_mark_node = true;
9110 /* If the entire declaration is itself tagged as deprecated then
9111 suppress reports of deprecated items. */
9112 if (type && TREE_DEPRECATED (type)
9113 && deprecated_state != DEPRECATED_SUPPRESS)
9114 warn_deprecated_use (type, NULL_TREE);
9115 if (type && TREE_CODE (type) == TYPE_DECL)
9117 typedef_decl = type;
9118 type = TREE_TYPE (typedef_decl);
9119 if (TREE_DEPRECATED (type)
9120 && DECL_ARTIFICIAL (typedef_decl)
9121 && deprecated_state != DEPRECATED_SUPPRESS)
9122 warn_deprecated_use (type, NULL_TREE);
9124 /* No type at all: default to `int', and set DEFAULTED_INT
9125 because it was not a user-defined typedef. */
9126 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
9128 /* These imply 'int'. */
9129 type = integer_type_node;
9130 defaulted_int = 1;
9132 /* Gather flags. */
9133 explicit_int = declspecs->explicit_int_p;
9134 explicit_char = declspecs->explicit_char_p;
9136 #if 0
9137 /* See the code below that used this. */
9138 if (typedef_decl)
9139 decl_attr = DECL_ATTRIBUTES (typedef_decl);
9140 #endif
9141 typedef_type = type;
9144 if (sfk != sfk_conversion)
9145 ctor_return_type = ctype;
9147 if (sfk != sfk_none)
9148 type = check_special_function_return_type (sfk, type,
9149 ctor_return_type);
9150 else if (type == NULL_TREE)
9152 int is_main;
9154 explicit_int = -1;
9156 /* We handle `main' specially here, because 'main () { }' is so
9157 common. With no options, it is allowed. With -Wreturn-type,
9158 it is a warning. It is only an error with -pedantic-errors. */
9159 is_main = (funcdef_flag
9160 && dname && identifier_p (dname)
9161 && MAIN_NAME_P (dname)
9162 && ctype == NULL_TREE
9163 && in_namespace == NULL_TREE
9164 && current_namespace == global_namespace);
9166 if (type_was_error_mark_node)
9167 /* We've already issued an error, don't complain more. */;
9168 else if (in_system_header_at (input_location) || flag_ms_extensions)
9169 /* Allow it, sigh. */;
9170 else if (! is_main)
9171 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
9172 else if (pedantic)
9173 pedwarn (input_location, OPT_Wpedantic,
9174 "ISO C++ forbids declaration of %qs with no type", name);
9175 else
9176 warning (OPT_Wreturn_type,
9177 "ISO C++ forbids declaration of %qs with no type", name);
9179 type = integer_type_node;
9182 ctype = NULL_TREE;
9184 if (explicit_int128)
9186 if (int128_integer_type_node == NULL_TREE)
9188 error ("%<__int128%> is not supported by this target");
9189 explicit_int128 = false;
9191 else if (pedantic && ! in_system_header_at (input_location))
9192 pedwarn (input_location, OPT_Wpedantic,
9193 "ISO C++ does not support %<__int128%> for %qs", name);
9196 /* Now process the modifiers that were specified
9197 and check for invalid combinations. */
9199 /* Long double is a special combination. */
9200 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9202 long_p = false;
9203 type = cp_build_qualified_type (long_double_type_node,
9204 cp_type_quals (type));
9207 /* Check all other uses of type modifiers. */
9209 if (unsigned_p || signed_p || long_p || short_p)
9211 int ok = 0;
9213 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9214 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9215 else if (signed_p && unsigned_p)
9216 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9217 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9218 error ("%<long long%> invalid for %qs", name);
9219 else if (long_p && TREE_CODE (type) == REAL_TYPE)
9220 error ("%<long%> invalid for %qs", name);
9221 else if (short_p && TREE_CODE (type) == REAL_TYPE)
9222 error ("%<short%> invalid for %qs", name);
9223 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9224 error ("%<long%> or %<short%> invalid for %qs", name);
9225 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
9226 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9227 else if ((long_p || short_p) && explicit_char)
9228 error ("%<long%> or %<short%> specified with char for %qs", name);
9229 else if (long_p && short_p)
9230 error ("%<long%> and %<short%> specified together for %qs", name);
9231 else if (type == char16_type_node || type == char32_type_node)
9233 if (signed_p || unsigned_p)
9234 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9235 else if (short_p || long_p)
9236 error ("%<short%> or %<long%> invalid for %qs", name);
9238 else
9240 ok = 1;
9241 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
9243 pedwarn (input_location, OPT_Wpedantic,
9244 "long, short, signed or unsigned used invalidly for %qs",
9245 name);
9246 if (flag_pedantic_errors)
9247 ok = 0;
9251 /* Discard the type modifiers if they are invalid. */
9252 if (! ok)
9254 unsigned_p = false;
9255 signed_p = false;
9256 long_p = false;
9257 short_p = false;
9258 longlong = 0;
9262 /* Decide whether an integer type is signed or not.
9263 Optionally treat bitfields as signed by default. */
9264 if (unsigned_p
9265 /* [class.bit]
9267 It is implementation-defined whether a plain (neither
9268 explicitly signed or unsigned) char, short, int, or long
9269 bit-field is signed or unsigned.
9271 Naturally, we extend this to long long as well. Note that
9272 this does not include wchar_t. */
9273 || (bitfield && !flag_signed_bitfields
9274 && !signed_p
9275 /* A typedef for plain `int' without `signed' can be
9276 controlled just like plain `int', but a typedef for
9277 `signed int' cannot be so controlled. */
9278 && !(typedef_decl
9279 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9280 && TREE_CODE (type) == INTEGER_TYPE
9281 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9283 if (explicit_int128)
9284 type = int128_unsigned_type_node;
9285 else if (longlong)
9286 type = long_long_unsigned_type_node;
9287 else if (long_p)
9288 type = long_unsigned_type_node;
9289 else if (short_p)
9290 type = short_unsigned_type_node;
9291 else if (type == char_type_node)
9292 type = unsigned_char_type_node;
9293 else if (typedef_decl)
9294 type = unsigned_type_for (type);
9295 else
9296 type = unsigned_type_node;
9298 else if (signed_p && type == char_type_node)
9299 type = signed_char_type_node;
9300 else if (explicit_int128)
9301 type = int128_integer_type_node;
9302 else if (longlong)
9303 type = long_long_integer_type_node;
9304 else if (long_p)
9305 type = long_integer_type_node;
9306 else if (short_p)
9307 type = short_integer_type_node;
9309 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9311 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9312 error ("complex invalid for %qs", name);
9313 /* If we just have "complex", it is equivalent to
9314 "complex double", but if any modifiers at all are specified it is
9315 the complex form of TYPE. E.g, "complex short" is
9316 "complex short int". */
9317 else if (defaulted_int && ! longlong && ! explicit_int128
9318 && ! (long_p || short_p || signed_p || unsigned_p))
9319 type = complex_double_type_node;
9320 else if (type == integer_type_node)
9321 type = complex_integer_type_node;
9322 else if (type == float_type_node)
9323 type = complex_float_type_node;
9324 else if (type == double_type_node)
9325 type = complex_double_type_node;
9326 else if (type == long_double_type_node)
9327 type = complex_long_double_type_node;
9328 else
9329 type = build_complex_type (type);
9332 type_quals = TYPE_UNQUALIFIED;
9333 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9334 type_quals |= TYPE_QUAL_CONST;
9335 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9336 type_quals |= TYPE_QUAL_VOLATILE;
9337 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9338 type_quals |= TYPE_QUAL_RESTRICT;
9339 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
9340 error ("qualifiers are not allowed on declaration of %<operator %T%>",
9341 ctor_return_type);
9343 /* If we're using the injected-class-name to form a compound type or a
9344 declaration, replace it with the underlying class so we don't get
9345 redundant typedefs in the debug output. But if we are returning the
9346 type unchanged, leave it alone so that it's available to
9347 maybe_get_template_decl_from_type_decl. */
9348 if (CLASS_TYPE_P (type)
9349 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9350 && type == TREE_TYPE (TYPE_NAME (type))
9351 && (declarator || type_quals))
9352 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9354 type_quals |= cp_type_quals (type);
9355 type = cp_build_qualified_type_real
9356 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
9357 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9358 /* We might have ignored or rejected some of the qualifiers. */
9359 type_quals = cp_type_quals (type);
9361 staticp = 0;
9362 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9363 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9364 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9366 storage_class = declspecs->storage_class;
9367 if (storage_class == sc_static)
9368 staticp = 1 + (decl_context == FIELD);
9370 if (virtualp && staticp == 2)
9372 error ("member %qD cannot be declared both virtual and static", dname);
9373 storage_class = sc_none;
9374 staticp = 0;
9376 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9378 /* Issue errors about use of storage classes for parameters. */
9379 if (decl_context == PARM)
9381 if (typedef_p)
9383 error ("typedef declaration invalid in parameter declaration");
9384 return error_mark_node;
9386 else if (template_parm_flag && storage_class != sc_none)
9388 error ("storage class specified for template parameter %qs", name);
9389 return error_mark_node;
9391 else if (storage_class == sc_static
9392 || storage_class == sc_extern
9393 || thread_p)
9394 error ("storage class specifiers invalid in parameter declarations");
9396 /* Function parameters cannot be concept. */
9397 if (concept_p)
9398 error ("a parameter cannot be declared %<concept%>");
9399 /* Function parameters cannot be constexpr. If we saw one, moan
9400 and pretend it wasn't there. */
9401 else if (constexpr_p)
9403 error ("a parameter cannot be declared %<constexpr%>");
9404 constexpr_p = 0;
9408 /* Give error if `virtual' is used outside of class declaration. */
9409 if (virtualp
9410 && (current_class_name == NULL_TREE || decl_context != FIELD))
9412 error ("%<virtual%> outside class declaration");
9413 virtualp = 0;
9416 /* Static anonymous unions are dealt with here. */
9417 if (staticp && decl_context == TYPENAME
9418 && declspecs->type
9419 && ANON_AGGR_TYPE_P (declspecs->type))
9420 decl_context = FIELD;
9422 /* Warn about storage classes that are invalid for certain
9423 kinds of declarations (parameters, typenames, etc.). */
9424 if (thread_p
9425 && ((storage_class
9426 && storage_class != sc_extern
9427 && storage_class != sc_static)
9428 || typedef_p))
9430 error ("multiple storage classes in declaration of %qs", name);
9431 thread_p = false;
9433 if (decl_context != NORMAL
9434 && ((storage_class != sc_none
9435 && storage_class != sc_mutable)
9436 || thread_p))
9438 if ((decl_context == PARM || decl_context == CATCHPARM)
9439 && (storage_class == sc_register
9440 || storage_class == sc_auto))
9442 else if (typedef_p)
9444 else if (decl_context == FIELD
9445 /* C++ allows static class elements. */
9446 && storage_class == sc_static)
9447 /* C++ also allows inlines and signed and unsigned elements,
9448 but in those cases we don't come in here. */
9450 else
9452 if (decl_context == FIELD)
9453 error ("storage class specified for %qs", name);
9454 else
9456 if (decl_context == PARM || decl_context == CATCHPARM)
9457 error ("storage class specified for parameter %qs", name);
9458 else
9459 error ("storage class specified for typename");
9461 if (storage_class == sc_register
9462 || storage_class == sc_auto
9463 || storage_class == sc_extern
9464 || thread_p)
9465 storage_class = sc_none;
9468 else if (storage_class == sc_extern && funcdef_flag
9469 && ! toplevel_bindings_p ())
9470 error ("nested function %qs declared %<extern%>", name);
9471 else if (toplevel_bindings_p ())
9473 if (storage_class == sc_auto)
9474 error ("top-level declaration of %qs specifies %<auto%>", name);
9476 else if (thread_p
9477 && storage_class != sc_extern
9478 && storage_class != sc_static)
9480 if (declspecs->gnu_thread_keyword_p)
9481 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9482 "declared %<__thread%>", name);
9484 /* When thread_local is applied to a variable of block scope the
9485 storage-class-specifier static is implied if it does not appear
9486 explicitly. */
9487 storage_class = declspecs->storage_class = sc_static;
9488 staticp = 1;
9491 if (storage_class && friendp)
9493 error ("storage class specifiers invalid in friend function declarations");
9494 storage_class = sc_none;
9495 staticp = 0;
9498 if (!id_declarator)
9499 unqualified_id = NULL_TREE;
9500 else
9502 unqualified_id = id_declarator->u.id.unqualified_name;
9503 switch (TREE_CODE (unqualified_id))
9505 case BIT_NOT_EXPR:
9506 unqualified_id = TREE_OPERAND (unqualified_id, 0);
9507 if (TYPE_P (unqualified_id))
9508 unqualified_id = constructor_name (unqualified_id);
9509 break;
9511 case IDENTIFIER_NODE:
9512 case TEMPLATE_ID_EXPR:
9513 break;
9515 default:
9516 gcc_unreachable ();
9520 if (declspecs->std_attributes)
9522 /* Apply the c++11 attributes to the type preceding them. */
9523 input_location = declspecs->locations[ds_std_attribute];
9524 decl_attributes (&type, declspecs->std_attributes, 0);
9525 input_location = saved_loc;
9528 /* Determine the type of the entity declared by recurring on the
9529 declarator. */
9530 for (; declarator; declarator = declarator->declarator)
9532 const cp_declarator *inner_declarator;
9533 tree attrs;
9535 if (type == error_mark_node)
9536 return error_mark_node;
9538 attrs = declarator->attributes;
9539 if (attrs)
9541 int attr_flags;
9543 attr_flags = 0;
9544 if (declarator == NULL || declarator->kind == cdk_id)
9545 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9546 if (declarator->kind == cdk_function)
9547 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9548 if (declarator->kind == cdk_array)
9549 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9550 returned_attrs = decl_attributes (&type,
9551 chainon (returned_attrs, attrs),
9552 attr_flags);
9555 if (declarator->kind == cdk_id)
9556 break;
9558 inner_declarator = declarator->declarator;
9560 switch (declarator->kind)
9562 case cdk_array:
9563 type = create_array_type_for_decl (dname, type,
9564 declarator->u.array.bounds);
9565 if (declarator->std_attributes)
9566 /* [dcl.array]/1:
9568 The optional attribute-specifier-seq appertains to the
9569 array. */
9570 returned_attrs = chainon (returned_attrs,
9571 declarator->std_attributes);
9572 break;
9574 case cdk_function:
9576 tree arg_types;
9577 int funcdecl_p;
9579 /* Declaring a function type.
9580 Make sure we have a valid type for the function to return. */
9582 if (type_quals != TYPE_UNQUALIFIED)
9584 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9585 warning (OPT_Wignored_qualifiers,
9586 "type qualifiers ignored on function return type");
9587 /* We now know that the TYPE_QUALS don't apply to the
9588 decl, but to its return type. */
9589 type_quals = TYPE_UNQUALIFIED;
9591 errmsg = targetm.invalid_return_type (type);
9592 if (errmsg)
9594 error (errmsg);
9595 type = integer_type_node;
9598 /* Error about some types functions can't return. */
9600 if (TREE_CODE (type) == FUNCTION_TYPE)
9602 error ("%qs declared as function returning a function", name);
9603 return error_mark_node;
9605 if (TREE_CODE (type) == ARRAY_TYPE)
9607 error ("%qs declared as function returning an array", name);
9608 return error_mark_node;
9611 input_location = declspecs->locations[ds_type_spec];
9612 abstract_virtuals_error (ACU_RETURN, type);
9613 input_location = saved_loc;
9615 /* Pick up type qualifiers which should be applied to `this'. */
9616 memfn_quals = declarator->u.function.qualifiers;
9617 /* Pick up virt-specifiers. */
9618 virt_specifiers = declarator->u.function.virt_specifiers;
9619 /* And ref-qualifier, too */
9620 rqual = declarator->u.function.ref_qualifier;
9621 /* Pick up the exception specifications. */
9622 raises = declarator->u.function.exception_specification;
9623 /* If the exception-specification is ill-formed, let's pretend
9624 there wasn't one. */
9625 if (raises == error_mark_node)
9626 raises = NULL_TREE;
9628 /* Say it's a definition only for the CALL_EXPR
9629 closest to the identifier. */
9630 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9632 /* Handle a late-specified return type. */
9633 if (funcdecl_p)
9635 if (type_uses_auto (type))
9637 if (!declarator->u.function.late_return_type)
9639 if (current_class_type
9640 && LAMBDA_TYPE_P (current_class_type))
9641 /* OK for C++11 lambdas. */;
9642 else if (cxx_dialect < cxx1y)
9644 error ("%qs function uses "
9645 "%<auto%> type specifier without trailing "
9646 "return type", name);
9647 inform (input_location, "deduced return type "
9648 "only available with -std=c++1y or "
9649 "-std=gnu++1y");
9651 else if (virtualp)
9652 permerror (input_location, "virtual function cannot "
9653 "have deduced return type");
9655 else if (!is_auto (type))
9657 error ("%qs function with trailing return type has"
9658 " %qT as its type rather than plain %<auto%>",
9659 name, type);
9660 return error_mark_node;
9663 else if (declarator->u.function.late_return_type)
9665 if (cxx_dialect < cxx11)
9666 /* Not using maybe_warn_cpp0x because this should
9667 always be an error. */
9668 error ("trailing return type only available with "
9669 "-std=c++11 or -std=gnu++11");
9670 else
9671 error ("%qs function with trailing return type not "
9672 "declared with %<auto%> type specifier", name);
9673 return error_mark_node;
9676 type = splice_late_return_type
9677 (type, declarator->u.function.late_return_type);
9678 if (type == error_mark_node)
9679 return error_mark_node;
9681 if (ctype == NULL_TREE
9682 && decl_context == FIELD
9683 && funcdecl_p
9684 && (friendp == 0 || dname == current_class_name))
9685 ctype = current_class_type;
9687 if (ctype && (sfk == sfk_constructor
9688 || sfk == sfk_destructor))
9690 /* We are within a class's scope. If our declarator name
9691 is the same as the class name, and we are defining
9692 a function, then it is a constructor/destructor, and
9693 therefore returns a void type. */
9695 /* ISO C++ 12.4/2. A destructor may not be declared
9696 const or volatile. A destructor may not be static.
9697 A destructor may not be declared with ref-qualifier.
9699 ISO C++ 12.1. A constructor may not be declared
9700 const or volatile. A constructor may not be
9701 virtual. A constructor may not be static.
9702 A constructor may not be declared with ref-qualifier. */
9703 if (staticp == 2)
9704 error ((flags == DTOR_FLAG)
9705 ? G_("destructor cannot be static member function")
9706 : G_("constructor cannot be static member function"));
9707 if (memfn_quals)
9709 error ((flags == DTOR_FLAG)
9710 ? G_("destructors may not be cv-qualified")
9711 : G_("constructors may not be cv-qualified"));
9712 memfn_quals = TYPE_UNQUALIFIED;
9715 if (rqual)
9717 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
9718 error ((flags == DTOR_FLAG)
9719 ? "destructors may not be ref-qualified"
9720 : "constructors may not be ref-qualified");
9721 rqual = REF_QUAL_NONE;
9724 if (decl_context == FIELD
9725 && !member_function_or_else (ctype,
9726 current_class_type,
9727 flags))
9728 return error_mark_node;
9730 if (flags != DTOR_FLAG)
9732 /* It's a constructor. */
9733 if (explicitp == 1)
9734 explicitp = 2;
9735 if (virtualp)
9737 permerror (input_location, "constructors cannot be declared virtual");
9738 virtualp = 0;
9740 if (decl_context == FIELD
9741 && sfk != sfk_constructor)
9742 return error_mark_node;
9744 if (decl_context == FIELD)
9745 staticp = 0;
9747 else if (friendp)
9749 if (initialized)
9750 error ("can%'t initialize friend function %qs", name);
9751 if (virtualp)
9753 /* Cannot be both friend and virtual. */
9754 error ("virtual functions cannot be friends");
9755 friendp = 0;
9757 if (decl_context == NORMAL)
9758 error ("friend declaration not in class definition");
9759 if (current_function_decl && funcdef_flag)
9760 error ("can%'t define friend function %qs in a local "
9761 "class definition",
9762 name);
9764 else if (ctype && sfk == sfk_conversion)
9766 if (explicitp == 1)
9768 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9769 explicitp = 2;
9773 arg_types = grokparms (declarator->u.function.parameters,
9774 &parms);
9776 if (inner_declarator
9777 && inner_declarator->kind == cdk_id
9778 && inner_declarator->u.id.sfk == sfk_destructor
9779 && arg_types != void_list_node)
9781 error ("destructors may not have parameters");
9782 arg_types = void_list_node;
9783 parms = NULL_TREE;
9786 type = build_function_type (type, arg_types);
9787 if (declarator->std_attributes)
9788 /* [dcl.fct]/2:
9790 The optional attribute-specifier-seq appertains to
9791 the function type. */
9792 decl_attributes (&type, declarator->std_attributes,
9795 break;
9797 case cdk_pointer:
9798 case cdk_reference:
9799 case cdk_ptrmem:
9800 /* Filter out pointers-to-references and references-to-references.
9801 We can get these if a TYPE_DECL is used. */
9803 if (TREE_CODE (type) == REFERENCE_TYPE)
9805 if (declarator->kind != cdk_reference)
9807 error ("cannot declare pointer to %q#T", type);
9808 type = TREE_TYPE (type);
9811 /* In C++0x, we allow reference to reference declarations
9812 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9813 and template type arguments [14.3.1/4 temp.arg.type]. The
9814 check for direct reference to reference declarations, which
9815 are still forbidden, occurs below. Reasoning behind the change
9816 can be found in DR106, DR540, and the rvalue reference
9817 proposals. */
9818 else if (cxx_dialect == cxx98)
9820 error ("cannot declare reference to %q#T", type);
9821 type = TREE_TYPE (type);
9824 else if (VOID_TYPE_P (type))
9826 if (declarator->kind == cdk_reference)
9827 error ("cannot declare reference to %q#T", type);
9828 else if (declarator->kind == cdk_ptrmem)
9829 error ("cannot declare pointer to %q#T member", type);
9832 /* We now know that the TYPE_QUALS don't apply to the decl,
9833 but to the target of the pointer. */
9834 type_quals = TYPE_UNQUALIFIED;
9836 /* This code used to handle METHOD_TYPE, but I don't think it's
9837 possible to get it here anymore. */
9838 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9839 if (declarator->kind == cdk_ptrmem
9840 && TREE_CODE (type) == FUNCTION_TYPE)
9842 memfn_quals |= type_memfn_quals (type);
9843 type = build_memfn_type (type,
9844 declarator->u.pointer.class_type,
9845 memfn_quals,
9846 rqual);
9847 if (type == error_mark_node)
9848 return error_mark_node;
9850 rqual = REF_QUAL_NONE;
9851 memfn_quals = TYPE_UNQUALIFIED;
9854 if (TREE_CODE (type) == FUNCTION_TYPE
9855 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
9856 || type_memfn_rqual (type) != REF_QUAL_NONE))
9857 error (declarator->kind == cdk_reference
9858 ? G_("cannot declare reference to qualified function type %qT")
9859 : G_("cannot declare pointer to qualified function type %qT"),
9860 type);
9862 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type)
9863 && (flag_iso || warn_vla > 0))
9864 pedwarn (input_location, OPT_Wvla,
9865 declarator->kind == cdk_reference
9866 ? G_("reference to array of runtime bound")
9867 : G_("pointer to array of runtime bound"));
9869 /* When the pointed-to type involves components of variable size,
9870 care must be taken to ensure that the size evaluation code is
9871 emitted early enough to dominate all the possible later uses
9872 and late enough for the variables on which it depends to have
9873 been assigned.
9875 This is expected to happen automatically when the pointed-to
9876 type has a name/declaration of it's own, but special attention
9877 is required if the type is anonymous.
9879 We handle the NORMAL and FIELD contexts here by inserting a
9880 dummy statement that just evaluates the size at a safe point
9881 and ensures it is not deferred until e.g. within a deeper
9882 conditional context (c++/43555).
9884 We expect nothing to be needed here for PARM or TYPENAME.
9885 Evaluating the size at this point for TYPENAME would
9886 actually be incorrect, as we might be in the middle of an
9887 expression with side effects on the pointed-to type size
9888 "arguments" prior to the pointer declaration point and the
9889 size evaluation could end up prior to the side effects. */
9891 if (!TYPE_NAME (type)
9892 && (decl_context == NORMAL || decl_context == FIELD)
9893 && at_function_scope_p ()
9894 && variably_modified_type_p (type, NULL_TREE))
9895 /* Force evaluation of the SAVE_EXPR. */
9896 finish_expr_stmt (TYPE_SIZE (type));
9898 if (declarator->kind == cdk_reference)
9900 /* In C++0x, the type we are creating a reference to might be
9901 a typedef which is itself a reference type. In that case,
9902 we follow the reference collapsing rules in
9903 [7.1.3/8 dcl.typedef] to create the final reference type:
9905 "If a typedef TD names a type that is a reference to a type
9906 T, an attempt to create the type 'lvalue reference to cv TD'
9907 creates the type 'lvalue reference to T,' while an attempt
9908 to create the type "rvalue reference to cv TD' creates the
9909 type TD."
9911 if (VOID_TYPE_P (type))
9912 /* We already gave an error. */;
9913 else if (TREE_CODE (type) == REFERENCE_TYPE)
9915 if (declarator->u.reference.rvalue_ref)
9916 /* Leave type alone. */;
9917 else
9918 type = cp_build_reference_type (TREE_TYPE (type), false);
9920 else
9921 type = cp_build_reference_type
9922 (type, declarator->u.reference.rvalue_ref);
9924 /* In C++0x, we need this check for direct reference to
9925 reference declarations, which are forbidden by
9926 [8.3.2/5 dcl.ref]. Reference to reference declarations
9927 are only allowed indirectly through typedefs and template
9928 type arguments. Example:
9930 void foo(int & &); // invalid ref-to-ref decl
9932 typedef int & int_ref;
9933 void foo(int_ref &); // valid ref-to-ref decl
9935 if (inner_declarator && inner_declarator->kind == cdk_reference)
9936 error ("cannot declare reference to %q#T, which is not "
9937 "a typedef or a template type argument", type);
9939 else if (TREE_CODE (type) == METHOD_TYPE)
9940 type = build_ptrmemfunc_type (build_pointer_type (type));
9941 else if (declarator->kind == cdk_ptrmem)
9943 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9944 != NAMESPACE_DECL);
9945 if (declarator->u.pointer.class_type == error_mark_node)
9946 /* We will already have complained. */
9947 type = error_mark_node;
9948 else
9949 type = build_ptrmem_type (declarator->u.pointer.class_type,
9950 type);
9952 else
9953 type = build_pointer_type (type);
9955 /* Process a list of type modifier keywords (such as
9956 const or volatile) that were given inside the `*' or `&'. */
9958 if (declarator->u.pointer.qualifiers)
9960 type
9961 = cp_build_qualified_type (type,
9962 declarator->u.pointer.qualifiers);
9963 type_quals = cp_type_quals (type);
9966 /* Apply C++11 attributes to the pointer, and not to the
9967 type pointed to. This is unlike what is done for GNU
9968 attributes above. It is to comply with [dcl.ptr]/1:
9970 [the optional attribute-specifier-seq (7.6.1) appertains
9971 to the pointer and not to the object pointed to]. */
9972 if (declarator->std_attributes)
9973 decl_attributes (&type, declarator->std_attributes,
9976 ctype = NULL_TREE;
9977 break;
9979 case cdk_error:
9980 break;
9982 default:
9983 gcc_unreachable ();
9987 /* A `constexpr' specifier used in an object declaration declares
9988 the object as `const'. */
9989 if (constexpr_p && innermost_code != cdk_function)
9991 if (type_quals & TYPE_QUAL_VOLATILE)
9992 error ("both %<volatile%> and %<constexpr%> cannot be used here");
9993 if (TREE_CODE (type) != REFERENCE_TYPE)
9995 type_quals |= TYPE_QUAL_CONST;
9996 type = cp_build_qualified_type (type, type_quals);
10000 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
10001 && TREE_CODE (type) != FUNCTION_TYPE
10002 && TREE_CODE (type) != METHOD_TYPE)
10004 error ("template-id %qD used as a declarator",
10005 unqualified_id);
10006 unqualified_id = dname;
10009 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
10010 qualified with a class-name, turn it into a METHOD_TYPE, unless
10011 we know that the function is static. We take advantage of this
10012 opportunity to do other processing that pertains to entities
10013 explicitly declared to be class members. Note that if DECLARATOR
10014 is non-NULL, we know it is a cdk_id declarator; otherwise, we
10015 would not have exited the loop above. */
10016 if (declarator
10017 && declarator->u.id.qualifying_scope
10018 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
10020 ctype = declarator->u.id.qualifying_scope;
10021 ctype = TYPE_MAIN_VARIANT (ctype);
10022 template_count = num_template_headers_for_class (ctype);
10024 if (ctype == current_class_type)
10026 if (friendp)
10028 permerror (input_location, "member functions are implicitly friends of their class");
10029 friendp = 0;
10031 else
10032 permerror (declarator->id_loc,
10033 "extra qualification %<%T::%> on member %qs",
10034 ctype, name);
10036 else if (/* If the qualifying type is already complete, then we
10037 can skip the following checks. */
10038 !COMPLETE_TYPE_P (ctype)
10039 && (/* If the function is being defined, then
10040 qualifying type must certainly be complete. */
10041 funcdef_flag
10042 /* A friend declaration of "T::f" is OK, even if
10043 "T" is a template parameter. But, if this
10044 function is not a friend, the qualifying type
10045 must be a class. */
10046 || (!friendp && !CLASS_TYPE_P (ctype))
10047 /* For a declaration, the type need not be
10048 complete, if either it is dependent (since there
10049 is no meaningful definition of complete in that
10050 case) or the qualifying class is currently being
10051 defined. */
10052 || !(dependent_type_p (ctype)
10053 || currently_open_class (ctype)))
10054 /* Check that the qualifying type is complete. */
10055 && !complete_type_or_else (ctype, NULL_TREE))
10056 return error_mark_node;
10057 else if (TREE_CODE (type) == FUNCTION_TYPE)
10059 if (current_class_type
10060 && (!friendp || funcdef_flag))
10062 error (funcdef_flag
10063 ? G_("cannot define member function %<%T::%s%> "
10064 "within %<%T%>")
10065 : G_("cannot declare member function %<%T::%s%> "
10066 "within %<%T%>"),
10067 ctype, name, current_class_type);
10068 return error_mark_node;
10071 else if (typedef_p && current_class_type)
10073 error ("cannot declare member %<%T::%s%> within %qT",
10074 ctype, name, current_class_type);
10075 return error_mark_node;
10079 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
10080 ctype = current_class_type;
10082 /* Now TYPE has the actual type. */
10084 if (returned_attrs)
10086 if (attrlist)
10087 *attrlist = chainon (returned_attrs, *attrlist);
10088 else
10089 attrlist = &returned_attrs;
10092 if (declarator
10093 && declarator->kind == cdk_id
10094 && declarator->std_attributes)
10095 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
10096 a declarator-id appertains to the entity that is declared. */
10097 *attrlist = chainon (*attrlist, declarator->std_attributes);
10099 /* Handle parameter packs. */
10100 if (parameter_pack_p)
10102 if (decl_context == PARM)
10103 /* Turn the type into a pack expansion.*/
10104 type = make_pack_expansion (type);
10105 else
10106 error ("non-parameter %qs cannot be a parameter pack", name);
10109 /* Did array size calculations overflow or does the array cover more
10110 than half of the address-space? */
10111 if (TREE_CODE (type) == ARRAY_TYPE
10112 && COMPLETE_TYPE_P (type)
10113 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
10114 && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
10116 error ("size of array %qs is too large", name);
10117 /* If we proceed with the array type as it is, we'll eventually
10118 crash in tree_to_[su]hwi(). */
10119 type = error_mark_node;
10122 if ((decl_context == FIELD || decl_context == PARM)
10123 && !processing_template_decl
10124 && variably_modified_type_p (type, NULL_TREE))
10126 if (decl_context == FIELD)
10127 error ("data member may not have variably modified type %qT", type);
10128 else
10129 error ("parameter may not have variably modified type %qT", type);
10130 type = error_mark_node;
10133 if (explicitp == 1 || (explicitp && friendp))
10135 /* [dcl.fct.spec] The explicit specifier shall only be used in
10136 declarations of constructors within a class definition. */
10137 error ("only declarations of constructors can be %<explicit%>");
10138 explicitp = 0;
10141 if (storage_class == sc_mutable)
10143 if (decl_context != FIELD || friendp)
10145 error ("non-member %qs cannot be declared %<mutable%>", name);
10146 storage_class = sc_none;
10148 else if (decl_context == TYPENAME || typedef_p)
10150 error ("non-object member %qs cannot be declared %<mutable%>", name);
10151 storage_class = sc_none;
10153 else if (TREE_CODE (type) == FUNCTION_TYPE
10154 || TREE_CODE (type) == METHOD_TYPE)
10156 error ("function %qs cannot be declared %<mutable%>", name);
10157 storage_class = sc_none;
10159 else if (staticp)
10161 error ("static %qs cannot be declared %<mutable%>", name);
10162 storage_class = sc_none;
10164 else if (type_quals & TYPE_QUAL_CONST)
10166 error ("const %qs cannot be declared %<mutable%>", name);
10167 storage_class = sc_none;
10169 else if (TREE_CODE (type) == REFERENCE_TYPE)
10171 permerror (input_location, "reference %qs cannot be declared "
10172 "%<mutable%>", name);
10173 storage_class = sc_none;
10177 /* If this is declaring a typedef name, return a TYPE_DECL. */
10178 if (typedef_p && decl_context != TYPENAME)
10180 tree decl;
10182 /* Note that the grammar rejects storage classes
10183 in typenames, fields or parameters. */
10184 if (current_lang_name == lang_name_java)
10185 TYPE_FOR_JAVA (type) = 1;
10187 /* This declaration:
10189 typedef void f(int) const;
10191 declares a function type which is not a member of any
10192 particular class, but which is cv-qualified; for
10193 example "f S::*" declares a pointer to a const-qualified
10194 member function of S. We record the cv-qualification in the
10195 function type. */
10196 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
10198 type = apply_memfn_quals (type, memfn_quals, rqual);
10200 /* We have now dealt with these qualifiers. */
10201 memfn_quals = TYPE_UNQUALIFIED;
10202 rqual = REF_QUAL_NONE;
10205 if (type_uses_auto (type))
10207 error ("typedef declared %<auto%>");
10208 type = error_mark_node;
10211 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type)
10212 && (flag_iso || warn_vla > 0))
10213 pedwarn (input_location, OPT_Wvla,
10214 "typedef naming array of runtime bound");
10216 if (decl_context == FIELD)
10217 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10218 else
10219 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10220 if (id_declarator && declarator->u.id.qualifying_scope) {
10221 error_at (DECL_SOURCE_LOCATION (decl),
10222 "typedef name may not be a nested-name-specifier");
10223 TREE_TYPE (decl) = error_mark_node;
10226 if (decl_context != FIELD)
10228 if (!current_function_decl)
10229 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10230 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10231 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10232 (current_function_decl)))
10233 /* The TYPE_DECL is "abstract" because there will be
10234 clones of this constructor/destructor, and there will
10235 be copies of this TYPE_DECL generated in those
10236 clones. The decloning optimization (for space) may
10237 revert this subsequently if it determines that
10238 the clones should share a common implementation. */
10239 DECL_ABSTRACT (decl) = 1;
10241 else if (current_class_type
10242 && constructor_name_p (unqualified_id, current_class_type))
10243 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10244 "as enclosing class",
10245 unqualified_id);
10247 /* If the user declares "typedef struct {...} foo" then the
10248 struct will have an anonymous name. Fill that name in now.
10249 Nothing can refer to it, so nothing needs know about the name
10250 change. */
10251 if (type != error_mark_node
10252 && unqualified_id
10253 && TYPE_NAME (type)
10254 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10255 && TYPE_ANONYMOUS_P (type)
10256 && declspecs->type_definition_p
10257 && attributes_naming_typedef_ok (*attrlist)
10258 && cp_type_quals (type) == TYPE_UNQUALIFIED)
10260 tree t;
10262 /* Replace the anonymous name with the real name everywhere. */
10263 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10265 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
10266 /* We do not rename the debug info representing the
10267 anonymous tagged type because the standard says in
10268 [dcl.typedef] that the naming applies only for
10269 linkage purposes. */
10270 /*debug_hooks->set_name (t, decl);*/
10271 TYPE_NAME (t) = decl;
10274 if (TYPE_LANG_SPECIFIC (type))
10275 TYPE_WAS_ANONYMOUS (type) = 1;
10277 /* If this is a typedef within a template class, the nested
10278 type is a (non-primary) template. The name for the
10279 template needs updating as well. */
10280 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10281 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10282 = TYPE_IDENTIFIER (type);
10284 /* Adjust linkage now that we aren't anonymous anymore. */
10285 reset_type_linkage (type);
10287 /* FIXME remangle member functions; member functions of a
10288 type with external linkage have external linkage. */
10291 if (signed_p
10292 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10293 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10295 bad_specifiers (decl, BSP_TYPE, virtualp,
10296 memfn_quals != TYPE_UNQUALIFIED,
10297 inlinep, friendp, raises != NULL_TREE);
10299 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10300 /* Acknowledge that this was written:
10301 `using analias = atype;'. */
10302 TYPE_DECL_ALIAS_P (decl) = 1;
10304 return decl;
10307 /* Detect the case of an array type of unspecified size
10308 which came, as such, direct from a typedef name.
10309 We must copy the type, so that the array's domain can be
10310 individually set by the object's initializer. */
10312 if (type && typedef_type
10313 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10314 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10315 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10317 /* Detect where we're using a typedef of function type to declare a
10318 function. PARMS will not be set, so we must create it now. */
10320 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10322 tree decls = NULL_TREE;
10323 tree args;
10325 for (args = TYPE_ARG_TYPES (type);
10326 args && args != void_list_node;
10327 args = TREE_CHAIN (args))
10329 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10331 DECL_CHAIN (decl) = decls;
10332 decls = decl;
10335 parms = nreverse (decls);
10337 if (decl_context != TYPENAME)
10339 /* The qualifiers on the function type become the qualifiers on
10340 the non-static member function. */
10341 memfn_quals |= type_memfn_quals (type);
10342 rqual = type_memfn_rqual (type);
10343 type_quals = TYPE_UNQUALIFIED;
10347 /* If this is a type name (such as, in a cast or sizeof),
10348 compute the type and return it now. */
10350 if (decl_context == TYPENAME)
10352 /* Note that the grammar rejects storage classes
10353 in typenames, fields or parameters. */
10354 if (type_quals != TYPE_UNQUALIFIED)
10355 type_quals = TYPE_UNQUALIFIED;
10357 /* Special case: "friend class foo" looks like a TYPENAME context. */
10358 if (friendp)
10360 if (type_quals != TYPE_UNQUALIFIED)
10362 error ("type qualifiers specified for friend class declaration");
10363 type_quals = TYPE_UNQUALIFIED;
10365 if (inlinep)
10367 error ("%<inline%> specified for friend class declaration");
10368 inlinep = 0;
10371 if (!current_aggr)
10373 /* Don't allow friend declaration without a class-key. */
10374 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10375 permerror (input_location, "template parameters cannot be friends");
10376 else if (TREE_CODE (type) == TYPENAME_TYPE)
10377 permerror (input_location, "friend declaration requires class-key, "
10378 "i.e. %<friend class %T::%D%>",
10379 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10380 else
10381 permerror (input_location, "friend declaration requires class-key, "
10382 "i.e. %<friend %#T%>",
10383 type);
10386 /* Only try to do this stuff if we didn't already give up. */
10387 if (type != integer_type_node)
10389 /* A friendly class? */
10390 if (current_class_type)
10391 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10392 /*complain=*/true);
10393 else
10394 error ("trying to make class %qT a friend of global scope",
10395 type);
10397 type = void_type_node;
10400 else if (memfn_quals || rqual)
10402 if (ctype == NULL_TREE
10403 && TREE_CODE (type) == METHOD_TYPE)
10404 ctype = TYPE_METHOD_BASETYPE (type);
10406 if (ctype)
10407 type = build_memfn_type (type, ctype, memfn_quals, rqual);
10408 /* Core issue #547: need to allow this in template type args.
10409 Allow it in general in C++11 for alias-declarations. */
10410 else if ((template_type_arg || cxx_dialect >= cxx11)
10411 && TREE_CODE (type) == FUNCTION_TYPE)
10412 type = apply_memfn_quals (type, memfn_quals, rqual);
10413 else
10414 error ("invalid qualifiers on non-member function type");
10417 return type;
10419 else if (unqualified_id == NULL_TREE && decl_context != PARM
10420 && decl_context != CATCHPARM
10421 && TREE_CODE (type) != UNION_TYPE
10422 && ! bitfield)
10424 error ("abstract declarator %qT used as declaration", type);
10425 return error_mark_node;
10428 /* Only functions may be declared using an operator-function-id. */
10429 if (unqualified_id
10430 && IDENTIFIER_OPNAME_P (unqualified_id)
10431 && TREE_CODE (type) != FUNCTION_TYPE
10432 && TREE_CODE (type) != METHOD_TYPE)
10434 error ("declaration of %qD as non-function", unqualified_id);
10435 return error_mark_node;
10438 /* We don't check parameter types here because we can emit a better
10439 error message later. */
10440 if (decl_context != PARM)
10442 type = check_var_type (unqualified_id, type);
10443 if (type == error_mark_node)
10444 return error_mark_node;
10447 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10448 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10450 if (decl_context == PARM || decl_context == CATCHPARM)
10452 if (ctype || in_namespace)
10453 error ("cannot use %<::%> in parameter declaration");
10455 if (type_uses_auto (type))
10457 if (cxx_dialect >= cxx1y)
10458 error ("%<auto%> parameter not permitted in this context");
10459 else
10460 error ("parameter declared %<auto%>");
10461 type = error_mark_node;
10464 /* A parameter declared as an array of T is really a pointer to T.
10465 One declared as a function is really a pointer to a function.
10466 One declared as a member is really a pointer to member. */
10468 if (TREE_CODE (type) == ARRAY_TYPE)
10470 /* Transfer const-ness of array into that of type pointed to. */
10471 type = build_pointer_type (TREE_TYPE (type));
10472 type_quals = TYPE_UNQUALIFIED;
10474 else if (TREE_CODE (type) == FUNCTION_TYPE)
10475 type = build_pointer_type (type);
10478 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10479 && !NEW_DELETE_OPNAME_P (unqualified_id))
10481 cp_cv_quals real_quals = memfn_quals;
10482 if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
10483 real_quals |= TYPE_QUAL_CONST;
10484 type = build_memfn_type (type, ctype, real_quals, rqual);
10488 tree decl;
10490 if (decl_context == PARM)
10492 decl = cp_build_parm_decl (unqualified_id, type);
10494 bad_specifiers (decl, BSP_PARM, virtualp,
10495 memfn_quals != TYPE_UNQUALIFIED,
10496 inlinep, friendp, raises != NULL_TREE);
10498 else if (decl_context == FIELD)
10500 if (!staticp && TREE_CODE (type) != METHOD_TYPE
10501 && type_uses_auto (type))
10503 error ("non-static data member declared %<auto%>");
10504 type = error_mark_node;
10507 /* The C99 flexible array extension. */
10508 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10509 && TYPE_DOMAIN (type) == NULL_TREE)
10511 tree itype = compute_array_index_type (dname, integer_zero_node,
10512 tf_warning_or_error);
10513 type = build_cplus_array_type (TREE_TYPE (type), itype);
10516 if (type == error_mark_node)
10518 /* Happens when declaring arrays of sizes which
10519 are error_mark_node, for example. */
10520 decl = NULL_TREE;
10522 else if (in_namespace && !friendp)
10524 /* Something like struct S { int N::j; }; */
10525 error ("invalid use of %<::%>");
10526 return error_mark_node;
10528 else if (TREE_CODE (type) == FUNCTION_TYPE
10529 || TREE_CODE (type) == METHOD_TYPE)
10531 int publicp = 0;
10532 tree function_context;
10534 if (friendp == 0)
10536 /* This should never happen in pure C++ (the check
10537 could be an assert). It could happen in
10538 Objective-C++ if someone writes invalid code that
10539 uses a function declaration for an instance
10540 variable or property (instance variables and
10541 properties are parsed as FIELD_DECLs, but they are
10542 part of an Objective-C class, not a C++ class).
10543 That code is invalid and is caught by this
10544 check. */
10545 if (!ctype)
10547 error ("declaration of function %qD in invalid context",
10548 unqualified_id);
10549 return error_mark_node;
10552 /* ``A union may [ ... ] not [ have ] virtual functions.''
10553 ARM 9.5 */
10554 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10556 error ("function %qD declared virtual inside a union",
10557 unqualified_id);
10558 return error_mark_node;
10561 if (NEW_DELETE_OPNAME_P (unqualified_id))
10563 if (virtualp)
10565 error ("%qD cannot be declared virtual, since it "
10566 "is always static",
10567 unqualified_id);
10568 virtualp = 0;
10573 /* Check that the name used for a destructor makes sense. */
10574 if (sfk == sfk_destructor)
10576 tree uqname = id_declarator->u.id.unqualified_name;
10578 if (!ctype)
10580 gcc_assert (friendp);
10581 error ("expected qualified name in friend declaration "
10582 "for destructor %qD", uqname);
10583 return error_mark_node;
10586 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10588 error ("declaration of %qD as member of %qT",
10589 uqname, ctype);
10590 return error_mark_node;
10592 if (concept_p)
10594 error ("a destructor cannot be %<concept%>");
10595 return error_mark_node;
10597 if (constexpr_p)
10599 error ("a destructor cannot be %<constexpr%>");
10600 return error_mark_node;
10603 else if (sfk == sfk_constructor && friendp && !ctype)
10605 error ("expected qualified name in friend declaration "
10606 "for constructor %qD",
10607 id_declarator->u.id.unqualified_name);
10608 return error_mark_node;
10610 if (sfk == sfk_constructor)
10611 if (concept_p)
10613 error ("a constructor cannot be %<concept%>");
10614 return error_mark_node;
10617 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10618 function_context = (ctype != NULL_TREE) ?
10619 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10620 publicp = (! friendp || ! staticp)
10621 && function_context == NULL_TREE;
10622 decl = grokfndecl (ctype, type,
10623 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10624 ? unqualified_id : dname,
10625 parms,
10626 unqualified_id,
10627 virtualp, flags, memfn_quals, rqual, raises,
10628 friendp ? -1 : 0, friendp, publicp,
10629 inlinep | (2 * constexpr_p) | (4 * concept_p),
10630 sfk,
10631 funcdef_flag, template_count, in_namespace,
10632 attrlist, declarator->id_loc);
10633 decl = set_virt_specifiers (decl, virt_specifiers);
10634 if (decl == NULL_TREE)
10635 return error_mark_node;
10636 #if 0
10637 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10638 /* The decl and setting of decl_attr is also turned off. */
10639 decl = build_decl_attribute_variant (decl, decl_attr);
10640 #endif
10642 /* [class.conv.ctor]
10644 A constructor declared without the function-specifier
10645 explicit that can be called with a single parameter
10646 specifies a conversion from the type of its first
10647 parameter to the type of its class. Such a constructor
10648 is called a converting constructor. */
10649 if (explicitp == 2)
10650 DECL_NONCONVERTING_P (decl) = 1;
10652 else if (!staticp && !dependent_type_p (type)
10653 && !COMPLETE_TYPE_P (complete_type (type))
10654 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10656 if (unqualified_id)
10657 error ("field %qD has incomplete type %qT",
10658 unqualified_id, type);
10659 else
10660 error ("name %qT has incomplete type", type);
10662 type = error_mark_node;
10663 decl = NULL_TREE;
10665 else
10667 if (friendp)
10669 error ("%qE is neither function nor member function; "
10670 "cannot be declared friend", unqualified_id);
10671 friendp = 0;
10673 decl = NULL_TREE;
10676 if (friendp)
10678 /* Friends are treated specially. */
10679 if (ctype == current_class_type)
10680 ; /* We already issued a permerror. */
10681 else if (decl && DECL_NAME (decl))
10683 if (template_class_depth (current_class_type) == 0)
10685 decl = check_explicit_specialization
10686 (unqualified_id, decl, template_count,
10687 2 * funcdef_flag + 4);
10688 if (decl == error_mark_node)
10689 return error_mark_node;
10692 decl = do_friend (ctype, unqualified_id, decl,
10693 *attrlist, flags,
10694 funcdef_flag);
10695 return decl;
10697 else
10698 return error_mark_node;
10701 /* Structure field. It may not be a function, except for C++. */
10703 if (decl == NULL_TREE)
10705 if (staticp)
10707 /* C++ allows static class members. All other work
10708 for this is done by grokfield. */
10709 decl = build_lang_decl_loc (declarator
10710 ? declarator->id_loc
10711 : input_location,
10712 VAR_DECL, unqualified_id, type);
10713 set_linkage_for_static_data_member (decl);
10714 /* Even if there is an in-class initialization, DECL
10715 is considered undefined until an out-of-class
10716 definition is provided. */
10717 DECL_EXTERNAL (decl) = 1;
10719 if (thread_p)
10721 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10722 if (declspecs->gnu_thread_keyword_p)
10723 DECL_GNU_TLS_P (decl) = true;
10725 if (concept_p)
10726 // TODO: This needs to be revisited once variable
10727 // templates are supported
10728 error ("static data member %qE declared %<concept%>",
10729 unqualified_id);
10730 else if (constexpr_p && !initialized)
10732 error ("constexpr static data member %qD must have an "
10733 "initializer", decl);
10734 constexpr_p = false;
10737 else
10739 if (concept_p)
10740 error ("non-static data member %qE declared %<concept%>",
10741 unqualified_id);
10742 else if (constexpr_p)
10744 error ("non-static data member %qE declared %<constexpr%>",
10745 unqualified_id);
10746 constexpr_p = false;
10748 decl = build_decl (input_location,
10749 FIELD_DECL, unqualified_id, type);
10750 DECL_NONADDRESSABLE_P (decl) = bitfield;
10751 if (bitfield && !unqualified_id)
10752 TREE_NO_WARNING (decl) = 1;
10754 if (storage_class == sc_mutable)
10756 DECL_MUTABLE_P (decl) = 1;
10757 storage_class = sc_none;
10760 if (initialized)
10762 /* An attempt is being made to initialize a non-static
10763 member. This is new in C++11. */
10764 maybe_warn_cpp0x (CPP0X_NSDMI);
10766 /* If this has been parsed with static storage class, but
10767 errors forced staticp to be cleared, ensure NSDMI is
10768 not present. */
10769 if (declspecs->storage_class == sc_static)
10770 DECL_INITIAL (decl) = error_mark_node;
10774 bad_specifiers (decl, BSP_FIELD, virtualp,
10775 memfn_quals != TYPE_UNQUALIFIED,
10776 inlinep, friendp, raises != NULL_TREE);
10779 else if (TREE_CODE (type) == FUNCTION_TYPE
10780 || TREE_CODE (type) == METHOD_TYPE)
10782 tree original_name;
10783 int publicp = 0;
10785 if (!unqualified_id)
10786 return error_mark_node;
10788 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10789 original_name = dname;
10790 else
10791 original_name = unqualified_id;
10793 if (storage_class == sc_auto)
10794 error ("storage class %<auto%> invalid for function %qs", name);
10795 else if (storage_class == sc_register)
10796 error ("storage class %<register%> invalid for function %qs", name);
10797 else if (thread_p)
10799 if (declspecs->gnu_thread_keyword_p)
10800 error ("storage class %<__thread%> invalid for function %qs",
10801 name);
10802 else
10803 error ("storage class %<thread_local%> invalid for function %qs",
10804 name);
10807 if (virt_specifiers)
10808 error ("virt-specifiers in %qs not allowed outside a class definition", name);
10809 /* Function declaration not at top level.
10810 Storage classes other than `extern' are not allowed
10811 and `extern' makes no difference. */
10812 if (! toplevel_bindings_p ()
10813 && (storage_class == sc_static
10814 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
10815 && pedantic)
10817 if (storage_class == sc_static)
10818 pedwarn (input_location, OPT_Wpedantic,
10819 "%<static%> specified invalid for function %qs "
10820 "declared out of global scope", name);
10821 else
10822 pedwarn (input_location, OPT_Wpedantic,
10823 "%<inline%> specifier invalid for function %qs "
10824 "declared out of global scope", name);
10827 if (ctype == NULL_TREE)
10829 if (virtualp)
10831 error ("virtual non-class function %qs", name);
10832 virtualp = 0;
10834 else if (sfk == sfk_constructor
10835 || sfk == sfk_destructor)
10837 error (funcdef_flag
10838 ? G_("%qs defined in a non-class scope")
10839 : G_("%qs declared in a non-class scope"), name);
10840 sfk = sfk_none;
10844 /* Record whether the function is public. */
10845 publicp = (ctype != NULL_TREE
10846 || storage_class != sc_static);
10848 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10849 virtualp, flags, memfn_quals, rqual, raises,
10850 1, friendp,
10851 publicp,
10852 inlinep | (2 * constexpr_p) | (4 * concept_p),
10853 sfk,
10854 funcdef_flag,
10855 template_count, in_namespace, attrlist,
10856 declarator->id_loc);
10857 if (decl == NULL_TREE)
10858 return error_mark_node;
10860 if (staticp == 1)
10862 int invalid_static = 0;
10864 /* Don't allow a static member function in a class, and forbid
10865 declaring main to be static. */
10866 if (TREE_CODE (type) == METHOD_TYPE)
10868 permerror (input_location, "cannot declare member function %qD to have "
10869 "static linkage", decl);
10870 invalid_static = 1;
10872 else if (current_function_decl)
10874 /* FIXME need arm citation */
10875 error ("cannot declare static function inside another function");
10876 invalid_static = 1;
10879 if (invalid_static)
10881 staticp = 0;
10882 storage_class = sc_none;
10886 else
10888 /* It's a variable. */
10890 // TODO: This needs to be revisited once variable
10891 // templates are supported
10892 if (concept_p)
10894 error ("variable %qE declared %<concept%>",
10895 unqualified_id);
10896 return error_mark_node;
10899 /* An uninitialized decl with `extern' is a reference. */
10900 decl = grokvardecl (type, unqualified_id,
10901 declspecs,
10902 initialized,
10903 (type_quals & TYPE_QUAL_CONST) != 0,
10904 ctype ? ctype : in_namespace);
10905 bad_specifiers (decl, BSP_VAR, virtualp,
10906 memfn_quals != TYPE_UNQUALIFIED,
10907 inlinep, friendp, raises != NULL_TREE);
10909 if (ctype)
10911 DECL_CONTEXT (decl) = ctype;
10912 if (staticp == 1)
10914 permerror (input_location, "%<static%> may not be used when defining "
10915 "(as opposed to declaring) a static data member");
10916 staticp = 0;
10917 storage_class = sc_none;
10919 if (storage_class == sc_register && TREE_STATIC (decl))
10921 error ("static member %qD declared %<register%>", decl);
10922 storage_class = sc_none;
10924 if (storage_class == sc_extern && pedantic)
10926 pedwarn (input_location, OPT_Wpedantic,
10927 "cannot explicitly declare member %q#D to have "
10928 "extern linkage", decl);
10929 storage_class = sc_none;
10932 else if (constexpr_p && DECL_EXTERNAL (decl))
10934 error ("declaration of constexpr variable %qD is not a definition",
10935 decl);
10936 constexpr_p = false;
10940 if (storage_class == sc_extern && initialized && !funcdef_flag)
10942 if (toplevel_bindings_p ())
10944 /* It's common practice (and completely valid) to have a const
10945 be initialized and declared extern. */
10946 if (!(type_quals & TYPE_QUAL_CONST))
10947 warning (0, "%qs initialized and declared %<extern%>", name);
10949 else
10951 error ("%qs has both %<extern%> and initializer", name);
10952 return error_mark_node;
10956 /* Record `register' declaration for warnings on &
10957 and in case doing stupid register allocation. */
10959 if (storage_class == sc_register)
10960 DECL_REGISTER (decl) = 1;
10961 else if (storage_class == sc_extern)
10962 DECL_THIS_EXTERN (decl) = 1;
10963 else if (storage_class == sc_static)
10964 DECL_THIS_STATIC (decl) = 1;
10966 /* Set constexpr flag on vars (functions got it in grokfndecl). */
10967 if (constexpr_p && VAR_P (decl))
10968 DECL_DECLARED_CONSTEXPR_P (decl) = true;
10970 /* Record constancy and volatility on the DECL itself . There's
10971 no need to do this when processing a template; we'll do this
10972 for the instantiated declaration based on the type of DECL. */
10973 if (!processing_template_decl)
10974 cp_apply_type_quals_to_decl (type_quals, decl);
10976 return decl;
10980 /* Subroutine of start_function. Ensure that each of the parameter
10981 types (as listed in PARMS) is complete, as is required for a
10982 function definition. */
10984 static void
10985 require_complete_types_for_parms (tree parms)
10987 for (; parms; parms = DECL_CHAIN (parms))
10989 if (dependent_type_p (TREE_TYPE (parms)))
10990 continue;
10991 if (!VOID_TYPE_P (TREE_TYPE (parms))
10992 && complete_type_or_else (TREE_TYPE (parms), parms))
10994 relayout_decl (parms);
10995 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10997 else
10998 /* grokparms or complete_type_or_else will have already issued
10999 an error. */
11000 TREE_TYPE (parms) = error_mark_node;
11004 /* Returns nonzero if T is a local variable. */
11007 local_variable_p (const_tree t)
11009 if ((VAR_P (t)
11010 /* A VAR_DECL with a context that is a _TYPE is a static data
11011 member. */
11012 && !TYPE_P (CP_DECL_CONTEXT (t))
11013 /* Any other non-local variable must be at namespace scope. */
11014 && !DECL_NAMESPACE_SCOPE_P (t))
11015 || (TREE_CODE (t) == PARM_DECL))
11016 return 1;
11018 return 0;
11021 /* Like local_variable_p, but suitable for use as a tree-walking
11022 function. */
11024 static tree
11025 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
11026 void * /*data*/)
11028 if (local_variable_p (*tp)
11029 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
11030 return *tp;
11031 else if (TYPE_P (*tp))
11032 *walk_subtrees = 0;
11034 return NULL_TREE;
11037 /* Check that ARG, which is a default-argument expression for a
11038 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
11039 something goes wrong. DECL may also be a _TYPE node, rather than a
11040 DECL, if there is no DECL available. */
11042 tree
11043 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
11045 tree var;
11046 tree decl_type;
11048 if (TREE_CODE (arg) == DEFAULT_ARG)
11049 /* We get a DEFAULT_ARG when looking at an in-class declaration
11050 with a default argument. Ignore the argument for now; we'll
11051 deal with it after the class is complete. */
11052 return arg;
11054 if (TYPE_P (decl))
11056 decl_type = decl;
11057 decl = NULL_TREE;
11059 else
11060 decl_type = TREE_TYPE (decl);
11062 if (arg == error_mark_node
11063 || decl == error_mark_node
11064 || TREE_TYPE (arg) == error_mark_node
11065 || decl_type == error_mark_node)
11066 /* Something already went wrong. There's no need to check
11067 further. */
11068 return error_mark_node;
11070 /* [dcl.fct.default]
11072 A default argument expression is implicitly converted to the
11073 parameter type. */
11074 ++cp_unevaluated_operand;
11075 perform_implicit_conversion_flags (decl_type, arg, complain,
11076 LOOKUP_IMPLICIT);
11077 --cp_unevaluated_operand;
11079 if (warn_zero_as_null_pointer_constant
11080 && TYPE_PTR_OR_PTRMEM_P (decl_type)
11081 && null_ptr_cst_p (arg)
11082 && (complain & tf_warning)
11083 && maybe_warn_zero_as_null_pointer_constant (arg, input_location))
11084 return nullptr_node;
11086 /* [dcl.fct.default]
11088 Local variables shall not be used in default argument
11089 expressions.
11091 The keyword `this' shall not be used in a default argument of a
11092 member function. */
11093 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
11094 if (var)
11096 if (complain & tf_warning_or_error)
11098 if (DECL_NAME (var) == this_identifier)
11099 permerror (input_location, "default argument %qE uses %qD",
11100 arg, var);
11101 else
11102 error ("default argument %qE uses local variable %qD", arg, var);
11104 return error_mark_node;
11107 /* All is well. */
11108 return arg;
11111 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
11113 static tree
11114 type_is_deprecated (tree type)
11116 enum tree_code code;
11117 if (TREE_DEPRECATED (type))
11118 return type;
11119 if (TYPE_NAME (type)
11120 && TREE_DEPRECATED (TYPE_NAME (type)))
11121 return type;
11123 /* Do warn about using typedefs to a deprecated class. */
11124 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
11125 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
11127 code = TREE_CODE (type);
11129 if (code == POINTER_TYPE || code == REFERENCE_TYPE
11130 || code == OFFSET_TYPE || code == FUNCTION_TYPE
11131 || code == METHOD_TYPE || code == ARRAY_TYPE)
11132 return type_is_deprecated (TREE_TYPE (type));
11134 if (TYPE_PTRMEMFUNC_P (type))
11135 return type_is_deprecated
11136 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
11138 return NULL_TREE;
11141 /* Decode the list of parameter types for a function type.
11142 Given the list of things declared inside the parens,
11143 return a list of types.
11145 If this parameter does not end with an ellipsis, we append
11146 void_list_node.
11148 *PARMS is set to the chain of PARM_DECLs created. */
11150 static tree
11151 grokparms (tree parmlist, tree *parms)
11153 tree result = NULL_TREE;
11154 tree decls = NULL_TREE;
11155 tree parm;
11156 int any_error = 0;
11158 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
11160 tree type = NULL_TREE;
11161 tree init = TREE_PURPOSE (parm);
11162 tree decl = TREE_VALUE (parm);
11163 const char *errmsg;
11165 if (parm == void_list_node)
11166 break;
11168 if (! decl || TREE_TYPE (decl) == error_mark_node)
11169 continue;
11171 type = TREE_TYPE (decl);
11172 if (VOID_TYPE_P (type))
11174 if (same_type_p (type, void_type_node)
11175 && DECL_SELF_REFERENCE_P (type)
11176 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
11177 /* this is a parmlist of `(void)', which is ok. */
11178 break;
11179 cxx_incomplete_type_error (decl, type);
11180 /* It's not a good idea to actually create parameters of
11181 type `void'; other parts of the compiler assume that a
11182 void type terminates the parameter list. */
11183 type = error_mark_node;
11184 TREE_TYPE (decl) = error_mark_node;
11187 if (type != error_mark_node
11188 && TYPE_FOR_JAVA (type)
11189 && MAYBE_CLASS_TYPE_P (type))
11191 error ("parameter %qD has Java class type", decl);
11192 type = error_mark_node;
11193 TREE_TYPE (decl) = error_mark_node;
11194 init = NULL_TREE;
11197 if (type != error_mark_node
11198 && (errmsg = targetm.invalid_parameter_type (type)))
11200 error (errmsg);
11201 type = error_mark_node;
11202 TREE_TYPE (decl) = error_mark_node;
11205 if (type != error_mark_node)
11207 if (deprecated_state != DEPRECATED_SUPPRESS)
11209 tree deptype = type_is_deprecated (type);
11210 if (deptype)
11211 warn_deprecated_use (deptype, NULL_TREE);
11214 /* Top-level qualifiers on the parameters are
11215 ignored for function types. */
11216 type = cp_build_qualified_type (type, 0);
11217 if (TREE_CODE (type) == METHOD_TYPE)
11219 error ("parameter %qD invalidly declared method type", decl);
11220 type = build_pointer_type (type);
11221 TREE_TYPE (decl) = type;
11223 else if (abstract_virtuals_error (decl, type))
11224 any_error = 1; /* Seems like a good idea. */
11225 else if (POINTER_TYPE_P (type))
11227 /* [dcl.fct]/6, parameter types cannot contain pointers
11228 (references) to arrays of unknown bound. */
11229 tree t = TREE_TYPE (type);
11230 int ptr = TYPE_PTR_P (type);
11232 while (1)
11234 if (TYPE_PTR_P (t))
11235 ptr = 1;
11236 else if (TREE_CODE (t) != ARRAY_TYPE)
11237 break;
11238 else if (!TYPE_DOMAIN (t))
11239 break;
11240 t = TREE_TYPE (t);
11242 if (TREE_CODE (t) == ARRAY_TYPE)
11243 error (ptr
11244 ? G_("parameter %qD includes pointer to array of "
11245 "unknown bound %qT")
11246 : G_("parameter %qD includes reference to array of "
11247 "unknown bound %qT"),
11248 decl, t);
11251 if (any_error)
11252 init = NULL_TREE;
11253 else if (init && !processing_template_decl)
11254 init = check_default_argument (decl, init, tf_warning_or_error);
11257 DECL_CHAIN (decl) = decls;
11258 decls = decl;
11259 result = tree_cons (init, type, result);
11261 decls = nreverse (decls);
11262 result = nreverse (result);
11263 if (parm)
11264 result = chainon (result, void_list_node);
11265 *parms = decls;
11267 return result;
11271 /* D is a constructor or overloaded `operator='.
11273 Let T be the class in which D is declared. Then, this function
11274 returns:
11276 -1 if D's is an ill-formed constructor or copy assignment operator
11277 whose first parameter is of type `T'.
11278 0 if D is not a copy constructor or copy assignment
11279 operator.
11280 1 if D is a copy constructor or copy assignment operator whose
11281 first parameter is a reference to non-const qualified T.
11282 2 if D is a copy constructor or copy assignment operator whose
11283 first parameter is a reference to const qualified T.
11285 This function can be used as a predicate. Positive values indicate
11286 a copy constructor and nonzero values indicate a copy assignment
11287 operator. */
11290 copy_fn_p (const_tree d)
11292 tree args;
11293 tree arg_type;
11294 int result = 1;
11296 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11298 if (TREE_CODE (d) == TEMPLATE_DECL
11299 || (DECL_TEMPLATE_INFO (d)
11300 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11301 /* Instantiations of template member functions are never copy
11302 functions. Note that member functions of templated classes are
11303 represented as template functions internally, and we must
11304 accept those as copy functions. */
11305 return 0;
11307 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11308 if (!args)
11309 return 0;
11311 arg_type = TREE_VALUE (args);
11312 if (arg_type == error_mark_node)
11313 return 0;
11315 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11317 /* Pass by value copy assignment operator. */
11318 result = -1;
11320 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11321 && !TYPE_REF_IS_RVALUE (arg_type)
11322 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11324 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11325 result = 2;
11327 else
11328 return 0;
11330 args = TREE_CHAIN (args);
11332 if (args && args != void_list_node && !TREE_PURPOSE (args))
11333 /* There are more non-optional args. */
11334 return 0;
11336 return result;
11339 /* D is a constructor or overloaded `operator='.
11341 Let T be the class in which D is declared. Then, this function
11342 returns true when D is a move constructor or move assignment
11343 operator, false otherwise. */
11345 bool
11346 move_fn_p (const_tree d)
11348 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11350 if (cxx_dialect == cxx98)
11351 /* There are no move constructors if we are in C++98 mode. */
11352 return false;
11354 if (TREE_CODE (d) == TEMPLATE_DECL
11355 || (DECL_TEMPLATE_INFO (d)
11356 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11357 /* Instantiations of template member functions are never move
11358 functions. Note that member functions of templated classes are
11359 represented as template functions internally, and we must
11360 accept those as move functions. */
11361 return 0;
11363 return move_signature_fn_p (d);
11366 /* D is a constructor or overloaded `operator='.
11368 Then, this function returns true when D has the same signature as a move
11369 constructor or move assignment operator (because either it is such a
11370 ctor/op= or it is a template specialization with the same signature),
11371 false otherwise. */
11373 bool
11374 move_signature_fn_p (const_tree d)
11376 tree args;
11377 tree arg_type;
11378 bool result = false;
11380 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11381 if (!args)
11382 return 0;
11384 arg_type = TREE_VALUE (args);
11385 if (arg_type == error_mark_node)
11386 return 0;
11388 if (TREE_CODE (arg_type) == REFERENCE_TYPE
11389 && TYPE_REF_IS_RVALUE (arg_type)
11390 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11391 DECL_CONTEXT (d)))
11392 result = true;
11394 args = TREE_CHAIN (args);
11396 if (args && args != void_list_node && !TREE_PURPOSE (args))
11397 /* There are more non-optional args. */
11398 return false;
11400 return result;
11403 /* Remember any special properties of member function DECL. */
11405 void
11406 grok_special_member_properties (tree decl)
11408 tree class_type;
11410 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11411 return;
11413 class_type = DECL_CONTEXT (decl);
11414 if (DECL_CONSTRUCTOR_P (decl))
11416 int ctor = copy_fn_p (decl);
11418 if (!DECL_ARTIFICIAL (decl))
11419 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11421 if (ctor > 0)
11423 /* [class.copy]
11425 A non-template constructor for class X is a copy
11426 constructor if its first parameter is of type X&, const
11427 X&, volatile X& or const volatile X&, and either there
11428 are no other parameters or else all other parameters have
11429 default arguments. */
11430 TYPE_HAS_COPY_CTOR (class_type) = 1;
11431 if (user_provided_p (decl))
11432 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
11433 if (ctor > 1)
11434 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
11436 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
11438 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
11439 if (user_provided_p (decl))
11440 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
11442 else if (move_fn_p (decl) && user_provided_p (decl))
11443 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
11444 else if (is_list_ctor (decl))
11445 TYPE_HAS_LIST_CTOR (class_type) = 1;
11447 if (DECL_DECLARED_CONSTEXPR_P (decl)
11448 && !copy_fn_p (decl) && !move_fn_p (decl))
11449 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
11451 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
11453 /* [class.copy]
11455 A non-template assignment operator for class X is a copy
11456 assignment operator if its parameter is of type X, X&, const
11457 X&, volatile X& or const volatile X&. */
11459 int assop = copy_fn_p (decl);
11461 if (assop)
11463 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
11464 if (user_provided_p (decl))
11465 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
11466 if (assop != 1)
11467 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
11469 else if (move_fn_p (decl) && user_provided_p (decl))
11470 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
11472 /* Destructors are handled in check_methods. */
11475 /* Check a constructor DECL has the correct form. Complains
11476 if the class has a constructor of the form X(X). */
11479 grok_ctor_properties (const_tree ctype, const_tree decl)
11481 int ctor_parm = copy_fn_p (decl);
11483 if (ctor_parm < 0)
11485 /* [class.copy]
11487 A declaration of a constructor for a class X is ill-formed if
11488 its first parameter is of type (optionally cv-qualified) X
11489 and either there are no other parameters or else all other
11490 parameters have default arguments.
11492 We *don't* complain about member template instantiations that
11493 have this form, though; they can occur as we try to decide
11494 what constructor to use during overload resolution. Since
11495 overload resolution will never prefer such a constructor to
11496 the non-template copy constructor (which is either explicitly
11497 or implicitly defined), there's no need to worry about their
11498 existence. Theoretically, they should never even be
11499 instantiated, but that's hard to forestall. */
11500 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11501 ctype, ctype);
11502 return 0;
11505 return 1;
11508 /* An operator with this code is unary, but can also be binary. */
11510 static int
11511 ambi_op_p (enum tree_code code)
11513 return (code == INDIRECT_REF
11514 || code == ADDR_EXPR
11515 || code == UNARY_PLUS_EXPR
11516 || code == NEGATE_EXPR
11517 || code == PREINCREMENT_EXPR
11518 || code == PREDECREMENT_EXPR);
11521 /* An operator with this name can only be unary. */
11523 static int
11524 unary_op_p (enum tree_code code)
11526 return (code == TRUTH_NOT_EXPR
11527 || code == BIT_NOT_EXPR
11528 || code == COMPONENT_REF
11529 || code == TYPE_EXPR);
11532 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
11533 errors are issued for invalid declarations. */
11535 bool
11536 grok_op_properties (tree decl, bool complain)
11538 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11539 tree argtype;
11540 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11541 tree name = DECL_NAME (decl);
11542 enum tree_code operator_code;
11543 int arity;
11544 bool ellipsis_p;
11545 tree class_type;
11547 /* Count the number of arguments and check for ellipsis. */
11548 for (argtype = argtypes, arity = 0;
11549 argtype && argtype != void_list_node;
11550 argtype = TREE_CHAIN (argtype))
11551 ++arity;
11552 ellipsis_p = !argtype;
11554 class_type = DECL_CONTEXT (decl);
11555 if (class_type && !CLASS_TYPE_P (class_type))
11556 class_type = NULL_TREE;
11558 if (DECL_CONV_FN_P (decl))
11559 operator_code = TYPE_EXPR;
11560 else
11563 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
11564 if (ansi_opname (CODE) == name) \
11566 operator_code = (CODE); \
11567 break; \
11569 else if (ansi_assopname (CODE) == name) \
11571 operator_code = (CODE); \
11572 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
11573 break; \
11576 #include "operators.def"
11577 #undef DEF_OPERATOR
11579 gcc_unreachable ();
11581 while (0);
11582 gcc_assert (operator_code != MAX_TREE_CODES);
11583 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11585 if (class_type)
11586 switch (operator_code)
11588 case NEW_EXPR:
11589 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11590 break;
11592 case DELETE_EXPR:
11593 TYPE_GETS_DELETE (class_type) |= 1;
11594 break;
11596 case VEC_NEW_EXPR:
11597 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11598 break;
11600 case VEC_DELETE_EXPR:
11601 TYPE_GETS_DELETE (class_type) |= 2;
11602 break;
11604 default:
11605 break;
11608 /* [basic.std.dynamic.allocation]/1:
11610 A program is ill-formed if an allocation function is declared
11611 in a namespace scope other than global scope or declared static
11612 in global scope.
11614 The same also holds true for deallocation functions. */
11615 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11616 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11618 if (DECL_NAMESPACE_SCOPE_P (decl))
11620 if (CP_DECL_CONTEXT (decl) != global_namespace)
11622 error ("%qD may not be declared within a namespace", decl);
11623 return false;
11625 else if (!TREE_PUBLIC (decl))
11627 error ("%qD may not be declared as static", decl);
11628 return false;
11633 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11635 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11636 DECL_IS_OPERATOR_NEW (decl) = 1;
11638 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11639 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11640 else
11642 /* An operator function must either be a non-static member function
11643 or have at least one parameter of a class, a reference to a class,
11644 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11645 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11647 if (operator_code == TYPE_EXPR
11648 || operator_code == CALL_EXPR
11649 || operator_code == COMPONENT_REF
11650 || operator_code == ARRAY_REF
11651 || operator_code == NOP_EXPR)
11653 error ("%qD must be a nonstatic member function", decl);
11654 return false;
11656 else
11658 tree p;
11660 if (DECL_STATIC_FUNCTION_P (decl))
11662 error ("%qD must be either a non-static member "
11663 "function or a non-member function", decl);
11664 return false;
11667 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11669 tree arg = non_reference (TREE_VALUE (p));
11670 if (arg == error_mark_node)
11671 return false;
11673 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11674 because these checks are performed even on
11675 template functions. */
11676 if (MAYBE_CLASS_TYPE_P (arg)
11677 || TREE_CODE (arg) == ENUMERAL_TYPE)
11678 break;
11681 if (!p || p == void_list_node)
11683 if (complain)
11684 error ("%qD must have an argument of class or "
11685 "enumerated type", decl);
11686 return false;
11691 /* There are no restrictions on the arguments to an overloaded
11692 "operator ()". */
11693 if (operator_code == CALL_EXPR)
11694 return true;
11696 /* Warn about conversion operators that will never be used. */
11697 if (IDENTIFIER_TYPENAME_P (name)
11698 && ! DECL_TEMPLATE_INFO (decl)
11699 && warn_conversion
11700 /* Warn only declaring the function; there is no need to
11701 warn again about out-of-class definitions. */
11702 && class_type == current_class_type)
11704 tree t = TREE_TYPE (name);
11705 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11707 if (ref)
11708 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11710 if (VOID_TYPE_P (t))
11711 warning (OPT_Wconversion,
11713 ? G_("conversion to a reference to void "
11714 "will never use a type conversion operator")
11715 : G_("conversion to void "
11716 "will never use a type conversion operator"));
11717 else if (class_type)
11719 if (t == class_type)
11720 warning (OPT_Wconversion,
11722 ? G_("conversion to a reference to the same type "
11723 "will never use a type conversion operator")
11724 : G_("conversion to the same type "
11725 "will never use a type conversion operator"));
11726 /* Don't force t to be complete here. */
11727 else if (MAYBE_CLASS_TYPE_P (t)
11728 && COMPLETE_TYPE_P (t)
11729 && DERIVED_FROM_P (t, class_type))
11730 warning (OPT_Wconversion,
11732 ? G_("conversion to a reference to a base class "
11733 "will never use a type conversion operator")
11734 : G_("conversion to a base class "
11735 "will never use a type conversion operator"));
11740 if (operator_code == COND_EXPR)
11742 /* 13.4.0.3 */
11743 error ("ISO C++ prohibits overloading operator ?:");
11744 return false;
11746 else if (ellipsis_p)
11748 error ("%qD must not have variable number of arguments", decl);
11749 return false;
11751 else if (ambi_op_p (operator_code))
11753 if (arity == 1)
11754 /* We pick the one-argument operator codes by default, so
11755 we don't have to change anything. */
11757 else if (arity == 2)
11759 /* If we thought this was a unary operator, we now know
11760 it to be a binary operator. */
11761 switch (operator_code)
11763 case INDIRECT_REF:
11764 operator_code = MULT_EXPR;
11765 break;
11767 case ADDR_EXPR:
11768 operator_code = BIT_AND_EXPR;
11769 break;
11771 case UNARY_PLUS_EXPR:
11772 operator_code = PLUS_EXPR;
11773 break;
11775 case NEGATE_EXPR:
11776 operator_code = MINUS_EXPR;
11777 break;
11779 case PREINCREMENT_EXPR:
11780 operator_code = POSTINCREMENT_EXPR;
11781 break;
11783 case PREDECREMENT_EXPR:
11784 operator_code = POSTDECREMENT_EXPR;
11785 break;
11787 default:
11788 gcc_unreachable ();
11791 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11793 if ((operator_code == POSTINCREMENT_EXPR
11794 || operator_code == POSTDECREMENT_EXPR)
11795 && ! processing_template_decl
11796 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11798 if (methodp)
11799 error ("postfix %qD must take %<int%> as its argument",
11800 decl);
11801 else
11802 error ("postfix %qD must take %<int%> as its second "
11803 "argument", decl);
11804 return false;
11807 else
11809 if (methodp)
11810 error ("%qD must take either zero or one argument", decl);
11811 else
11812 error ("%qD must take either one or two arguments", decl);
11813 return false;
11816 /* More Effective C++ rule 6. */
11817 if (warn_ecpp
11818 && (operator_code == POSTINCREMENT_EXPR
11819 || operator_code == POSTDECREMENT_EXPR
11820 || operator_code == PREINCREMENT_EXPR
11821 || operator_code == PREDECREMENT_EXPR))
11823 tree arg = TREE_VALUE (argtypes);
11824 tree ret = TREE_TYPE (TREE_TYPE (decl));
11825 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11826 arg = TREE_TYPE (arg);
11827 arg = TYPE_MAIN_VARIANT (arg);
11828 if (operator_code == PREINCREMENT_EXPR
11829 || operator_code == PREDECREMENT_EXPR)
11831 if (TREE_CODE (ret) != REFERENCE_TYPE
11832 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11833 arg))
11834 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11835 build_reference_type (arg));
11837 else
11839 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11840 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11844 else if (unary_op_p (operator_code))
11846 if (arity != 1)
11848 if (methodp)
11849 error ("%qD must take %<void%>", decl);
11850 else
11851 error ("%qD must take exactly one argument", decl);
11852 return false;
11855 else /* if (binary_op_p (operator_code)) */
11857 if (arity != 2)
11859 if (methodp)
11860 error ("%qD must take exactly one argument", decl);
11861 else
11862 error ("%qD must take exactly two arguments", decl);
11863 return false;
11866 /* More Effective C++ rule 7. */
11867 if (warn_ecpp
11868 && (operator_code == TRUTH_ANDIF_EXPR
11869 || operator_code == TRUTH_ORIF_EXPR
11870 || operator_code == COMPOUND_EXPR))
11871 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11872 decl);
11875 /* Effective C++ rule 23. */
11876 if (warn_ecpp
11877 && arity == 2
11878 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11879 && (operator_code == PLUS_EXPR
11880 || operator_code == MINUS_EXPR
11881 || operator_code == TRUNC_DIV_EXPR
11882 || operator_code == MULT_EXPR
11883 || operator_code == TRUNC_MOD_EXPR)
11884 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11885 warning (OPT_Weffc__, "%qD should return by value", decl);
11887 /* [over.oper]/8 */
11888 for (; argtypes && argtypes != void_list_node;
11889 argtypes = TREE_CHAIN (argtypes))
11890 if (TREE_PURPOSE (argtypes))
11892 TREE_PURPOSE (argtypes) = NULL_TREE;
11893 if (operator_code == POSTINCREMENT_EXPR
11894 || operator_code == POSTDECREMENT_EXPR)
11896 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments",
11897 decl);
11899 else
11901 error ("%qD cannot have default arguments", decl);
11902 return false;
11906 return true;
11909 /* Return a string giving the keyword associate with CODE. */
11911 static const char *
11912 tag_name (enum tag_types code)
11914 switch (code)
11916 case record_type:
11917 return "struct";
11918 case class_type:
11919 return "class";
11920 case union_type:
11921 return "union";
11922 case enum_type:
11923 return "enum";
11924 case typename_type:
11925 return "typename";
11926 default:
11927 gcc_unreachable ();
11931 /* Name lookup in an elaborated-type-specifier (after the keyword
11932 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
11933 elaborated-type-specifier is invalid, issue a diagnostic and return
11934 error_mark_node; otherwise, return the *_TYPE to which it referred.
11935 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
11937 tree
11938 check_elaborated_type_specifier (enum tag_types tag_code,
11939 tree decl,
11940 bool allow_template_p)
11942 tree type;
11944 /* In the case of:
11946 struct S { struct S *p; };
11948 name lookup will find the TYPE_DECL for the implicit "S::S"
11949 typedef. Adjust for that here. */
11950 if (DECL_SELF_REFERENCE_P (decl))
11951 decl = TYPE_NAME (TREE_TYPE (decl));
11953 type = TREE_TYPE (decl);
11955 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11956 is false for this case as well. */
11957 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11959 error ("using template type parameter %qT after %qs",
11960 type, tag_name (tag_code));
11961 return error_mark_node;
11963 /* Accept template template parameters. */
11964 else if (allow_template_p
11965 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
11966 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
11968 /* [dcl.type.elab]
11970 If the identifier resolves to a typedef-name or the
11971 simple-template-id resolves to an alias template
11972 specialization, the elaborated-type-specifier is ill-formed.
11974 In other words, the only legitimate declaration to use in the
11975 elaborated type specifier is the implicit typedef created when
11976 the type is declared. */
11977 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11978 && !DECL_SELF_REFERENCE_P (decl)
11979 && tag_code != typename_type)
11981 if (alias_template_specialization_p (type))
11982 error ("using alias template specialization %qT after %qs",
11983 type, tag_name (tag_code));
11984 else
11985 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11986 inform (DECL_SOURCE_LOCATION (decl),
11987 "%qD has a previous declaration here", decl);
11988 return error_mark_node;
11990 else if (TREE_CODE (type) != RECORD_TYPE
11991 && TREE_CODE (type) != UNION_TYPE
11992 && tag_code != enum_type
11993 && tag_code != typename_type)
11995 error ("%qT referred to as %qs", type, tag_name (tag_code));
11996 inform (input_location, "%q+T has a previous declaration here", type);
11997 return error_mark_node;
11999 else if (TREE_CODE (type) != ENUMERAL_TYPE
12000 && tag_code == enum_type)
12002 error ("%qT referred to as enum", type);
12003 inform (input_location, "%q+T has a previous declaration here", type);
12004 return error_mark_node;
12006 else if (!allow_template_p
12007 && TREE_CODE (type) == RECORD_TYPE
12008 && CLASSTYPE_IS_TEMPLATE (type))
12010 /* If a class template appears as elaborated type specifier
12011 without a template header such as:
12013 template <class T> class C {};
12014 void f(class C); // No template header here
12016 then the required template argument is missing. */
12017 error ("template argument required for %<%s %T%>",
12018 tag_name (tag_code),
12019 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
12020 return error_mark_node;
12023 return type;
12026 /* Lookup NAME in elaborate type specifier in scope according to
12027 SCOPE and issue diagnostics if necessary.
12028 Return *_TYPE node upon success, NULL_TREE when the NAME is not
12029 found, and ERROR_MARK_NODE for type error. */
12031 static tree
12032 lookup_and_check_tag (enum tag_types tag_code, tree name,
12033 tag_scope scope, bool template_header_p)
12035 tree t;
12036 tree decl;
12037 if (scope == ts_global)
12039 /* First try ordinary name lookup, ignoring hidden class name
12040 injected via friend declaration. */
12041 decl = lookup_name_prefer_type (name, 2);
12042 /* If that fails, the name will be placed in the smallest
12043 non-class, non-function-prototype scope according to 3.3.1/5.
12044 We may already have a hidden name declared as friend in this
12045 scope. So lookup again but not ignoring hidden names.
12046 If we find one, that name will be made visible rather than
12047 creating a new tag. */
12048 if (!decl)
12049 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
12051 else
12052 decl = lookup_type_scope (name, scope);
12054 if (decl
12055 && (DECL_CLASS_TEMPLATE_P (decl)
12056 /* If scope is ts_current we're defining a class, so ignore a
12057 template template parameter. */
12058 || (scope != ts_current
12059 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
12060 decl = DECL_TEMPLATE_RESULT (decl);
12062 if (decl && TREE_CODE (decl) == TYPE_DECL)
12064 /* Look for invalid nested type:
12065 class C {
12066 class C {};
12067 }; */
12068 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
12070 error ("%qD has the same name as the class in which it is "
12071 "declared",
12072 decl);
12073 return error_mark_node;
12076 /* Two cases we need to consider when deciding if a class
12077 template is allowed as an elaborated type specifier:
12078 1. It is a self reference to its own class.
12079 2. It comes with a template header.
12081 For example:
12083 template <class T> class C {
12084 class C *c1; // DECL_SELF_REFERENCE_P is true
12085 class D;
12087 template <class U> class C; // template_header_p is true
12088 template <class T> class C<T>::D {
12089 class C *c2; // DECL_SELF_REFERENCE_P is true
12090 }; */
12092 t = check_elaborated_type_specifier (tag_code,
12093 decl,
12094 template_header_p
12095 | DECL_SELF_REFERENCE_P (decl));
12096 return t;
12098 else if (decl && TREE_CODE (decl) == TREE_LIST)
12100 error ("reference to %qD is ambiguous", name);
12101 print_candidates (decl);
12102 return error_mark_node;
12104 else
12105 return NULL_TREE;
12108 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
12109 Define the tag as a forward-reference if it is not defined.
12111 If a declaration is given, process it here, and report an error if
12112 multiple declarations are not identical.
12114 SCOPE is TS_CURRENT when this is also a definition. Only look in
12115 the current frame for the name (since C++ allows new names in any
12116 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
12117 declaration. Only look beginning from the current scope outward up
12118 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
12120 TEMPLATE_HEADER_P is true when this declaration is preceded by
12121 a set of template parameters. */
12123 static tree
12124 xref_tag_1 (enum tag_types tag_code, tree name,
12125 tag_scope orig_scope, bool template_header_p)
12127 enum tree_code code;
12128 tree t;
12129 tree context = NULL_TREE;
12130 tag_scope scope;
12132 gcc_assert (identifier_p (name));
12134 switch (tag_code)
12136 case record_type:
12137 case class_type:
12138 code = RECORD_TYPE;
12139 break;
12140 case union_type:
12141 code = UNION_TYPE;
12142 break;
12143 case enum_type:
12144 code = ENUMERAL_TYPE;
12145 break;
12146 default:
12147 gcc_unreachable ();
12150 if (orig_scope == ts_lambda)
12151 scope = ts_current;
12152 else
12153 scope = orig_scope;
12155 /* In case of anonymous name, xref_tag is only called to
12156 make type node and push name. Name lookup is not required. */
12157 if (ANON_AGGRNAME_P (name))
12158 t = NULL_TREE;
12159 else
12160 t = lookup_and_check_tag (tag_code, name,
12161 scope, template_header_p);
12163 if (t == error_mark_node)
12164 return error_mark_node;
12166 if (scope != ts_current && t && current_class_type
12167 && template_class_depth (current_class_type)
12168 && template_header_p)
12170 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
12171 return t;
12173 /* Since SCOPE is not TS_CURRENT, we are not looking at a
12174 definition of this tag. Since, in addition, we are currently
12175 processing a (member) template declaration of a template
12176 class, we must be very careful; consider:
12178 template <class X>
12179 struct S1
12181 template <class U>
12182 struct S2
12183 { template <class V>
12184 friend struct S1; };
12186 Here, the S2::S1 declaration should not be confused with the
12187 outer declaration. In particular, the inner version should
12188 have a template parameter of level 2, not level 1. This
12189 would be particularly important if the member declaration
12190 were instead:
12192 template <class V = U> friend struct S1;
12194 say, when we should tsubst into `U' when instantiating
12195 S2. On the other hand, when presented with:
12197 template <class T>
12198 struct S1 {
12199 template <class U>
12200 struct S2 {};
12201 template <class U>
12202 friend struct S2;
12205 we must find the inner binding eventually. We
12206 accomplish this by making sure that the new type we
12207 create to represent this declaration has the right
12208 TYPE_CONTEXT. */
12209 context = TYPE_CONTEXT (t);
12210 t = NULL_TREE;
12213 if (! t)
12215 /* If no such tag is yet defined, create a forward-reference node
12216 and record it as the "definition".
12217 When a real declaration of this type is found,
12218 the forward-reference will be altered into a real type. */
12219 if (code == ENUMERAL_TYPE)
12221 error ("use of enum %q#D without previous declaration", name);
12222 return error_mark_node;
12224 else
12226 t = make_class_type (code);
12227 TYPE_CONTEXT (t) = context;
12228 if (orig_scope == ts_lambda)
12229 /* Remember that we're declaring a lambda to avoid bogus errors
12230 in push_template_decl. */
12231 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
12232 t = pushtag (name, t, scope);
12235 else
12237 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
12239 if (!redeclare_class_template (t,
12240 current_template_parms,
12241 current_template_reqs))
12242 return error_mark_node;
12244 else if (!processing_template_decl
12245 && CLASS_TYPE_P (t)
12246 && CLASSTYPE_IS_TEMPLATE (t))
12248 error ("redeclaration of %qT as a non-template", t);
12249 error ("previous declaration %q+D", t);
12250 return error_mark_node;
12253 /* Make injected friend class visible. */
12254 if (scope != ts_within_enclosing_non_class
12255 && hidden_name_p (TYPE_NAME (t)))
12257 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12258 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12260 if (TYPE_TEMPLATE_INFO (t))
12262 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12263 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12268 return t;
12271 /* Wrapper for xref_tag_1. */
12273 tree
12274 xref_tag (enum tag_types tag_code, tree name,
12275 tag_scope scope, bool template_header_p)
12277 tree ret;
12278 bool subtime;
12279 subtime = timevar_cond_start (TV_NAME_LOOKUP);
12280 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12281 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12282 return ret;
12286 tree
12287 xref_tag_from_type (tree old, tree id, tag_scope scope)
12289 enum tag_types tag_kind;
12291 if (TREE_CODE (old) == RECORD_TYPE)
12292 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12293 else
12294 tag_kind = union_type;
12296 if (id == NULL_TREE)
12297 id = TYPE_IDENTIFIER (old);
12299 return xref_tag (tag_kind, id, scope, false);
12302 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12303 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
12304 access_* node, and the TREE_VALUE is the type of the base-class.
12305 Non-NULL TREE_TYPE indicates virtual inheritance.
12307 Returns true if the binfo hierarchy was successfully created,
12308 false if an error was detected. */
12310 bool
12311 xref_basetypes (tree ref, tree base_list)
12313 tree *basep;
12314 tree binfo, base_binfo;
12315 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
12316 unsigned max_bases = 0; /* Maximum direct bases. */
12317 int i;
12318 tree default_access;
12319 tree igo_prev; /* Track Inheritance Graph Order. */
12321 if (ref == error_mark_node)
12322 return false;
12324 /* The base of a derived class is private by default, all others are
12325 public. */
12326 default_access = (TREE_CODE (ref) == RECORD_TYPE
12327 && CLASSTYPE_DECLARED_CLASS (ref)
12328 ? access_private_node : access_public_node);
12330 /* First, make sure that any templates in base-classes are
12331 instantiated. This ensures that if we call ourselves recursively
12332 we do not get confused about which classes are marked and which
12333 are not. */
12334 basep = &base_list;
12335 while (*basep)
12337 tree basetype = TREE_VALUE (*basep);
12339 /* The dependent_type_p call below should really be dependent_scope_p
12340 so that we give a hard error about using an incomplete type as a
12341 base, but we allow it with a pedwarn for backward
12342 compatibility. */
12343 if (processing_template_decl
12344 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12345 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12346 if (!dependent_type_p (basetype)
12347 && !complete_type_or_else (basetype, NULL))
12348 /* An incomplete type. Remove it from the list. */
12349 *basep = TREE_CHAIN (*basep);
12350 else
12352 max_bases++;
12353 if (TREE_TYPE (*basep))
12354 max_vbases++;
12355 if (CLASS_TYPE_P (basetype))
12356 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
12357 basep = &TREE_CHAIN (*basep);
12361 TYPE_MARKED_P (ref) = 1;
12363 /* The binfo slot should be empty, unless this is an (ill-formed)
12364 redefinition. */
12365 if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12367 error ("redefinition of %q#T", ref);
12368 return false;
12371 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12373 binfo = make_tree_binfo (max_bases);
12375 TYPE_BINFO (ref) = binfo;
12376 BINFO_OFFSET (binfo) = size_zero_node;
12377 BINFO_TYPE (binfo) = ref;
12379 /* Apply base-class info set up to the variants of this type. */
12380 fixup_type_variants (ref);
12382 if (max_bases)
12384 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
12385 /* An aggregate cannot have baseclasses. */
12386 CLASSTYPE_NON_AGGREGATE (ref) = 1;
12388 if (TREE_CODE (ref) == UNION_TYPE)
12390 error ("derived union %qT invalid", ref);
12391 return false;
12395 if (max_bases > 1)
12397 if (TYPE_FOR_JAVA (ref))
12399 error ("Java class %qT cannot have multiple bases", ref);
12400 return false;
12404 if (max_vbases)
12406 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
12408 if (TYPE_FOR_JAVA (ref))
12410 error ("Java class %qT cannot have virtual bases", ref);
12411 return false;
12415 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
12417 tree access = TREE_PURPOSE (base_list);
12418 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
12419 tree basetype = TREE_VALUE (base_list);
12421 if (access == access_default_node)
12422 access = default_access;
12424 if (PACK_EXPANSION_P (basetype))
12425 basetype = PACK_EXPANSION_PATTERN (basetype);
12426 if (TREE_CODE (basetype) == TYPE_DECL)
12427 basetype = TREE_TYPE (basetype);
12428 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
12430 error ("base type %qT fails to be a struct or class type",
12431 basetype);
12432 return false;
12435 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
12436 TYPE_FOR_JAVA (ref) = 1;
12438 base_binfo = NULL_TREE;
12439 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
12441 base_binfo = TYPE_BINFO (basetype);
12442 /* The original basetype could have been a typedef'd type. */
12443 basetype = BINFO_TYPE (base_binfo);
12445 /* Inherit flags from the base. */
12446 TYPE_HAS_NEW_OPERATOR (ref)
12447 |= TYPE_HAS_NEW_OPERATOR (basetype);
12448 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12449 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12450 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12451 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
12452 CLASSTYPE_DIAMOND_SHAPED_P (ref)
12453 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
12454 CLASSTYPE_REPEATED_BASE_P (ref)
12455 |= CLASSTYPE_REPEATED_BASE_P (basetype);
12458 /* We must do this test after we've seen through a typedef
12459 type. */
12460 if (TYPE_MARKED_P (basetype))
12462 if (basetype == ref)
12463 error ("recursive type %qT undefined", basetype);
12464 else
12465 error ("duplicate base type %qT invalid", basetype);
12466 return false;
12469 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
12470 /* Regenerate the pack expansion for the bases. */
12471 basetype = make_pack_expansion (basetype);
12473 TYPE_MARKED_P (basetype) = 1;
12475 base_binfo = copy_binfo (base_binfo, basetype, ref,
12476 &igo_prev, via_virtual);
12477 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
12478 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
12480 BINFO_BASE_APPEND (binfo, base_binfo);
12481 BINFO_BASE_ACCESS_APPEND (binfo, access);
12484 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
12485 /* If we didn't get max_vbases vbases, we must have shared at
12486 least one of them, and are therefore diamond shaped. */
12487 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
12489 /* Unmark all the types. */
12490 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12491 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12492 TYPE_MARKED_P (ref) = 0;
12494 /* Now see if we have a repeated base type. */
12495 if (!CLASSTYPE_REPEATED_BASE_P (ref))
12497 for (base_binfo = binfo; base_binfo;
12498 base_binfo = TREE_CHAIN (base_binfo))
12500 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12502 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
12503 break;
12505 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
12507 for (base_binfo = binfo; base_binfo;
12508 base_binfo = TREE_CHAIN (base_binfo))
12509 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12510 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12511 else
12512 break;
12515 return true;
12519 /* Copies the enum-related properties from type SRC to type DST.
12520 Used with the underlying type of an enum and the enum itself. */
12521 static void
12522 copy_type_enum (tree dst, tree src)
12524 tree t;
12525 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12527 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12528 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12529 TYPE_SIZE (t) = TYPE_SIZE (src);
12530 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12531 SET_TYPE_MODE (dst, TYPE_MODE (src));
12532 TYPE_PRECISION (t) = TYPE_PRECISION (src);
12533 TYPE_ALIGN (t) = TYPE_ALIGN (src);
12534 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12535 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12539 /* Begin compiling the definition of an enumeration type.
12540 NAME is its name,
12542 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12544 UNDERLYING_TYPE is the type that will be used as the storage for
12545 the enumeration type. This should be NULL_TREE if no storage type
12546 was specified.
12548 SCOPED_ENUM_P is true if this is a scoped enumeration type.
12550 if IS_NEW is not NULL, gets TRUE iff a new type is created.
12552 Returns the type object, as yet incomplete.
12553 Also records info about it so that build_enumerator
12554 may be used to declare the individual values as they are read. */
12556 tree
12557 start_enum (tree name, tree enumtype, tree underlying_type,
12558 bool scoped_enum_p, bool *is_new)
12560 tree prevtype = NULL_TREE;
12561 gcc_assert (identifier_p (name));
12563 if (is_new)
12564 *is_new = false;
12565 /* [C++0x dcl.enum]p5:
12567 If not explicitly specified, the underlying type of a scoped
12568 enumeration type is int. */
12569 if (!underlying_type && scoped_enum_p)
12570 underlying_type = integer_type_node;
12572 if (underlying_type)
12573 underlying_type = cv_unqualified (underlying_type);
12575 /* If this is the real definition for a previous forward reference,
12576 fill in the contents in the same object that used to be the
12577 forward reference. */
12578 if (!enumtype)
12579 enumtype = lookup_and_check_tag (enum_type, name,
12580 /*tag_scope=*/ts_current,
12581 /*template_header_p=*/false);
12583 /* In case of a template_decl, the only check that should be deferred
12584 to instantiation time is the comparison of underlying types. */
12585 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12587 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12589 error_at (input_location, "scoped/unscoped mismatch "
12590 "in enum %q#T", enumtype);
12591 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12592 "previous definition here");
12593 enumtype = error_mark_node;
12595 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12597 error_at (input_location, "underlying type mismatch "
12598 "in enum %q#T", enumtype);
12599 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12600 "previous definition here");
12601 enumtype = error_mark_node;
12603 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12604 && !dependent_type_p (underlying_type)
12605 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12606 && !same_type_p (underlying_type,
12607 ENUM_UNDERLYING_TYPE (enumtype)))
12609 error_at (input_location, "different underlying type "
12610 "in enum %q#T", enumtype);
12611 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12612 "previous definition here");
12613 underlying_type = NULL_TREE;
12617 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12618 || processing_template_decl)
12620 /* In case of error, make a dummy enum to allow parsing to
12621 continue. */
12622 if (enumtype == error_mark_node)
12624 name = make_anon_name ();
12625 enumtype = NULL_TREE;
12628 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12629 of an opaque enum, or an opaque enum of an already defined
12630 enumeration (C++0x only).
12631 In any other case, it'll be NULL_TREE. */
12632 if (!enumtype)
12634 if (is_new)
12635 *is_new = true;
12637 prevtype = enumtype;
12639 /* Do not push the decl more than once, unless we need to
12640 compare underlying types at instantiation time */
12641 if (!enumtype
12642 || TREE_CODE (enumtype) != ENUMERAL_TYPE
12643 || (underlying_type
12644 && dependent_type_p (underlying_type))
12645 || (ENUM_UNDERLYING_TYPE (enumtype)
12646 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12648 enumtype = cxx_make_type (ENUMERAL_TYPE);
12649 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12651 else
12652 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12653 false);
12655 if (enumtype == error_mark_node)
12656 return error_mark_node;
12658 /* The enum is considered opaque until the opening '{' of the
12659 enumerator list. */
12660 SET_OPAQUE_ENUM_P (enumtype, true);
12661 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12664 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12666 if (underlying_type)
12668 if (CP_INTEGRAL_TYPE_P (underlying_type))
12670 copy_type_enum (enumtype, underlying_type);
12671 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12673 else if (dependent_type_p (underlying_type))
12674 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12675 else
12676 error ("underlying type %<%T%> of %<%T%> must be an integral type",
12677 underlying_type, enumtype);
12680 /* If into a template class, the returned enum is always the first
12681 declaration (opaque or not) seen. This way all the references to
12682 this type will be to the same declaration. The following ones are used
12683 only to check for definition errors. */
12684 if (prevtype && processing_template_decl)
12685 return prevtype;
12686 else
12687 return enumtype;
12690 /* After processing and defining all the values of an enumeration type,
12691 install their decls in the enumeration type.
12692 ENUMTYPE is the type object. */
12694 void
12695 finish_enum_value_list (tree enumtype)
12697 tree values;
12698 tree underlying_type;
12699 tree decl;
12700 tree value;
12701 tree minnode, maxnode;
12702 tree t;
12704 bool fixed_underlying_type_p
12705 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12707 /* We built up the VALUES in reverse order. */
12708 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12710 /* For an enum defined in a template, just set the type of the values;
12711 all further processing is postponed until the template is
12712 instantiated. We need to set the type so that tsubst of a CONST_DECL
12713 works. */
12714 if (processing_template_decl)
12716 for (values = TYPE_VALUES (enumtype);
12717 values;
12718 values = TREE_CHAIN (values))
12719 TREE_TYPE (TREE_VALUE (values)) = enumtype;
12720 return;
12723 /* Determine the minimum and maximum values of the enumerators. */
12724 if (TYPE_VALUES (enumtype))
12726 minnode = maxnode = NULL_TREE;
12728 for (values = TYPE_VALUES (enumtype);
12729 values;
12730 values = TREE_CHAIN (values))
12732 decl = TREE_VALUE (values);
12734 /* [dcl.enum]: Following the closing brace of an enum-specifier,
12735 each enumerator has the type of its enumeration. Prior to the
12736 closing brace, the type of each enumerator is the type of its
12737 initializing value. */
12738 TREE_TYPE (decl) = enumtype;
12740 /* Update the minimum and maximum values, if appropriate. */
12741 value = DECL_INITIAL (decl);
12742 if (value == error_mark_node)
12743 value = integer_zero_node;
12744 /* Figure out what the minimum and maximum values of the
12745 enumerators are. */
12746 if (!minnode)
12747 minnode = maxnode = value;
12748 else if (tree_int_cst_lt (maxnode, value))
12749 maxnode = value;
12750 else if (tree_int_cst_lt (value, minnode))
12751 minnode = value;
12754 else
12755 /* [dcl.enum]
12757 If the enumerator-list is empty, the underlying type is as if
12758 the enumeration had a single enumerator with value 0. */
12759 minnode = maxnode = integer_zero_node;
12761 if (!fixed_underlying_type_p)
12763 /* Compute the number of bits require to represent all values of the
12764 enumeration. We must do this before the type of MINNODE and
12765 MAXNODE are transformed, since tree_int_cst_min_precision relies
12766 on the TREE_TYPE of the value it is passed. */
12767 bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12768 int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12769 int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12770 int precision = MAX (lowprec, highprec);
12771 unsigned int itk;
12772 bool use_short_enum;
12774 /* Determine the underlying type of the enumeration.
12776 [dcl.enum]
12778 The underlying type of an enumeration is an integral type that
12779 can represent all the enumerator values defined in the
12780 enumeration. It is implementation-defined which integral type is
12781 used as the underlying type for an enumeration except that the
12782 underlying type shall not be larger than int unless the value of
12783 an enumerator cannot fit in an int or unsigned int.
12785 We use "int" or an "unsigned int" as the underlying type, even if
12786 a smaller integral type would work, unless the user has
12787 explicitly requested that we use the smallest possible type. The
12788 user can request that for all enumerations with a command line
12789 flag, or for just one enumeration with an attribute. */
12791 use_short_enum = flag_short_enums
12792 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12794 for (itk = (use_short_enum ? itk_char : itk_int);
12795 itk != itk_none;
12796 itk++)
12798 underlying_type = integer_types[itk];
12799 if (underlying_type != NULL_TREE
12800 && TYPE_PRECISION (underlying_type) >= precision
12801 && TYPE_UNSIGNED (underlying_type) == unsignedp)
12802 break;
12804 if (itk == itk_none)
12806 /* DR 377
12808 IF no integral type can represent all the enumerator values, the
12809 enumeration is ill-formed. */
12810 error ("no integral type can represent all of the enumerator values "
12811 "for %qT", enumtype);
12812 precision = TYPE_PRECISION (long_long_integer_type_node);
12813 underlying_type = integer_types[itk_unsigned_long_long];
12816 /* [dcl.enum]
12818 The value of sizeof() applied to an enumeration type, an object
12819 of an enumeration type, or an enumerator, is the value of sizeof()
12820 applied to the underlying type. */
12821 copy_type_enum (enumtype, underlying_type);
12823 /* Compute the minimum and maximum values for the type.
12825 [dcl.enum]
12827 For an enumeration where emin is the smallest enumerator and emax
12828 is the largest, the values of the enumeration are the values of the
12829 underlying type in the range bmin to bmax, where bmin and bmax are,
12830 respectively, the smallest and largest values of the smallest bit-
12831 field that can store emin and emax. */
12833 /* The middle-end currently assumes that types with TYPE_PRECISION
12834 narrower than their underlying type are suitably zero or sign
12835 extended to fill their mode. Similarly, it assumes that the front
12836 end assures that a value of a particular type must be within
12837 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12839 We used to set these fields based on bmin and bmax, but that led
12840 to invalid assumptions like optimizing away bounds checking. So
12841 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12842 TYPE_MAX_VALUE to the values for the mode above and only restrict
12843 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
12844 ENUM_UNDERLYING_TYPE (enumtype)
12845 = build_distinct_type_copy (underlying_type);
12846 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12847 set_min_and_max_values_for_integral_type
12848 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12850 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
12851 if (flag_strict_enums)
12852 set_min_and_max_values_for_integral_type (enumtype, precision,
12853 unsignedp);
12855 else
12856 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12858 /* Convert each of the enumerators to the type of the underlying
12859 type of the enumeration. */
12860 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12862 location_t saved_location;
12864 decl = TREE_VALUE (values);
12865 saved_location = input_location;
12866 input_location = DECL_SOURCE_LOCATION (decl);
12867 if (fixed_underlying_type_p)
12868 /* If the enumeration type has a fixed underlying type, we
12869 already checked all of the enumerator values. */
12870 value = DECL_INITIAL (decl);
12871 else
12872 value = perform_implicit_conversion (underlying_type,
12873 DECL_INITIAL (decl),
12874 tf_warning_or_error);
12875 input_location = saved_location;
12877 /* Do not clobber shared ints. */
12878 value = copy_node (value);
12880 TREE_TYPE (value) = enumtype;
12881 DECL_INITIAL (decl) = value;
12884 /* Fix up all variant types of this enum type. */
12885 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12886 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12888 if (at_class_scope_p ()
12889 && COMPLETE_TYPE_P (current_class_type)
12890 && UNSCOPED_ENUM_P (enumtype))
12891 insert_late_enum_def_into_classtype_sorted_fields (enumtype,
12892 current_class_type);
12894 /* Finish debugging output for this type. */
12895 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12898 /* Finishes the enum type. This is called only the first time an
12899 enumeration is seen, be it opaque or odinary.
12900 ENUMTYPE is the type object. */
12902 void
12903 finish_enum (tree enumtype)
12905 if (processing_template_decl)
12907 if (at_function_scope_p ())
12908 add_stmt (build_min (TAG_DEFN, enumtype));
12909 return;
12912 /* If this is a forward declaration, there should not be any variants,
12913 though we can get a variant in the middle of an enum-specifier with
12914 wacky code like 'enum E { e = sizeof(const E*) };' */
12915 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12916 && (TYPE_VALUES (enumtype)
12917 || !TYPE_NEXT_VARIANT (enumtype)));
12920 /* Build and install a CONST_DECL for an enumeration constant of the
12921 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12922 LOC is the location of NAME.
12923 Assignment of sequential values by default is handled here. */
12925 void
12926 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12928 tree decl;
12929 tree context;
12930 tree type;
12932 /* If the VALUE was erroneous, pretend it wasn't there; that will
12933 result in the enum being assigned the next value in sequence. */
12934 if (value == error_mark_node)
12935 value = NULL_TREE;
12937 /* Remove no-op casts from the value. */
12938 if (value)
12939 STRIP_TYPE_NOPS (value);
12941 if (! processing_template_decl)
12943 /* Validate and default VALUE. */
12944 if (value != NULL_TREE)
12946 value = cxx_constant_value (value);
12948 if (TREE_CODE (value) != INTEGER_CST
12949 || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12951 error ("enumerator value for %qD is not an integer constant",
12952 name);
12953 value = NULL_TREE;
12957 /* Default based on previous value. */
12958 if (value == NULL_TREE)
12960 if (TYPE_VALUES (enumtype))
12962 tree prev_value;
12963 bool overflowed;
12965 /* C++03 7.2/4: If no initializer is specified for the first
12966 enumerator, the type is an unspecified integral
12967 type. Otherwise the type is the same as the type of the
12968 initializing value of the preceding enumerator unless the
12969 incremented value is not representable in that type, in
12970 which case the type is an unspecified integral type
12971 sufficient to contain the incremented value. */
12972 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12973 if (error_operand_p (prev_value))
12974 value = error_mark_node;
12975 else
12977 double_int di = TREE_INT_CST (prev_value)
12978 .add_with_sign (double_int_one,
12979 false, &overflowed);
12980 if (!overflowed)
12982 tree type = TREE_TYPE (prev_value);
12983 bool pos = TYPE_UNSIGNED (type) || !di.is_negative ();
12984 if (!double_int_fits_to_tree_p (type, di))
12986 unsigned int itk;
12987 for (itk = itk_int; itk != itk_none; itk++)
12989 type = integer_types[itk];
12990 if (type != NULL_TREE
12991 && (pos || !TYPE_UNSIGNED (type))
12992 && double_int_fits_to_tree_p (type, di))
12993 break;
12995 if (type && cxx_dialect < cxx11
12996 && itk > itk_unsigned_long)
12997 pedwarn (input_location, OPT_Wlong_long, pos ? "\
12998 incremented enumerator value is too large for %<unsigned long%>" : "\
12999 incremented enumerator value is too large for %<long%>");
13001 if (type == NULL_TREE)
13002 overflowed = true;
13003 else
13004 value = double_int_to_tree (type, di);
13007 if (overflowed)
13009 error ("overflow in enumeration values at %qD", name);
13010 value = error_mark_node;
13014 else
13015 value = integer_zero_node;
13018 /* Remove no-op casts from the value. */
13019 STRIP_TYPE_NOPS (value);
13021 /* If the underlying type of the enum is fixed, check whether
13022 the enumerator values fits in the underlying type. If it
13023 does not fit, the program is ill-formed [C++0x dcl.enum]. */
13024 if (ENUM_UNDERLYING_TYPE (enumtype)
13025 && value
13026 && TREE_CODE (value) == INTEGER_CST)
13028 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
13029 error ("enumerator value %E is outside the range of underlying "
13030 "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
13032 /* Convert the value to the appropriate type. */
13033 value = convert (ENUM_UNDERLYING_TYPE (enumtype), value);
13037 /* C++ associates enums with global, function, or class declarations. */
13038 context = current_scope ();
13040 /* Build the actual enumeration constant. Note that the enumeration
13041 constants have the underlying type of the enum (if it is fixed)
13042 or the type of their initializer (if the underlying type of the
13043 enum is not fixed):
13045 [ C++0x dcl.enum ]
13047 If the underlying type is fixed, the type of each enumerator
13048 prior to the closing brace is the underlying type; if the
13049 initializing value of an enumerator cannot be represented by
13050 the underlying type, the program is ill-formed. If the
13051 underlying type is not fixed, the type of each enumerator is
13052 the type of its initializing value.
13054 If the underlying type is not fixed, it will be computed by
13055 finish_enum and we will reset the type of this enumerator. Of
13056 course, if we're processing a template, there may be no value. */
13057 type = value ? TREE_TYPE (value) : NULL_TREE;
13059 decl = build_decl (loc, CONST_DECL, name, type);
13061 DECL_CONTEXT (decl) = enumtype;
13062 TREE_CONSTANT (decl) = 1;
13063 TREE_READONLY (decl) = 1;
13064 DECL_INITIAL (decl) = value;
13066 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
13067 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13068 on the TYPE_FIELDS list for `S'. (That's so that you can say
13069 things like `S::i' later.) */
13070 finish_member_declaration (decl);
13071 else
13072 pushdecl (decl);
13074 /* Add this enumeration constant to the list for this type. */
13075 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13078 /* Look for an enumerator with the given NAME within the enumeration
13079 type ENUMTYPE. This routine is used primarily for qualified name
13080 lookup into an enumerator in C++0x, e.g.,
13082 enum class Color { Red, Green, Blue };
13084 Color color = Color::Red;
13086 Returns the value corresponding to the enumerator, or
13087 NULL_TREE if no such enumerator was found. */
13088 tree
13089 lookup_enumerator (tree enumtype, tree name)
13091 tree e;
13092 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
13094 e = purpose_member (name, TYPE_VALUES (enumtype));
13095 return e? TREE_VALUE (e) : NULL_TREE;
13099 /* We're defining DECL. Make sure that its type is OK. */
13101 static void
13102 check_function_type (tree decl, tree current_function_parms)
13104 tree fntype = TREE_TYPE (decl);
13105 tree return_type = complete_type (TREE_TYPE (fntype));
13107 /* In a function definition, arg types must be complete. */
13108 require_complete_types_for_parms (current_function_parms);
13110 if (dependent_type_p (return_type)
13111 || type_uses_auto (return_type))
13112 return;
13113 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
13114 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
13116 tree args = TYPE_ARG_TYPES (fntype);
13118 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13119 error ("return type %q#T is incomplete", return_type);
13120 else
13121 error ("return type has Java class type %q#T", return_type);
13123 /* Make it return void instead. */
13124 if (TREE_CODE (fntype) == METHOD_TYPE)
13125 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
13126 void_type_node,
13127 TREE_CHAIN (args));
13128 else
13129 fntype = build_function_type (void_type_node, args);
13130 fntype
13131 = build_exception_variant (fntype,
13132 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
13133 fntype = (cp_build_type_attribute_variant
13134 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
13135 TREE_TYPE (decl) = fntype;
13137 else
13138 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13141 /* Create the FUNCTION_DECL for a function definition.
13142 DECLSPECS and DECLARATOR are the parts of the declaration;
13143 they describe the function's name and the type it returns,
13144 but twisted together in a fashion that parallels the syntax of C.
13146 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13147 DECLARATOR is really the DECL for the function we are about to
13148 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13149 indicating that the function is an inline defined in-class.
13151 This function creates a binding context for the function body
13152 as well as setting up the FUNCTION_DECL in current_function_decl.
13154 For C++, we must first check whether that datum makes any sense.
13155 For example, "class A local_a(1,2);" means that variable local_a
13156 is an aggregate of type A, which should have a constructor
13157 applied to it with the argument list [1, 2].
13159 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
13160 or may be a BLOCK if the function has been defined previously
13161 in this translation unit. On exit, DECL_INITIAL (decl1) will be
13162 error_mark_node if the function has never been defined, or
13163 a BLOCK if the function has been defined somewhere. */
13165 bool
13166 start_preparsed_function (tree decl1, tree attrs, int flags)
13168 tree ctype = NULL_TREE;
13169 tree fntype;
13170 tree restype;
13171 int doing_friend = 0;
13172 cp_binding_level *bl;
13173 tree current_function_parms;
13174 struct c_fileinfo *finfo
13175 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
13176 bool honor_interface;
13178 /* Sanity check. */
13179 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
13180 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
13182 fntype = TREE_TYPE (decl1);
13183 if (TREE_CODE (fntype) == METHOD_TYPE)
13184 ctype = TYPE_METHOD_BASETYPE (fntype);
13186 /* ISO C++ 11.4/5. A friend function defined in a class is in
13187 the (lexical) scope of the class in which it is defined. */
13188 if (!ctype && DECL_FRIEND_P (decl1))
13190 ctype = DECL_FRIEND_CONTEXT (decl1);
13192 /* CTYPE could be null here if we're dealing with a template;
13193 for example, `inline friend float foo()' inside a template
13194 will have no CTYPE set. */
13195 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13196 ctype = NULL_TREE;
13197 else
13198 doing_friend = 1;
13201 if (DECL_DECLARED_INLINE_P (decl1)
13202 && lookup_attribute ("noinline", attrs))
13203 warning (0, "inline function %q+D given attribute noinline", decl1);
13205 /* Handle gnu_inline attribute. */
13206 if (GNU_INLINE_P (decl1))
13208 DECL_EXTERNAL (decl1) = 1;
13209 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13210 DECL_INTERFACE_KNOWN (decl1) = 1;
13211 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
13214 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13215 /* This is a constructor, we must ensure that any default args
13216 introduced by this definition are propagated to the clones
13217 now. The clones are used directly in overload resolution. */
13218 adjust_clone_args (decl1);
13220 /* Sometimes we don't notice that a function is a static member, and
13221 build a METHOD_TYPE for it. Fix that up now. */
13222 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13223 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
13225 /* Set up current_class_type, and enter the scope of the class, if
13226 appropriate. */
13227 if (ctype)
13228 push_nested_class (ctype);
13229 else if (DECL_STATIC_FUNCTION_P (decl1))
13230 push_nested_class (DECL_CONTEXT (decl1));
13232 /* Now that we have entered the scope of the class, we must restore
13233 the bindings for any template parameters surrounding DECL1, if it
13234 is an inline member template. (Order is important; consider the
13235 case where a template parameter has the same name as a field of
13236 the class.) It is not until after this point that
13237 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
13238 if (flags & SF_INCLASS_INLINE)
13239 maybe_begin_member_template_processing (decl1);
13241 /* Effective C++ rule 15. */
13242 if (warn_ecpp
13243 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13244 && VOID_TYPE_P (TREE_TYPE (fntype)))
13245 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13247 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13248 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13249 if (!DECL_INITIAL (decl1))
13250 DECL_INITIAL (decl1) = error_mark_node;
13252 /* This function exists in static storage.
13253 (This does not mean `static' in the C sense!) */
13254 TREE_STATIC (decl1) = 1;
13256 /* We must call push_template_decl after current_class_type is set
13257 up. (If we are processing inline definitions after exiting a
13258 class scope, current_class_type will be NULL_TREE until set above
13259 by push_nested_class.) */
13260 if (processing_template_decl)
13262 tree newdecl1 = push_template_decl (decl1);
13263 if (newdecl1 == error_mark_node)
13265 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
13266 pop_nested_class ();
13267 return false;
13269 decl1 = newdecl1;
13272 /* We are now in the scope of the function being defined. */
13273 current_function_decl = decl1;
13275 /* Save the parm names or decls from this function's declarator
13276 where store_parm_decls will find them. */
13277 current_function_parms = DECL_ARGUMENTS (decl1);
13279 /* Make sure the parameter and return types are reasonable. When
13280 you declare a function, these types can be incomplete, but they
13281 must be complete when you define the function. */
13282 check_function_type (decl1, current_function_parms);
13284 /* Build the return declaration for the function. */
13285 restype = TREE_TYPE (fntype);
13287 if (DECL_RESULT (decl1) == NULL_TREE)
13289 tree resdecl;
13291 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13292 DECL_ARTIFICIAL (resdecl) = 1;
13293 DECL_IGNORED_P (resdecl) = 1;
13294 DECL_RESULT (decl1) = resdecl;
13296 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13299 /* Let the user know we're compiling this function. */
13300 announce_function (decl1);
13302 /* Record the decl so that the function name is defined.
13303 If we already have a decl for this name, and it is a FUNCTION_DECL,
13304 use the old decl. */
13305 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13307 /* A specialization is not used to guide overload resolution. */
13308 if (!DECL_FUNCTION_MEMBER_P (decl1)
13309 && !(DECL_USE_TEMPLATE (decl1) &&
13310 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
13312 tree olddecl = pushdecl (decl1);
13314 if (olddecl == error_mark_node)
13315 /* If something went wrong when registering the declaration,
13316 use DECL1; we have to have a FUNCTION_DECL to use when
13317 parsing the body of the function. */
13319 else
13321 /* Otherwise, OLDDECL is either a previous declaration
13322 of the same function or DECL1 itself. */
13324 if (warn_missing_declarations
13325 && olddecl == decl1
13326 && !DECL_MAIN_P (decl1)
13327 && TREE_PUBLIC (decl1)
13328 && !DECL_DECLARED_INLINE_P (decl1))
13330 tree context;
13332 /* Check whether DECL1 is in an anonymous
13333 namespace. */
13334 for (context = DECL_CONTEXT (decl1);
13335 context;
13336 context = DECL_CONTEXT (context))
13338 if (TREE_CODE (context) == NAMESPACE_DECL
13339 && DECL_NAME (context) == NULL_TREE)
13340 break;
13343 if (context == NULL)
13344 warning (OPT_Wmissing_declarations,
13345 "no previous declaration for %q+D", decl1);
13348 decl1 = olddecl;
13351 else
13353 /* We need to set the DECL_CONTEXT. */
13354 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13355 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13357 fntype = TREE_TYPE (decl1);
13358 restype = TREE_TYPE (fntype);
13360 /* If #pragma weak applies, mark the decl appropriately now.
13361 The pragma only applies to global functions. Because
13362 determining whether or not the #pragma applies involves
13363 computing the mangled name for the declaration, we cannot
13364 apply the pragma until after we have merged this declaration
13365 with any previous declarations; if the original declaration
13366 has a linkage specification, that specification applies to
13367 the definition as well, and may affect the mangled name. */
13368 if (DECL_FILE_SCOPE_P (decl1))
13369 maybe_apply_pragma_weak (decl1);
13372 /* Reset this in case the call to pushdecl changed it. */
13373 current_function_decl = decl1;
13375 gcc_assert (DECL_INITIAL (decl1));
13377 /* This function may already have been parsed, in which case just
13378 return; our caller will skip over the body without parsing. */
13379 if (DECL_INITIAL (decl1) != error_mark_node)
13380 return true;
13382 /* Initialize RTL machinery. We cannot do this until
13383 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13384 even when processing a template; this is how we get
13385 CFUN set up, and our per-function variables initialized.
13386 FIXME factor out the non-RTL stuff. */
13387 bl = current_binding_level;
13388 allocate_struct_function (decl1, processing_template_decl);
13390 /* Initialize the language data structures. Whenever we start
13391 a new function, we destroy temporaries in the usual way. */
13392 cfun->language = ggc_alloc_cleared_language_function ();
13393 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
13394 current_binding_level = bl;
13396 if (!processing_template_decl && type_uses_auto (restype))
13398 FNDECL_USED_AUTO (decl1) = true;
13399 current_function_auto_return_pattern = restype;
13402 /* Start the statement-tree, start the tree now. */
13403 DECL_SAVED_TREE (decl1) = push_stmt_list ();
13405 /* If we are (erroneously) defining a function that we have already
13406 defined before, wipe out what we knew before. */
13407 if (!DECL_PENDING_INLINE_P (decl1))
13408 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13410 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13412 /* We know that this was set up by `grokclassfn'. We do not
13413 wait until `store_parm_decls', since evil parse errors may
13414 never get us to that point. Here we keep the consistency
13415 between `current_class_type' and `current_class_ptr'. */
13416 tree t = DECL_ARGUMENTS (decl1);
13418 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
13419 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
13421 cp_function_chain->x_current_class_ref
13422 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
13423 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
13424 cp_function_chain->x_current_class_ptr = t;
13426 /* Constructors and destructors need to know whether they're "in
13427 charge" of initializing virtual base classes. */
13428 t = DECL_CHAIN (t);
13429 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13431 current_in_charge_parm = t;
13432 t = DECL_CHAIN (t);
13434 if (DECL_HAS_VTT_PARM_P (decl1))
13436 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
13437 current_vtt_parm = t;
13441 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
13442 /* Implicitly-defined methods (like the
13443 destructor for a class in which no destructor
13444 is explicitly declared) must not be defined
13445 until their definition is needed. So, we
13446 ignore interface specifications for
13447 compiler-generated functions. */
13448 && !DECL_ARTIFICIAL (decl1));
13450 if (processing_template_decl)
13451 /* Don't mess with interface flags. */;
13452 else if (DECL_INTERFACE_KNOWN (decl1))
13454 tree ctx = decl_function_context (decl1);
13456 if (DECL_NOT_REALLY_EXTERN (decl1))
13457 DECL_EXTERNAL (decl1) = 0;
13459 if (ctx != NULL_TREE && vague_linkage_p (ctx))
13460 /* This is a function in a local class in an extern inline
13461 or template function. */
13462 comdat_linkage (decl1);
13464 /* If this function belongs to an interface, it is public.
13465 If it belongs to someone else's interface, it is also external.
13466 This only affects inlines and template instantiations. */
13467 else if (!finfo->interface_unknown && honor_interface)
13469 if (DECL_DECLARED_INLINE_P (decl1)
13470 || DECL_TEMPLATE_INSTANTIATION (decl1))
13472 DECL_EXTERNAL (decl1)
13473 = (finfo->interface_only
13474 || (DECL_DECLARED_INLINE_P (decl1)
13475 && ! flag_implement_inlines
13476 && !DECL_VINDEX (decl1)));
13478 /* For WIN32 we also want to put these in linkonce sections. */
13479 maybe_make_one_only (decl1);
13481 else
13482 DECL_EXTERNAL (decl1) = 0;
13483 DECL_INTERFACE_KNOWN (decl1) = 1;
13484 /* If this function is in an interface implemented in this file,
13485 make sure that the back end knows to emit this function
13486 here. */
13487 if (!DECL_EXTERNAL (decl1))
13488 mark_needed (decl1);
13490 else if (finfo->interface_unknown && finfo->interface_only
13491 && honor_interface)
13493 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13494 interface, we will have both finfo->interface_unknown and
13495 finfo->interface_only set. In that case, we don't want to
13496 use the normal heuristics because someone will supply a
13497 #pragma implementation elsewhere, and deducing it here would
13498 produce a conflict. */
13499 comdat_linkage (decl1);
13500 DECL_EXTERNAL (decl1) = 0;
13501 DECL_INTERFACE_KNOWN (decl1) = 1;
13502 DECL_DEFER_OUTPUT (decl1) = 1;
13504 else
13506 /* This is a definition, not a reference.
13507 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
13508 if (!GNU_INLINE_P (decl1))
13509 DECL_EXTERNAL (decl1) = 0;
13511 if ((DECL_DECLARED_INLINE_P (decl1)
13512 || DECL_TEMPLATE_INSTANTIATION (decl1))
13513 && ! DECL_INTERFACE_KNOWN (decl1))
13514 DECL_DEFER_OUTPUT (decl1) = 1;
13515 else
13516 DECL_INTERFACE_KNOWN (decl1) = 1;
13519 /* Determine the ELF visibility attribute for the function. We must not
13520 do this before calling "pushdecl", as we must allow "duplicate_decls"
13521 to merge any attributes appropriately. We also need to wait until
13522 linkage is set. */
13523 if (!DECL_CLONED_FUNCTION_P (decl1))
13524 determine_visibility (decl1);
13526 begin_scope (sk_function_parms, decl1);
13528 ++function_depth;
13530 if (DECL_DESTRUCTOR_P (decl1)
13531 || (DECL_CONSTRUCTOR_P (decl1)
13532 && targetm.cxx.cdtor_returns_this ()))
13534 cdtor_label = build_decl (input_location,
13535 LABEL_DECL, NULL_TREE, NULL_TREE);
13536 DECL_CONTEXT (cdtor_label) = current_function_decl;
13539 start_fname_decls ();
13541 store_parm_decls (current_function_parms);
13543 return true;
13547 /* Like start_preparsed_function, except that instead of a
13548 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13550 Returns true on success. If the DECLARATOR is not suitable
13551 for a function, we return false, which tells the parser to
13552 skip the entire function. */
13554 bool
13555 start_function (cp_decl_specifier_seq *declspecs,
13556 const cp_declarator *declarator,
13557 tree attrs)
13559 tree decl1;
13561 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13562 if (decl1 == error_mark_node)
13563 return false;
13564 /* If the declarator is not suitable for a function definition,
13565 cause a syntax error. */
13566 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13568 error ("invalid function declaration");
13569 return false;
13572 if (DECL_MAIN_P (decl1))
13573 /* main must return int. grokfndecl should have corrected it
13574 (and issued a diagnostic) if the user got it wrong. */
13575 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13576 integer_type_node));
13578 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13581 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13582 FN. */
13584 static bool
13585 use_eh_spec_block (tree fn)
13587 return (flag_exceptions && flag_enforce_eh_specs
13588 && !processing_template_decl
13589 && !type_throw_all_p (TREE_TYPE (fn))
13590 /* We insert the EH_SPEC_BLOCK only in the original
13591 function; then, it is copied automatically to the
13592 clones. */
13593 && !DECL_CLONED_FUNCTION_P (fn)
13594 /* Implicitly-generated constructors and destructors have
13595 exception specifications. However, those specifications
13596 are the union of the possible exceptions specified by the
13597 constructors/destructors for bases and members, so no
13598 unallowed exception will ever reach this function. By
13599 not creating the EH_SPEC_BLOCK we save a little memory,
13600 and we avoid spurious warnings about unreachable
13601 code. */
13602 && !DECL_DEFAULTED_FN (fn));
13605 /* Store the parameter declarations into the current function declaration.
13606 This is called after parsing the parameter declarations, before
13607 digesting the body of the function.
13609 Also install to binding contour return value identifier, if any. */
13611 static void
13612 store_parm_decls (tree current_function_parms)
13614 tree fndecl = current_function_decl;
13615 tree parm;
13617 /* This is a chain of any other decls that came in among the parm
13618 declarations. If a parm is declared with enum {foo, bar} x;
13619 then CONST_DECLs for foo and bar are put here. */
13620 tree nonparms = NULL_TREE;
13622 if (current_function_parms)
13624 /* This case is when the function was defined with an ANSI prototype.
13625 The parms already have decls, so we need not do anything here
13626 except record them as in effect
13627 and complain if any redundant old-style parm decls were written. */
13629 tree specparms = current_function_parms;
13630 tree next;
13632 /* Must clear this because it might contain TYPE_DECLs declared
13633 at class level. */
13634 current_binding_level->names = NULL;
13636 /* If we're doing semantic analysis, then we'll call pushdecl
13637 for each of these. We must do them in reverse order so that
13638 they end in the correct forward order. */
13639 specparms = nreverse (specparms);
13641 for (parm = specparms; parm; parm = next)
13643 next = DECL_CHAIN (parm);
13644 if (TREE_CODE (parm) == PARM_DECL)
13646 if (DECL_NAME (parm) == NULL_TREE
13647 || !VOID_TYPE_P (parm))
13648 pushdecl (parm);
13649 else
13650 error ("parameter %qD declared void", parm);
13652 else
13654 /* If we find an enum constant or a type tag,
13655 put it aside for the moment. */
13656 TREE_CHAIN (parm) = NULL_TREE;
13657 nonparms = chainon (nonparms, parm);
13661 /* Get the decls in their original chain order and record in the
13662 function. This is all and only the PARM_DECLs that were
13663 pushed into scope by the loop above. */
13664 DECL_ARGUMENTS (fndecl) = getdecls ();
13666 else
13667 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13669 /* Now store the final chain of decls for the arguments
13670 as the decl-chain of the current lexical scope.
13671 Put the enumerators in as well, at the front so that
13672 DECL_ARGUMENTS is not modified. */
13673 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13675 if (use_eh_spec_block (current_function_decl))
13676 current_eh_spec_block = begin_eh_spec_block ();
13680 /* We have finished doing semantic analysis on DECL, but have not yet
13681 generated RTL for its body. Save away our current state, so that
13682 when we want to generate RTL later we know what to do. */
13684 static void
13685 save_function_data (tree decl)
13687 struct language_function *f;
13689 /* Save the language-specific per-function data so that we can
13690 get it back when we really expand this function. */
13691 gcc_assert (!DECL_PENDING_INLINE_P (decl));
13693 /* Make a copy. */
13694 f = ggc_alloc_language_function ();
13695 memcpy (f, cp_function_chain, sizeof (struct language_function));
13696 DECL_SAVED_FUNCTION_DATA (decl) = f;
13698 /* Clear out the bits we don't need. */
13699 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13700 f->bindings = NULL;
13701 f->x_local_names = NULL;
13702 f->base.local_typedefs = NULL;
13706 /* Set the return value of the constructor (if present). */
13708 static void
13709 finish_constructor_body (void)
13711 tree val;
13712 tree exprstmt;
13714 if (targetm.cxx.cdtor_returns_this ()
13715 && (! TYPE_FOR_JAVA (current_class_type)))
13717 /* Any return from a constructor will end up here. */
13718 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13720 val = DECL_ARGUMENTS (current_function_decl);
13721 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13722 DECL_RESULT (current_function_decl), val);
13723 /* Return the address of the object. */
13724 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13725 add_stmt (exprstmt);
13729 /* Do all the processing for the beginning of a destructor; set up the
13730 vtable pointers and cleanups for bases and members. */
13732 static void
13733 begin_destructor_body (void)
13735 tree compound_stmt;
13737 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13738 issued an error message. We still want to try to process the
13739 body of the function, but initialize_vtbl_ptrs will crash if
13740 TYPE_BINFO is NULL. */
13741 if (COMPLETE_TYPE_P (current_class_type))
13743 compound_stmt = begin_compound_stmt (0);
13744 /* Make all virtual function table pointers in non-virtual base
13745 classes point to CURRENT_CLASS_TYPE's virtual function
13746 tables. */
13747 initialize_vtbl_ptrs (current_class_ptr);
13748 finish_compound_stmt (compound_stmt);
13750 /* Insert a cleanup to let the back end know that the object is dead
13751 when we exit the destructor, either normally or via exception. */
13752 tree clobber = build_constructor (current_class_type, NULL);
13753 TREE_THIS_VOLATILE (clobber) = true;
13754 tree exprstmt = build2 (MODIFY_EXPR, current_class_type,
13755 current_class_ref, clobber);
13756 finish_decl_cleanup (NULL_TREE, exprstmt);
13758 /* And insert cleanups for our bases and members so that they
13759 will be properly destroyed if we throw. */
13760 push_base_cleanups ();
13764 /* At the end of every destructor we generate code to delete the object if
13765 necessary. Do that now. */
13767 static void
13768 finish_destructor_body (void)
13770 tree exprstmt;
13772 /* Any return from a destructor will end up here; that way all base
13773 and member cleanups will be run when the function returns. */
13774 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13776 /* In a virtual destructor, we must call delete. */
13777 if (DECL_VIRTUAL_P (current_function_decl))
13779 tree if_stmt;
13780 tree virtual_size = cxx_sizeof (current_class_type);
13782 /* [class.dtor]
13784 At the point of definition of a virtual destructor (including
13785 an implicit definition), non-placement operator delete shall
13786 be looked up in the scope of the destructor's class and if
13787 found shall be accessible and unambiguous. */
13788 exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
13789 virtual_size,
13790 /*global_p=*/false,
13791 /*placement=*/NULL_TREE,
13792 /*alloc_fn=*/NULL_TREE,
13793 tf_warning_or_error);
13795 if_stmt = begin_if_stmt ();
13796 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13797 current_in_charge_parm,
13798 integer_one_node),
13799 if_stmt);
13800 finish_expr_stmt (exprstmt);
13801 finish_then_clause (if_stmt);
13802 finish_if_stmt (if_stmt);
13805 if (targetm.cxx.cdtor_returns_this ())
13807 tree val;
13809 val = DECL_ARGUMENTS (current_function_decl);
13810 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13811 DECL_RESULT (current_function_decl), val);
13812 /* Return the address of the object. */
13813 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13814 add_stmt (exprstmt);
13818 /* Do the necessary processing for the beginning of a function body, which
13819 in this case includes member-initializers, but not the catch clauses of
13820 a function-try-block. Currently, this means opening a binding level
13821 for the member-initializers (in a ctor), member cleanups (in a dtor),
13822 and capture proxies (in a lambda operator()). */
13824 tree
13825 begin_function_body (void)
13827 tree stmt;
13829 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13830 return NULL_TREE;
13832 if (processing_template_decl)
13833 /* Do nothing now. */;
13834 else
13835 /* Always keep the BLOCK node associated with the outermost pair of
13836 curly braces of a function. These are needed for correct
13837 operation of dwarfout.c. */
13838 keep_next_level (true);
13840 stmt = begin_compound_stmt (BCS_FN_BODY);
13842 if (processing_template_decl)
13843 /* Do nothing now. */;
13844 else if (DECL_DESTRUCTOR_P (current_function_decl))
13845 begin_destructor_body ();
13847 return stmt;
13850 /* Do the processing for the end of a function body. Currently, this means
13851 closing out the cleanups for fully-constructed bases and members, and in
13852 the case of the destructor, deleting the object if desired. Again, this
13853 is only meaningful for [cd]tors, since they are the only functions where
13854 there is a significant distinction between the main body and any
13855 function catch clauses. Handling, say, main() return semantics here
13856 would be wrong, as flowing off the end of a function catch clause for
13857 main() would also need to return 0. */
13859 void
13860 finish_function_body (tree compstmt)
13862 if (compstmt == NULL_TREE)
13863 return;
13865 /* Close the block. */
13866 finish_compound_stmt (compstmt);
13868 if (processing_template_decl)
13869 /* Do nothing now. */;
13870 else if (DECL_CONSTRUCTOR_P (current_function_decl))
13871 finish_constructor_body ();
13872 else if (DECL_DESTRUCTOR_P (current_function_decl))
13873 finish_destructor_body ();
13876 /* Given a function, returns the BLOCK corresponding to the outermost level
13877 of curly braces, skipping the artificial block created for constructor
13878 initializers. */
13880 tree
13881 outer_curly_brace_block (tree fndecl)
13883 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13884 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13885 /* Skip the artificial function body block. */
13886 block = BLOCK_SUBBLOCKS (block);
13887 return block;
13890 /* If FNDECL is a class's key method, add the class to the list of
13891 keyed classes that should be emitted. */
13893 static void
13894 record_key_method_defined (tree fndecl)
13896 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13897 && DECL_VIRTUAL_P (fndecl)
13898 && !processing_template_decl)
13900 tree fnclass = DECL_CONTEXT (fndecl);
13901 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13902 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13906 /* Subroutine of finish_function.
13907 Save the body of constexpr functions for possible
13908 future compile time evaluation. */
13910 static void
13911 maybe_save_function_definition (tree fun)
13913 if (!processing_template_decl
13914 && DECL_DECLARED_CONSTEXPR_P (fun)
13915 && !DECL_CLONED_FUNCTION_P (fun))
13916 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13919 /* Finish up a function declaration and compile that function
13920 all the way to assembler language output. The free the storage
13921 for the function definition.
13923 FLAGS is a bitwise or of the following values:
13924 2 - INCLASS_INLINE
13925 We just finished processing the body of an in-class inline
13926 function definition. (This processing will have taken place
13927 after the class definition is complete.) */
13929 tree
13930 finish_function (int flags)
13932 tree fndecl = current_function_decl;
13933 tree fntype, ctype = NULL_TREE;
13934 int inclass_inline = (flags & 2) != 0;
13936 /* When we get some parse errors, we can end up without a
13937 current_function_decl, so cope. */
13938 if (fndecl == NULL_TREE)
13939 return error_mark_node;
13941 if (c_dialect_objc ())
13942 objc_finish_function ();
13944 gcc_assert (!defer_mark_used_calls);
13945 defer_mark_used_calls = true;
13947 record_key_method_defined (fndecl);
13949 fntype = TREE_TYPE (fndecl);
13951 /* TREE_READONLY (fndecl) = 1;
13952 This caused &foo to be of type ptr-to-const-function
13953 which then got a warning when stored in a ptr-to-function variable. */
13955 gcc_assert (building_stmt_list_p ());
13956 /* The current function is being defined, so its DECL_INITIAL should
13957 be set, and unless there's a multiple definition, it should be
13958 error_mark_node. */
13959 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13961 /* For a cloned function, we've already got all the code we need;
13962 there's no need to add any extra bits. */
13963 if (!DECL_CLONED_FUNCTION_P (fndecl))
13965 /* Make it so that `main' always returns 0 by default. */
13966 if (DECL_MAIN_P (current_function_decl))
13967 finish_return_stmt (integer_zero_node);
13969 if (use_eh_spec_block (current_function_decl))
13970 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13971 (TREE_TYPE (current_function_decl)),
13972 current_eh_spec_block);
13975 /* If we're saving up tree structure, tie off the function now. */
13976 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13978 if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
13979 cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
13981 finish_fname_decls ();
13983 /* If this function can't throw any exceptions, remember that. */
13984 if (!processing_template_decl
13985 && !cp_function_chain->can_throw
13986 && !flag_non_call_exceptions
13987 && !decl_replaceable_p (fndecl))
13988 TREE_NOTHROW (fndecl) = 1;
13990 /* This must come after expand_function_end because cleanups might
13991 have declarations (from inline functions) that need to go into
13992 this function's blocks. */
13994 /* If the current binding level isn't the outermost binding level
13995 for this function, either there is a bug, or we have experienced
13996 syntax errors and the statement tree is malformed. */
13997 if (current_binding_level->kind != sk_function_parms)
13999 /* Make sure we have already experienced errors. */
14000 gcc_assert (errorcount);
14002 /* Throw away the broken statement tree and extra binding
14003 levels. */
14004 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
14006 while (current_binding_level->kind != sk_function_parms)
14008 if (current_binding_level->kind == sk_class)
14009 pop_nested_class ();
14010 else
14011 poplevel (0, 0, 0);
14014 poplevel (1, 0, 1);
14016 /* Statements should always be full-expressions at the outermost set
14017 of curly braces for a function. */
14018 gcc_assert (stmts_are_full_exprs_p ());
14020 /* If there are no return statements in a function with auto return type,
14021 the return type is void. But if the declared type is something like
14022 auto*, this is an error. */
14023 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
14024 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
14026 if (!is_auto (current_function_auto_return_pattern)
14027 && !current_function_returns_value && !current_function_returns_null)
14029 error ("no return statements in function returning %qT",
14030 current_function_auto_return_pattern);
14031 inform (input_location, "only plain %<auto%> return type can be "
14032 "deduced to %<void%>");
14034 apply_deduced_return_type (fndecl, void_type_node);
14035 fntype = TREE_TYPE (fndecl);
14038 /* Save constexpr function body before it gets munged by
14039 the NRV transformation. */
14040 maybe_save_function_definition (fndecl);
14042 /* Set up the named return value optimization, if we can. Candidate
14043 variables are selected in check_return_expr. */
14044 if (current_function_return_value)
14046 tree r = current_function_return_value;
14047 tree outer;
14049 if (r != error_mark_node
14050 /* This is only worth doing for fns that return in memory--and
14051 simpler, since we don't have to worry about promoted modes. */
14052 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
14053 /* Only allow this for variables declared in the outer scope of
14054 the function so we know that their lifetime always ends with a
14055 return; see g++.dg/opt/nrv6.C. We could be more flexible if
14056 we were to do this optimization in tree-ssa. */
14057 && (outer = outer_curly_brace_block (fndecl))
14058 && chain_member (r, BLOCK_VARS (outer)))
14059 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
14061 current_function_return_value = NULL_TREE;
14064 /* Remember that we were in class scope. */
14065 if (current_class_name)
14066 ctype = current_class_type;
14068 /* Must mark the RESULT_DECL as being in this function. */
14069 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14071 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14072 to the FUNCTION_DECL node itself. */
14073 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14075 /* Save away current state, if appropriate. */
14076 if (!processing_template_decl)
14077 save_function_data (fndecl);
14079 /* Complain if there's just no return statement. */
14080 if (warn_return_type
14081 && !VOID_TYPE_P (TREE_TYPE (fntype))
14082 && !dependent_type_p (TREE_TYPE (fntype))
14083 && !current_function_returns_value && !current_function_returns_null
14084 /* Don't complain if we abort or throw. */
14085 && !current_function_returns_abnormally
14086 /* Don't complain if there's an infinite loop. */
14087 && !current_function_infinite_loop
14088 /* Don't complain if we are declared noreturn. */
14089 && !TREE_THIS_VOLATILE (fndecl)
14090 && !DECL_NAME (DECL_RESULT (fndecl))
14091 && !TREE_NO_WARNING (fndecl)
14092 /* Structor return values (if any) are set by the compiler. */
14093 && !DECL_CONSTRUCTOR_P (fndecl)
14094 && !DECL_DESTRUCTOR_P (fndecl)
14095 && targetm.warn_func_return (fndecl))
14097 warning (OPT_Wreturn_type,
14098 "no return statement in function returning non-void");
14099 TREE_NO_WARNING (fndecl) = 1;
14102 /* Store the end of the function, so that we get good line number
14103 info for the epilogue. */
14104 cfun->function_end_locus = input_location;
14106 /* Complain about parameters that are only set, but never otherwise used. */
14107 if (warn_unused_but_set_parameter
14108 && !processing_template_decl
14109 && errorcount == unused_but_set_errorcount
14110 && !DECL_CLONED_FUNCTION_P (fndecl))
14112 tree decl;
14114 for (decl = DECL_ARGUMENTS (fndecl);
14115 decl;
14116 decl = DECL_CHAIN (decl))
14117 if (TREE_USED (decl)
14118 && TREE_CODE (decl) == PARM_DECL
14119 && !DECL_READ_P (decl)
14120 && DECL_NAME (decl)
14121 && !DECL_ARTIFICIAL (decl)
14122 && !TREE_NO_WARNING (decl)
14123 && !DECL_IN_SYSTEM_HEADER (decl)
14124 && TREE_TYPE (decl) != error_mark_node
14125 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
14126 && (!CLASS_TYPE_P (TREE_TYPE (decl))
14127 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
14128 warning (OPT_Wunused_but_set_parameter,
14129 "parameter %q+D set but not used", decl);
14130 unused_but_set_errorcount = errorcount;
14133 /* Complain about locally defined typedefs that are not used in this
14134 function. */
14135 maybe_warn_unused_local_typedefs ();
14137 /* Genericize before inlining. */
14138 if (!processing_template_decl)
14140 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
14141 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
14142 cp_genericize (fndecl);
14143 /* Clear out the bits we don't need. */
14144 f->x_current_class_ptr = NULL;
14145 f->x_current_class_ref = NULL;
14146 f->x_eh_spec_block = NULL;
14147 f->x_in_charge_parm = NULL;
14148 f->x_vtt_parm = NULL;
14149 f->x_return_value = NULL;
14150 f->bindings = NULL;
14151 f->extern_decl_map = NULL;
14152 f->infinite_loops = NULL;
14154 /* Clear out the bits we don't need. */
14155 local_names = NULL;
14157 /* We're leaving the context of this function, so zap cfun. It's still in
14158 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
14159 set_cfun (NULL);
14160 current_function_decl = NULL;
14162 /* If this is an in-class inline definition, we may have to pop the
14163 bindings for the template parameters that we added in
14164 maybe_begin_member_template_processing when start_function was
14165 called. */
14166 if (inclass_inline)
14167 maybe_end_member_template_processing ();
14169 /* Leave the scope of the class. */
14170 if (ctype)
14171 pop_nested_class ();
14173 --function_depth;
14175 /* Clean up. */
14176 current_function_decl = NULL_TREE;
14178 defer_mark_used_calls = false;
14179 if (deferred_mark_used_calls)
14181 unsigned int i;
14182 tree decl;
14184 FOR_EACH_VEC_SAFE_ELT (deferred_mark_used_calls, i, decl)
14185 mark_used (decl);
14186 vec_free (deferred_mark_used_calls);
14189 return fndecl;
14192 /* Create the FUNCTION_DECL for a function definition.
14193 DECLSPECS and DECLARATOR are the parts of the declaration;
14194 they describe the return type and the name of the function,
14195 but twisted together in a fashion that parallels the syntax of C.
14197 This function creates a binding context for the function body
14198 as well as setting up the FUNCTION_DECL in current_function_decl.
14200 Returns a FUNCTION_DECL on success.
14202 If the DECLARATOR is not suitable for a function (it defines a datum
14203 instead), we return 0, which tells yyparse to report a parse error.
14205 May return void_type_node indicating that this method is actually
14206 a friend. See grokfield for more details.
14208 Came here with a `.pushlevel' .
14210 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14211 CHANGES TO CODE IN `grokfield'. */
14213 tree
14214 grokmethod (cp_decl_specifier_seq *declspecs,
14215 const cp_declarator *declarator, tree attrlist)
14217 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14218 &attrlist);
14220 if (fndecl == error_mark_node)
14221 return error_mark_node;
14223 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14225 error ("invalid member function declaration");
14226 return error_mark_node;
14229 if (attrlist)
14230 cplus_decl_attributes (&fndecl, attrlist, 0);
14232 /* Pass friends other than inline friend functions back. */
14233 if (fndecl == void_type_node)
14234 return fndecl;
14236 if (DECL_IN_AGGR_P (fndecl))
14238 if (DECL_CLASS_SCOPE_P (fndecl))
14239 error ("%qD is already defined in class %qT", fndecl,
14240 DECL_CONTEXT (fndecl));
14241 return error_mark_node;
14244 check_template_shadow (fndecl);
14246 DECL_DECLARED_INLINE_P (fndecl) = 1;
14247 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
14249 /* We process method specializations in finish_struct_1. */
14250 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14252 fndecl = push_template_decl (fndecl);
14253 if (fndecl == error_mark_node)
14254 return fndecl;
14257 if (! DECL_FRIEND_P (fndecl))
14259 if (DECL_CHAIN (fndecl))
14261 fndecl = copy_node (fndecl);
14262 TREE_CHAIN (fndecl) = NULL_TREE;
14266 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14268 DECL_IN_AGGR_P (fndecl) = 1;
14269 return fndecl;
14273 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
14274 we can lay it out later, when and if its type becomes complete.
14276 Also handle constexpr pointer to member variables where the initializer
14277 is an unlowered PTRMEM_CST because the class isn't complete yet. */
14279 void
14280 maybe_register_incomplete_var (tree var)
14282 gcc_assert (VAR_P (var));
14284 /* Keep track of variables with incomplete types. */
14285 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14286 && DECL_EXTERNAL (var))
14288 tree inner_type = TREE_TYPE (var);
14290 while (TREE_CODE (inner_type) == ARRAY_TYPE)
14291 inner_type = TREE_TYPE (inner_type);
14292 inner_type = TYPE_MAIN_VARIANT (inner_type);
14294 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14295 /* RTTI TD entries are created while defining the type_info. */
14296 || (TYPE_LANG_SPECIFIC (inner_type)
14297 && TYPE_BEING_DEFINED (inner_type)))
14299 incomplete_var iv = {var, inner_type};
14300 vec_safe_push (incomplete_vars, iv);
14302 else if (TYPE_PTRMEM_P (inner_type)
14303 && DECL_INITIAL (var)
14304 && TREE_CODE (DECL_INITIAL (var)) == PTRMEM_CST)
14306 tree context = TYPE_PTRMEM_CLASS_TYPE (inner_type);
14307 gcc_assert (TYPE_BEING_DEFINED (context));
14308 incomplete_var iv = {var, context};
14309 vec_safe_push (incomplete_vars, iv);
14314 /* Called when a class type (given by TYPE) is defined. If there are
14315 any existing VAR_DECLs whose type has been completed by this
14316 declaration, update them now. */
14318 void
14319 complete_vars (tree type)
14321 unsigned ix;
14322 incomplete_var *iv;
14324 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
14326 if (same_type_p (type, iv->incomplete_type))
14328 tree var = iv->decl;
14329 tree type = TREE_TYPE (var);
14331 if (TYPE_PTRMEM_P (type))
14332 DECL_INITIAL (var) = cplus_expand_constant (DECL_INITIAL (var));
14333 else
14335 /* Complete the type of the variable. The VAR_DECL itself
14336 will be laid out in expand_expr. */
14337 complete_type (type);
14338 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
14341 /* Remove this entry from the list. */
14342 incomplete_vars->unordered_remove (ix);
14344 else
14345 ix++;
14348 /* Check for pending declarations which may have abstract type. */
14349 complete_type_check_abstract (type);
14352 /* If DECL is of a type which needs a cleanup, build and return an
14353 expression to perform that cleanup here. Return NULL_TREE if no
14354 cleanup need be done. */
14356 tree
14357 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
14359 tree type;
14360 tree attr;
14361 tree cleanup;
14363 /* Assume no cleanup is required. */
14364 cleanup = NULL_TREE;
14366 if (error_operand_p (decl))
14367 return cleanup;
14369 /* Handle "__attribute__((cleanup))". We run the cleanup function
14370 before the destructor since the destructor is what actually
14371 terminates the lifetime of the object. */
14372 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
14373 if (attr)
14375 tree id;
14376 tree fn;
14377 tree arg;
14379 /* Get the name specified by the user for the cleanup function. */
14380 id = TREE_VALUE (TREE_VALUE (attr));
14381 /* Look up the name to find the cleanup function to call. It is
14382 important to use lookup_name here because that is what is
14383 used in c-common.c:handle_cleanup_attribute when performing
14384 initial checks on the attribute. Note that those checks
14385 include ensuring that the function found is not an overloaded
14386 function, or an object with an overloaded call operator,
14387 etc.; we can rely on the fact that the function found is an
14388 ordinary FUNCTION_DECL. */
14389 fn = lookup_name (id);
14390 arg = build_address (decl);
14391 mark_used (decl);
14392 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
14393 if (cleanup == error_mark_node)
14394 return error_mark_node;
14396 /* Handle ordinary C++ destructors. */
14397 type = TREE_TYPE (decl);
14398 if (type_build_dtor_call (type))
14400 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
14401 tree addr;
14402 tree call;
14404 if (TREE_CODE (type) == ARRAY_TYPE)
14405 addr = decl;
14406 else
14407 addr = build_address (decl);
14409 call = build_delete (TREE_TYPE (addr), addr,
14410 sfk_complete_destructor, flags, 0, complain);
14411 if (call == error_mark_node)
14412 cleanup = error_mark_node;
14413 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
14414 /* Discard the call. */;
14415 else if (cleanup)
14416 cleanup = cp_build_compound_expr (cleanup, call, complain);
14417 else
14418 cleanup = call;
14421 /* build_delete sets the location of the destructor call to the
14422 current location, even though the destructor is going to be
14423 called later, at the end of the current scope. This can lead to
14424 a "jumpy" behaviour for users of debuggers when they step around
14425 the end of the block. So let's unset the location of the
14426 destructor call instead. */
14427 if (cleanup != NULL && EXPR_P (cleanup))
14428 SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
14430 if (cleanup
14431 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl))))
14432 /* Treat objects with destructors as used; the destructor may do
14433 something substantive. */
14434 mark_used (decl);
14436 return cleanup;
14440 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
14441 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
14442 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
14444 tree
14445 static_fn_type (tree memfntype)
14447 tree fntype;
14448 tree args;
14450 if (TYPE_PTRMEMFUNC_P (memfntype))
14451 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
14452 if (POINTER_TYPE_P (memfntype)
14453 || TREE_CODE (memfntype) == FUNCTION_DECL)
14454 memfntype = TREE_TYPE (memfntype);
14455 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
14456 return memfntype;
14457 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
14458 args = TYPE_ARG_TYPES (memfntype);
14459 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
14460 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
14461 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
14462 fntype = (cp_build_type_attribute_variant
14463 (fntype, TYPE_ATTRIBUTES (memfntype)));
14464 fntype = (build_exception_variant
14465 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
14466 return fntype;
14469 /* DECL was originally constructed as a non-static member function,
14470 but turned out to be static. Update it accordingly. */
14472 void
14473 revert_static_member_fn (tree decl)
14475 tree stype = static_fn_type (decl);
14476 cp_cv_quals quals = type_memfn_quals (stype);
14477 cp_ref_qualifier rqual = type_memfn_rqual (stype);
14479 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
14480 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
14482 TREE_TYPE (decl) = stype;
14484 if (DECL_ARGUMENTS (decl))
14485 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
14486 DECL_STATIC_FUNCTION_P (decl) = 1;
14489 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14490 one of the language-independent trees. */
14492 enum cp_tree_node_structure_enum
14493 cp_tree_node_structure (union lang_tree_node * t)
14495 switch (TREE_CODE (&t->generic))
14497 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
14498 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
14499 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
14500 case OVERLOAD: return TS_CP_OVERLOAD;
14501 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
14502 case PTRMEM_CST: return TS_CP_PTRMEM;
14503 case BASELINK: return TS_CP_BASELINK;
14504 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
14505 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
14506 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
14507 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
14508 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
14509 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
14510 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
14511 default: return TS_CP_GENERIC;
14515 /* Build the void_list_node (void_type_node having been created). */
14516 tree
14517 build_void_list_node (void)
14519 tree t = build_tree_list (NULL_TREE, void_type_node);
14520 return t;
14523 bool
14524 cp_missing_noreturn_ok_p (tree decl)
14526 /* A missing noreturn is ok for the `main' function. */
14527 return DECL_MAIN_P (decl);
14530 /* Return the COMDAT group into which DECL should be placed. */
14532 tree
14533 cxx_comdat_group (tree decl)
14535 tree name;
14537 /* Virtual tables, construction virtual tables, and virtual table
14538 tables all go in a single COMDAT group, named after the primary
14539 virtual table. */
14540 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
14541 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
14542 /* For all other DECLs, the COMDAT group is the mangled name of the
14543 declaration itself. */
14544 else
14546 while (DECL_THUNK_P (decl))
14548 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
14549 into the same section as the target function. In that case
14550 we must return target's name. */
14551 tree target = THUNK_TARGET (decl);
14552 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14553 && DECL_SECTION_NAME (target) != NULL
14554 && DECL_ONE_ONLY (target))
14555 decl = target;
14556 else
14557 break;
14559 name = DECL_ASSEMBLER_NAME (decl);
14562 return name;
14565 /* Returns the return type for FN as written by the user, which may include
14566 a placeholder for a deduced return type. */
14568 tree
14569 fndecl_declared_return_type (tree fn)
14571 fn = STRIP_TEMPLATE (fn);
14572 if (FNDECL_USED_AUTO (fn))
14574 struct language_function *f = NULL;
14575 if (DECL_STRUCT_FUNCTION (fn))
14576 f = DECL_STRUCT_FUNCTION (fn)->language;
14577 if (f == NULL)
14578 f = DECL_SAVED_FUNCTION_DATA (fn);
14579 return f->x_auto_return_pattern;
14581 return TREE_TYPE (TREE_TYPE (fn));
14584 /* Returns true iff DECL was declared with an auto return type and it has
14585 not yet been deduced to a real type. */
14587 bool
14588 undeduced_auto_decl (tree decl)
14590 if (cxx_dialect < cxx1y)
14591 return false;
14592 return type_uses_auto (TREE_TYPE (decl));
14595 /* Complain if DECL has an undeduced return type. */
14597 void
14598 require_deduced_type (tree decl)
14600 if (undeduced_auto_decl (decl))
14601 error ("use of %qD before deduction of %<auto%>", decl);
14604 #include "gt-cp-decl.h"