2015-07-28 Paolo Carlini <paolo.carlini@oracle.com>
[official-gcc.git] / gcc / cp / decl.c
blob52584c51f1e2f0fcbc91f0bf7ec0792b9a1013d9
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2015 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 "alias.h"
34 #include "tree.h"
35 #include "tree-hasher.h"
36 #include "stringpool.h"
37 #include "stor-layout.h"
38 #include "varasm.h"
39 #include "attribs.h"
40 #include "calls.h"
41 #include "flags.h"
42 #include "cp-tree.h"
43 #include "tree-iterator.h"
44 #include "tree-inline.h"
45 #include "decl.h"
46 #include "intl.h"
47 #include "toplev.h"
48 #include "tm_p.h"
49 #include "target.h"
50 #include "c-family/c-common.h"
51 #include "c-family/c-objc.h"
52 #include "c-family/c-pragma.h"
53 #include "c-family/c-target.h"
54 #include "c-family/c-ubsan.h"
55 #include "diagnostic.h"
56 #include "intl.h"
57 #include "debug.h"
58 #include "timevar.h"
59 #include "splay-tree.h"
60 #include "plugin.h"
61 #include "hard-reg-set.h"
62 #include "function.h"
63 #include "cgraph.h"
64 #include "cilk.h"
65 #include "builtins.h"
67 /* Possible cases of bad specifiers type used by bad_specifiers. */
68 enum bad_spec_place {
69 BSP_VAR, /* variable */
70 BSP_PARM, /* parameter */
71 BSP_TYPE, /* type */
72 BSP_FIELD /* field */
75 static tree grokparms (tree parmlist, tree *);
76 static const char *redeclaration_error_message (tree, tree);
78 static int decl_jump_unsafe (tree);
79 static void require_complete_types_for_parms (tree);
80 static int ambi_op_p (enum tree_code);
81 static int unary_op_p (enum tree_code);
82 static void push_local_name (tree);
83 static tree grok_reference_init (tree, tree, tree, int);
84 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
85 int, int, int, tree);
86 static int check_static_variable_definition (tree, tree);
87 static void record_unknown_type (tree, const char *);
88 static tree builtin_function_1 (tree, tree, bool);
89 static int member_function_or_else (tree, tree, enum overload_flags);
90 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
91 int);
92 static void check_for_uninitialized_const_var (tree);
93 static tree local_variable_p_walkfn (tree *, int *, void *);
94 static tree record_builtin_java_type (const char *, int);
95 static const char *tag_name (enum tag_types);
96 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
97 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
98 static void maybe_deduce_size_from_array_init (tree, tree);
99 static void layout_var_decl (tree);
100 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
101 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
102 static void save_function_data (tree);
103 static void copy_type_enum (tree , tree);
104 static void check_function_type (tree, tree);
105 static void finish_constructor_body (void);
106 static void begin_destructor_body (void);
107 static void finish_destructor_body (void);
108 static void record_key_method_defined (tree);
109 static tree create_array_type_for_decl (tree, tree, tree);
110 static tree get_atexit_node (void);
111 static tree get_dso_handle_node (void);
112 static tree start_cleanup_fn (void);
113 static void end_cleanup_fn (void);
114 static tree cp_make_fname_decl (location_t, tree, int);
115 static void initialize_predefined_identifiers (void);
116 static tree check_special_function_return_type
117 (special_function_kind, tree, tree);
118 static tree push_cp_library_fn (enum tree_code, tree, int);
119 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
120 static void store_parm_decls (tree);
121 static void initialize_local_var (tree, tree);
122 static void expand_static_init (tree, tree);
124 /* The following symbols are subsumed in the cp_global_trees array, and
125 listed here individually for documentation purposes.
127 C++ extensions
128 tree wchar_decl_node;
130 tree vtable_entry_type;
131 tree delta_type_node;
132 tree __t_desc_type_node;
134 tree class_type_node;
135 tree unknown_type_node;
137 Array type `vtable_entry_type[]'
139 tree vtbl_type_node;
140 tree vtbl_ptr_type_node;
142 Namespaces,
144 tree std_node;
145 tree abi_node;
147 A FUNCTION_DECL which can call `abort'. Not necessarily the
148 one that the user will declare, but sufficient to be called
149 by routines that want to abort the program.
151 tree abort_fndecl;
153 Used by RTTI
154 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
155 tree tinfo_var_id; */
157 tree cp_global_trees[CPTI_MAX];
159 /* Indicates that there is a type value in some namespace, although
160 that is not necessarily in scope at the moment. */
162 tree global_type_node;
164 /* The node that holds the "name" of the global scope. */
165 tree global_scope_name;
167 #define local_names cp_function_chain->x_local_names
169 /* A list of objects which have constructors or destructors
170 which reside in the global scope. The decl is stored in
171 the TREE_VALUE slot and the initializer is stored
172 in the TREE_PURPOSE slot. */
173 tree static_aggregates;
175 /* Like static_aggregates, but for thread_local variables. */
176 tree tls_aggregates;
178 /* -- end of C++ */
180 /* A node for the integer constant 2. */
182 tree integer_two_node;
184 /* Used only for jumps to as-yet undefined labels, since jumps to
185 defined labels can have their validity checked immediately. */
187 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
188 struct named_label_use_entry *next;
189 /* The binding level to which this entry is *currently* attached.
190 This is initially the binding level in which the goto appeared,
191 but is modified as scopes are closed. */
192 cp_binding_level *binding_level;
193 /* The head of the names list that was current when the goto appeared,
194 or the inner scope popped. These are the decls that will *not* be
195 skipped when jumping to the label. */
196 tree names_in_scope;
197 /* The location of the goto, for error reporting. */
198 location_t o_goto_locus;
199 /* True if an OpenMP structured block scope has been closed since
200 the goto appeared. This means that the branch from the label will
201 illegally exit an OpenMP scope. */
202 bool in_omp_scope;
205 /* A list of all LABEL_DECLs in the function that have names. Here so
206 we can clear out their names' definitions at the end of the
207 function, and so we can check the validity of jumps to these labels. */
209 struct GTY((for_user)) named_label_entry {
210 /* The decl itself. */
211 tree label_decl;
213 /* The binding level to which the label is *currently* attached.
214 This is initially set to the binding level in which the label
215 is defined, but is modified as scopes are closed. */
216 cp_binding_level *binding_level;
217 /* The head of the names list that was current when the label was
218 defined, or the inner scope popped. These are the decls that will
219 be skipped when jumping to the label. */
220 tree names_in_scope;
221 /* A vector of all decls from all binding levels that would be
222 crossed by a backward branch to the label. */
223 vec<tree, va_gc> *bad_decls;
225 /* A list of uses of the label, before the label is defined. */
226 struct named_label_use_entry *uses;
228 /* The following bits are set after the label is defined, and are
229 updated as scopes are popped. They indicate that a backward jump
230 to the label will illegally enter a scope of the given flavor. */
231 bool in_try_scope;
232 bool in_catch_scope;
233 bool in_omp_scope;
236 #define named_labels cp_function_chain->x_named_labels
238 /* The number of function bodies which we are currently processing.
239 (Zero if we are at namespace scope, one inside the body of a
240 function, two inside the body of a function in a local class, etc.) */
241 int function_depth;
243 /* To avoid unwanted recursion, finish_function defers all mark_used calls
244 encountered during its execution until it finishes. */
245 bool defer_mark_used_calls;
246 vec<tree, va_gc> *deferred_mark_used_calls;
248 /* States indicating how grokdeclarator() should handle declspecs marked
249 with __attribute__((deprecated)). An object declared as
250 __attribute__((deprecated)) suppresses warnings of uses of other
251 deprecated items. */
252 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
255 /* A list of VAR_DECLs whose type was incomplete at the time the
256 variable was declared. */
258 typedef struct GTY(()) incomplete_var_d {
259 tree decl;
260 tree incomplete_type;
261 } incomplete_var;
264 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
266 /* Returns the kind of template specialization we are currently
267 processing, given that it's declaration contained N_CLASS_SCOPES
268 explicit scope qualifications. */
270 tmpl_spec_kind
271 current_tmpl_spec_kind (int n_class_scopes)
273 int n_template_parm_scopes = 0;
274 int seen_specialization_p = 0;
275 int innermost_specialization_p = 0;
276 cp_binding_level *b;
278 /* Scan through the template parameter scopes. */
279 for (b = current_binding_level;
280 b->kind == sk_template_parms;
281 b = b->level_chain)
283 /* If we see a specialization scope inside a parameter scope,
284 then something is wrong. That corresponds to a declaration
285 like:
287 template <class T> template <> ...
289 which is always invalid since [temp.expl.spec] forbids the
290 specialization of a class member template if the enclosing
291 class templates are not explicitly specialized as well. */
292 if (b->explicit_spec_p)
294 if (n_template_parm_scopes == 0)
295 innermost_specialization_p = 1;
296 else
297 seen_specialization_p = 1;
299 else if (seen_specialization_p == 1)
300 return tsk_invalid_member_spec;
302 ++n_template_parm_scopes;
305 /* Handle explicit instantiations. */
306 if (processing_explicit_instantiation)
308 if (n_template_parm_scopes != 0)
309 /* We've seen a template parameter list during an explicit
310 instantiation. For example:
312 template <class T> template void f(int);
314 This is erroneous. */
315 return tsk_invalid_expl_inst;
316 else
317 return tsk_expl_inst;
320 if (n_template_parm_scopes < n_class_scopes)
321 /* We've not seen enough template headers to match all the
322 specialized classes present. For example:
324 template <class T> void R<T>::S<T>::f(int);
326 This is invalid; there needs to be one set of template
327 parameters for each class. */
328 return tsk_insufficient_parms;
329 else if (n_template_parm_scopes == n_class_scopes)
330 /* We're processing a non-template declaration (even though it may
331 be a member of a template class.) For example:
333 template <class T> void S<T>::f(int);
335 The `class T' matches the `S<T>', leaving no template headers
336 corresponding to the `f'. */
337 return tsk_none;
338 else if (n_template_parm_scopes > n_class_scopes + 1)
339 /* We've got too many template headers. For example:
341 template <> template <class T> void f (T);
343 There need to be more enclosing classes. */
344 return tsk_excessive_parms;
345 else
346 /* This must be a template. It's of the form:
348 template <class T> template <class U> void S<T>::f(U);
350 This is a specialization if the innermost level was a
351 specialization; otherwise it's just a definition of the
352 template. */
353 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
356 /* Exit the current scope. */
358 void
359 finish_scope (void)
361 poplevel (0, 0, 0);
364 /* When a label goes out of scope, check to see if that label was used
365 in a valid manner, and issue any appropriate warnings or errors. */
367 static void
368 pop_label (tree label, tree old_value)
370 if (!processing_template_decl)
372 if (DECL_INITIAL (label) == NULL_TREE)
374 location_t location;
376 error ("label %q+D used but not defined", label);
377 location = input_location;
378 /* FIXME want (LOCATION_FILE (input_location), (line)0) */
379 /* Avoid crashing later. */
380 define_label (location, DECL_NAME (label));
382 else
383 warn_for_unused_label (label);
386 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
389 /* At the end of a function, all labels declared within the function
390 go out of scope. BLOCK is the top-level block for the
391 function. */
394 pop_labels_1 (named_label_entry **slot, tree block)
396 struct named_label_entry *ent = *slot;
398 pop_label (ent->label_decl, NULL_TREE);
400 /* Put the labels into the "variables" of the top-level block,
401 so debugger can see them. */
402 DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
403 BLOCK_VARS (block) = ent->label_decl;
405 named_labels->clear_slot (slot);
407 return 1;
410 static void
411 pop_labels (tree block)
413 if (named_labels)
415 named_labels->traverse<tree, pop_labels_1> (block);
416 named_labels = NULL;
420 /* At the end of a block with local labels, restore the outer definition. */
422 static void
423 pop_local_label (tree label, tree old_value)
425 struct named_label_entry dummy;
427 pop_label (label, old_value);
429 dummy.label_decl = label;
430 named_label_entry **slot = named_labels->find_slot (&dummy, NO_INSERT);
431 named_labels->clear_slot (slot);
434 /* The following two routines are used to interface to Objective-C++.
435 The binding level is purposely treated as an opaque type. */
437 void *
438 objc_get_current_scope (void)
440 return current_binding_level;
443 /* The following routine is used by the NeXT-style SJLJ exceptions;
444 variables get marked 'volatile' so as to not be clobbered by
445 _setjmp()/_longjmp() calls. All variables in the current scope,
446 as well as parent scopes up to (but not including) ENCLOSING_BLK
447 shall be thusly marked. */
449 void
450 objc_mark_locals_volatile (void *enclosing_blk)
452 cp_binding_level *scope;
454 for (scope = current_binding_level;
455 scope && scope != enclosing_blk;
456 scope = scope->level_chain)
458 tree decl;
460 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
461 objc_volatilize_decl (decl);
463 /* Do not climb up past the current function. */
464 if (scope->kind == sk_function_parms)
465 break;
469 /* Update data for defined and undefined labels when leaving a scope. */
472 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
474 named_label_entry *ent = *slot;
475 cp_binding_level *obl = bl->level_chain;
477 if (ent->binding_level == bl)
479 tree decl;
481 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
482 TREE_LISTs representing OVERLOADs, so be careful. */
483 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
484 ? DECL_CHAIN (decl)
485 : TREE_CHAIN (decl)))
486 if (decl_jump_unsafe (decl))
487 vec_safe_push (ent->bad_decls, decl);
489 ent->binding_level = obl;
490 ent->names_in_scope = obl->names;
491 switch (bl->kind)
493 case sk_try:
494 ent->in_try_scope = true;
495 break;
496 case sk_catch:
497 ent->in_catch_scope = true;
498 break;
499 case sk_omp:
500 ent->in_omp_scope = true;
501 break;
502 default:
503 break;
506 else if (ent->uses)
508 struct named_label_use_entry *use;
510 for (use = ent->uses; use ; use = use->next)
511 if (use->binding_level == bl)
513 use->binding_level = obl;
514 use->names_in_scope = obl->names;
515 if (bl->kind == sk_omp)
516 use->in_omp_scope = true;
520 return 1;
523 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
524 when errors were reported, except for -Werror-unused-but-set-*. */
525 static int unused_but_set_errorcount;
527 /* Exit a binding level.
528 Pop the level off, and restore the state of the identifier-decl mappings
529 that were in effect when this level was entered.
531 If KEEP == 1, this level had explicit declarations, so
532 and create a "block" (a BLOCK node) for the level
533 to record its declarations and subblocks for symbol table output.
535 If FUNCTIONBODY is nonzero, this level is the body of a function,
536 so create a block as if KEEP were set and also clear out all
537 label names.
539 If REVERSE is nonzero, reverse the order of decls before putting
540 them into the BLOCK. */
542 tree
543 poplevel (int keep, int reverse, int functionbody)
545 tree link;
546 /* The chain of decls was accumulated in reverse order.
547 Put it into forward order, just for cleanliness. */
548 tree decls;
549 tree subblocks;
550 tree block;
551 tree decl;
552 int leaving_for_scope;
553 scope_kind kind;
554 unsigned ix;
555 cp_label_binding *label_bind;
557 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
558 restart:
560 block = NULL_TREE;
562 gcc_assert (current_binding_level->kind != sk_class);
564 if (current_binding_level->kind == sk_cleanup)
565 functionbody = 0;
566 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
568 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
570 /* We used to use KEEP == 2 to indicate that the new block should go
571 at the beginning of the list of blocks at this binding level,
572 rather than the end. This hack is no longer used. */
573 gcc_assert (keep == 0 || keep == 1);
575 if (current_binding_level->keep)
576 keep = 1;
578 /* Any uses of undefined labels, and any defined labels, now operate
579 under constraints of next binding contour. */
580 if (cfun && !functionbody && named_labels)
581 named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
582 (current_binding_level);
584 /* Get the decls in the order they were written.
585 Usually current_binding_level->names is in reverse order.
586 But parameter decls were previously put in forward order. */
588 if (reverse)
589 current_binding_level->names
590 = decls = nreverse (current_binding_level->names);
591 else
592 decls = current_binding_level->names;
594 /* If there were any declarations or structure tags in that level,
595 or if this level is a function body,
596 create a BLOCK to record them for the life of this function. */
597 block = NULL_TREE;
598 /* Avoid function body block if possible. */
599 if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
600 keep = 0;
601 else if (keep == 1 || functionbody)
602 block = make_node (BLOCK);
603 if (block != NULL_TREE)
605 BLOCK_VARS (block) = decls;
606 BLOCK_SUBBLOCKS (block) = subblocks;
609 /* In each subblock, record that this is its superior. */
610 if (keep >= 0)
611 for (link = subblocks; link; link = BLOCK_CHAIN (link))
612 BLOCK_SUPERCONTEXT (link) = block;
614 /* We still support the old for-scope rules, whereby the variables
615 in a for-init statement were in scope after the for-statement
616 ended. We only use the new rules if flag_new_for_scope is
617 nonzero. */
618 leaving_for_scope
619 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
621 /* Before we remove the declarations first check for unused variables. */
622 if ((warn_unused_variable || warn_unused_but_set_variable)
623 && current_binding_level->kind != sk_template_parms
624 && !processing_template_decl)
625 for (tree d = getdecls (); d; d = TREE_CHAIN (d))
627 /* There are cases where D itself is a TREE_LIST. See in
628 push_local_binding where the list of decls returned by
629 getdecls is built. */
630 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
631 tree type = TREE_TYPE (decl);
632 if (VAR_P (decl)
633 && (! TREE_USED (decl) || !DECL_READ_P (decl))
634 && ! DECL_IN_SYSTEM_HEADER (decl)
635 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
636 && type != error_mark_node
637 && (!CLASS_TYPE_P (type)
638 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
639 || lookup_attribute ("warn_unused",
640 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
642 if (! TREE_USED (decl))
643 warning_at (DECL_SOURCE_LOCATION (decl),
644 OPT_Wunused_variable, "unused variable %qD", decl);
645 else if (DECL_CONTEXT (decl) == current_function_decl
646 // For -Wunused-but-set-variable leave references alone.
647 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
648 && errorcount == unused_but_set_errorcount)
650 warning_at (DECL_SOURCE_LOCATION (decl),
651 OPT_Wunused_but_set_variable,
652 "variable %qD set but not used", decl);
653 unused_but_set_errorcount = errorcount;
658 /* Remove declarations for all the DECLs in this level. */
659 for (link = decls; link; link = TREE_CHAIN (link))
661 if (leaving_for_scope && VAR_P (link)
662 /* It's hard to make this ARM compatibility hack play nicely with
663 lambdas, and it really isn't necessary in C++11 mode. */
664 && cxx_dialect < cxx11
665 && DECL_NAME (link))
667 tree name = DECL_NAME (link);
668 cxx_binding *ob;
669 tree ns_binding;
671 ob = outer_binding (name,
672 IDENTIFIER_BINDING (name),
673 /*class_p=*/true);
674 if (!ob)
675 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
676 else
677 ns_binding = NULL_TREE;
679 if (ob && ob->scope == current_binding_level->level_chain)
680 /* We have something like:
682 int i;
683 for (int i; ;);
685 and we are leaving the `for' scope. There's no reason to
686 keep the binding of the inner `i' in this case. */
687 pop_binding (name, link);
688 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
689 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
690 /* Here, we have something like:
692 typedef int I;
694 void f () {
695 for (int I; ;);
698 We must pop the for-scope binding so we know what's a
699 type and what isn't. */
700 pop_binding (name, link);
701 else
703 /* Mark this VAR_DECL as dead so that we can tell we left it
704 there only for backward compatibility. */
705 DECL_DEAD_FOR_LOCAL (link) = 1;
707 /* Keep track of what should have happened when we
708 popped the binding. */
709 if (ob && ob->value)
711 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
712 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
715 /* Add it to the list of dead variables in the next
716 outermost binding to that we can remove these when we
717 leave that binding. */
718 vec_safe_push (
719 current_binding_level->level_chain->dead_vars_from_for,
720 link);
722 /* Although we don't pop the cxx_binding, we do clear
723 its SCOPE since the scope is going away now. */
724 IDENTIFIER_BINDING (name)->scope
725 = current_binding_level->level_chain;
728 else
730 tree name;
732 /* Remove the binding. */
733 decl = link;
735 if (TREE_CODE (decl) == TREE_LIST)
736 decl = TREE_VALUE (decl);
737 name = decl;
739 if (TREE_CODE (name) == OVERLOAD)
740 name = OVL_FUNCTION (name);
742 gcc_assert (DECL_P (name));
743 pop_binding (DECL_NAME (name), decl);
747 /* Remove declarations for any `for' variables from inner scopes
748 that we kept around. */
749 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
750 ix, decl)
751 pop_binding (DECL_NAME (decl), decl);
753 /* Restore the IDENTIFIER_TYPE_VALUEs. */
754 for (link = current_binding_level->type_shadowed;
755 link; link = TREE_CHAIN (link))
756 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
758 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
759 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->shadowed_labels,
760 ix, label_bind)
761 pop_local_label (label_bind->label, label_bind->prev_value);
763 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
764 list if a `using' declaration put them there. The debugging
765 back ends won't understand OVERLOAD, so we remove them here.
766 Because the BLOCK_VARS are (temporarily) shared with
767 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
768 popped all the bindings. */
769 if (block)
771 tree* d;
773 for (d = &BLOCK_VARS (block); *d; )
775 if (TREE_CODE (*d) == TREE_LIST)
776 *d = TREE_CHAIN (*d);
777 else
778 d = &DECL_CHAIN (*d);
782 /* If the level being exited is the top level of a function,
783 check over all the labels. */
784 if (functionbody)
786 if (block)
788 /* Since this is the top level block of a function, the vars are
789 the function's parameters. Don't leave them in the BLOCK
790 because they are found in the FUNCTION_DECL instead. */
791 BLOCK_VARS (block) = 0;
792 pop_labels (block);
794 else
795 pop_labels (subblocks);
798 kind = current_binding_level->kind;
799 if (kind == sk_cleanup)
801 tree stmt;
803 /* If this is a temporary binding created for a cleanup, then we'll
804 have pushed a statement list level. Pop that, create a new
805 BIND_EXPR for the block, and insert it into the stream. */
806 stmt = pop_stmt_list (current_binding_level->statement_list);
807 stmt = c_build_bind_expr (input_location, block, stmt);
808 add_stmt (stmt);
811 leave_scope ();
812 if (functionbody)
814 /* The current function is being defined, so its DECL_INITIAL
815 should be error_mark_node. */
816 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
817 DECL_INITIAL (current_function_decl) = block ? block : subblocks;
818 if (subblocks)
820 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
822 if (BLOCK_SUBBLOCKS (subblocks))
823 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
825 else
826 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
829 else if (block)
830 current_binding_level->blocks
831 = block_chainon (current_binding_level->blocks, block);
833 /* If we did not make a block for the level just exited,
834 any blocks made for inner levels
835 (since they cannot be recorded as subblocks in that level)
836 must be carried forward so they will later become subblocks
837 of something else. */
838 else if (subblocks)
839 current_binding_level->blocks
840 = block_chainon (current_binding_level->blocks, subblocks);
842 /* Each and every BLOCK node created here in `poplevel' is important
843 (e.g. for proper debugging information) so if we created one
844 earlier, mark it as "used". */
845 if (block)
846 TREE_USED (block) = 1;
848 /* All temporary bindings created for cleanups are popped silently. */
849 if (kind == sk_cleanup)
850 goto restart;
852 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
853 return block;
856 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
857 itself, calling F for each. The DATA is passed to F as well. */
859 static int
860 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
862 int result = 0;
863 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
865 result |= (*f) (name_space, data);
867 for (; current; current = DECL_CHAIN (current))
868 result |= walk_namespaces_r (current, f, data);
870 return result;
873 /* Walk all the namespaces, calling F for each. The DATA is passed to
874 F as well. */
877 walk_namespaces (walk_namespaces_fn f, void* data)
879 return walk_namespaces_r (global_namespace, f, data);
882 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
885 wrapup_globals_for_namespace (tree name_space, void* data ATTRIBUTE_UNUSED)
887 cp_binding_level *level = NAMESPACE_LEVEL (name_space);
888 vec<tree, va_gc> *statics = level->static_decls;
889 tree *vec = statics->address ();
890 int len = statics->length ();
892 /* Write out any globals that need to be output. */
893 return wrapup_global_declarations (vec, len);
896 /* In C++, you don't have to write `struct S' to refer to `S'; you
897 can just use `S'. We accomplish this by creating a TYPE_DECL as
898 if the user had written `typedef struct S S'. Create and return
899 the TYPE_DECL for TYPE. */
901 tree
902 create_implicit_typedef (tree name, tree type)
904 tree decl;
906 decl = build_decl (input_location, TYPE_DECL, name, type);
907 DECL_ARTIFICIAL (decl) = 1;
908 /* There are other implicit type declarations, like the one *within*
909 a class that allows you to write `S::S'. We must distinguish
910 amongst these. */
911 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
912 TYPE_NAME (type) = decl;
913 TYPE_STUB_DECL (type) = decl;
915 return decl;
918 /* Remember a local name for name-mangling purposes. */
920 static void
921 push_local_name (tree decl)
923 size_t i, nelts;
924 tree t, name;
926 timevar_start (TV_NAME_LOOKUP);
928 name = DECL_NAME (decl);
930 nelts = vec_safe_length (local_names);
931 for (i = 0; i < nelts; i++)
933 t = (*local_names)[i];
934 if (DECL_NAME (t) == name)
936 if (!DECL_LANG_SPECIFIC (decl))
937 retrofit_lang_decl (decl);
938 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
939 if (DECL_DISCRIMINATOR_SET_P (t))
940 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
941 else
942 DECL_DISCRIMINATOR (decl) = 1;
944 (*local_names)[i] = decl;
945 timevar_stop (TV_NAME_LOOKUP);
946 return;
950 vec_safe_push (local_names, decl);
951 timevar_stop (TV_NAME_LOOKUP);
954 /* Subroutine of duplicate_decls: return truthvalue of whether
955 or not types of these decls match.
957 For C++, we must compare the parameter list so that `int' can match
958 `int&' in a parameter position, but `int&' is not confused with
959 `const int&'. */
962 decls_match (tree newdecl, tree olddecl)
964 int types_match;
966 if (newdecl == olddecl)
967 return 1;
969 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
970 /* If the two DECLs are not even the same kind of thing, we're not
971 interested in their types. */
972 return 0;
974 gcc_assert (DECL_P (newdecl));
976 if (TREE_CODE (newdecl) == FUNCTION_DECL)
978 tree f1 = TREE_TYPE (newdecl);
979 tree f2 = TREE_TYPE (olddecl);
980 tree p1 = TYPE_ARG_TYPES (f1);
981 tree p2 = TYPE_ARG_TYPES (f2);
982 tree r2;
984 /* Specializations of different templates are different functions
985 even if they have the same type. */
986 tree t1 = (DECL_USE_TEMPLATE (newdecl)
987 ? DECL_TI_TEMPLATE (newdecl)
988 : NULL_TREE);
989 tree t2 = (DECL_USE_TEMPLATE (olddecl)
990 ? DECL_TI_TEMPLATE (olddecl)
991 : NULL_TREE);
992 if (t1 != t2)
993 return 0;
995 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
996 && ! (DECL_EXTERN_C_P (newdecl)
997 && DECL_EXTERN_C_P (olddecl)))
998 return 0;
1000 /* A new declaration doesn't match a built-in one unless it
1001 is also extern "C". */
1002 if (DECL_IS_BUILTIN (olddecl)
1003 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1004 return 0;
1006 if (TREE_CODE (f1) != TREE_CODE (f2))
1007 return 0;
1009 /* A declaration with deduced return type should use its pre-deduction
1010 type for declaration matching. */
1011 r2 = fndecl_declared_return_type (olddecl);
1013 if (same_type_p (TREE_TYPE (f1), r2))
1015 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1016 && (DECL_BUILT_IN (olddecl)
1017 #ifndef NO_IMPLICIT_EXTERN_C
1018 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1019 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1020 #endif
1023 types_match = self_promoting_args_p (p1);
1024 if (p1 == void_list_node)
1025 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1027 #ifndef NO_IMPLICIT_EXTERN_C
1028 else if (!prototype_p (f1)
1029 && (DECL_EXTERN_C_P (olddecl)
1030 && DECL_IN_SYSTEM_HEADER (olddecl)
1031 && !DECL_CLASS_SCOPE_P (olddecl))
1032 && (DECL_EXTERN_C_P (newdecl)
1033 && DECL_IN_SYSTEM_HEADER (newdecl)
1034 && !DECL_CLASS_SCOPE_P (newdecl)))
1036 types_match = self_promoting_args_p (p2);
1037 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1039 #endif
1040 else
1041 types_match =
1042 compparms (p1, p2)
1043 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1044 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1045 || comp_type_attributes (TREE_TYPE (newdecl),
1046 TREE_TYPE (olddecl)) != 0);
1048 else
1049 types_match = 0;
1051 /* The decls dont match if they correspond to two different versions
1052 of the same function. Disallow extern "C" functions to be
1053 versions for now. */
1054 if (types_match
1055 && !DECL_EXTERN_C_P (newdecl)
1056 && !DECL_EXTERN_C_P (olddecl)
1057 && targetm.target_option.function_versions (newdecl, olddecl))
1059 /* Mark functions as versions if necessary. Modify the mangled decl
1060 name if necessary. */
1061 if (DECL_FUNCTION_VERSIONED (newdecl)
1062 && DECL_FUNCTION_VERSIONED (olddecl))
1063 return 0;
1064 if (!DECL_FUNCTION_VERSIONED (newdecl))
1066 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1067 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1068 mangle_decl (newdecl);
1070 if (!DECL_FUNCTION_VERSIONED (olddecl))
1072 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1073 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1074 mangle_decl (olddecl);
1076 cgraph_node::record_function_versions (olddecl, newdecl);
1077 return 0;
1080 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1082 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1083 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1084 return 0;
1086 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1087 DECL_TEMPLATE_PARMS (olddecl)))
1088 return 0;
1090 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1091 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1092 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1093 else
1094 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1095 DECL_TEMPLATE_RESULT (newdecl));
1097 else
1099 /* Need to check scope for variable declaration (VAR_DECL).
1100 For typedef (TYPE_DECL), scope is ignored. */
1101 if (VAR_P (newdecl)
1102 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1103 /* [dcl.link]
1104 Two declarations for an object with C language linkage
1105 with the same name (ignoring the namespace that qualify
1106 it) that appear in different namespace scopes refer to
1107 the same object. */
1108 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1109 return 0;
1111 if (TREE_TYPE (newdecl) == error_mark_node)
1112 types_match = TREE_TYPE (olddecl) == error_mark_node;
1113 else if (TREE_TYPE (olddecl) == NULL_TREE)
1114 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1115 else if (TREE_TYPE (newdecl) == NULL_TREE)
1116 types_match = 0;
1117 else
1118 types_match = comptypes (TREE_TYPE (newdecl),
1119 TREE_TYPE (olddecl),
1120 COMPARE_REDECLARATION);
1123 return types_match;
1126 /* If NEWDECL is `static' and an `extern' was seen previously,
1127 warn about it. OLDDECL is the previous declaration.
1129 Note that this does not apply to the C++ case of declaring
1130 a variable `extern const' and then later `const'.
1132 Don't complain about built-in functions, since they are beyond
1133 the user's control. */
1135 void
1136 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1138 if (TREE_CODE (newdecl) == TYPE_DECL
1139 || TREE_CODE (newdecl) == TEMPLATE_DECL
1140 || TREE_CODE (newdecl) == CONST_DECL
1141 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1142 return;
1144 /* Don't get confused by static member functions; that's a different
1145 use of `static'. */
1146 if (TREE_CODE (newdecl) == FUNCTION_DECL
1147 && DECL_STATIC_FUNCTION_P (newdecl))
1148 return;
1150 /* If the old declaration was `static', or the new one isn't, then
1151 everything is OK. */
1152 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1153 return;
1155 /* It's OK to declare a builtin function as `static'. */
1156 if (TREE_CODE (olddecl) == FUNCTION_DECL
1157 && DECL_ARTIFICIAL (olddecl))
1158 return;
1160 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1161 "%qD was declared %<extern%> and later %<static%>", newdecl))
1162 inform (DECL_SOURCE_LOCATION (olddecl),
1163 "previous declaration of %qD", olddecl);
1166 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1167 function templates. If their exception specifications do not
1168 match, issue a diagnostic. */
1170 static void
1171 check_redeclaration_exception_specification (tree new_decl,
1172 tree old_decl)
1174 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1175 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1177 /* Two default specs are equivalent, don't force evaluation. */
1178 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1179 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1180 return;
1182 maybe_instantiate_noexcept (new_decl);
1183 maybe_instantiate_noexcept (old_decl);
1184 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1185 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1187 /* [except.spec]
1189 If any declaration of a function has an exception-specification,
1190 all declarations, including the definition and an explicit
1191 specialization, of that function shall have an
1192 exception-specification with the same set of type-ids. */
1193 if (! DECL_IS_BUILTIN (old_decl)
1194 && flag_exceptions
1195 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1197 const char *msg
1198 = "declaration of %q+F has a different exception specifier";
1199 bool complained = true;
1200 if (! DECL_IN_SYSTEM_HEADER (old_decl))
1201 error (msg, new_decl);
1202 else
1203 complained = pedwarn (0, OPT_Wsystem_headers, msg, new_decl);
1204 if (complained)
1205 inform (0, "from previous declaration %q+F", old_decl);
1209 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1210 Otherwise issue diagnostics. */
1212 static bool
1213 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1215 old_decl = STRIP_TEMPLATE (old_decl);
1216 new_decl = STRIP_TEMPLATE (new_decl);
1217 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1218 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1219 return true;
1220 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1221 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1222 return true;
1223 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1225 if (DECL_BUILT_IN (old_decl))
1227 /* Hide a built-in declaration. */
1228 DECL_DECLARED_CONSTEXPR_P (old_decl)
1229 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1230 return true;
1232 /* 7.1.5 [dcl.constexpr]
1233 Note: An explicit specialization can differ from the template
1234 declaration with respect to the constexpr specifier. */
1235 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1236 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1237 return true;
1239 error ("redeclaration %q+D differs in %<constexpr%>", new_decl);
1240 error ("from previous declaration %q+D", old_decl);
1241 return false;
1243 return true;
1246 /* DECL is a redeclaration of a function or function template. If
1247 it does have default arguments issue a diagnostic. Note: this
1248 function is used to enforce the requirements in C++11 8.3.6 about
1249 no default arguments in redeclarations. */
1251 static void
1252 check_redeclaration_no_default_args (tree decl)
1254 gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1256 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1257 t && t != void_list_node; t = TREE_CHAIN (t))
1258 if (TREE_PURPOSE (t))
1260 permerror (DECL_SOURCE_LOCATION (decl),
1261 "redeclaration of %q#D may not have default "
1262 "arguments", decl);
1263 return;
1267 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1268 && lookup_attribute ("gnu_inline", \
1269 DECL_ATTRIBUTES (fn)))
1271 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1272 If the redeclaration is invalid, a diagnostic is issued, and the
1273 error_mark_node is returned. Otherwise, OLDDECL is returned.
1275 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1276 returned.
1278 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1280 tree
1281 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1283 unsigned olddecl_uid = DECL_UID (olddecl);
1284 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1285 int new_defines_function = 0;
1286 tree new_template_info;
1288 if (newdecl == olddecl)
1289 return olddecl;
1291 types_match = decls_match (newdecl, olddecl);
1293 /* If either the type of the new decl or the type of the old decl is an
1294 error_mark_node, then that implies that we have already issued an
1295 error (earlier) for some bogus type specification, and in that case,
1296 it is rather pointless to harass the user with yet more error message
1297 about the same declaration, so just pretend the types match here. */
1298 if (TREE_TYPE (newdecl) == error_mark_node
1299 || TREE_TYPE (olddecl) == error_mark_node)
1300 return error_mark_node;
1302 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1303 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1305 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1306 && TREE_CODE (olddecl) != TEMPLATE_DECL
1307 && check_raw_literal_operator (olddecl))
1308 error ("literal operator template %q+D conflicts with"
1309 " raw literal operator %qD", newdecl, olddecl);
1310 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1311 && TREE_CODE (olddecl) == TEMPLATE_DECL
1312 && check_raw_literal_operator (newdecl))
1313 error ("raw literal operator %q+D conflicts with"
1314 " literal operator template %qD", newdecl, olddecl);
1317 if (DECL_P (olddecl)
1318 && TREE_CODE (newdecl) == FUNCTION_DECL
1319 && TREE_CODE (olddecl) == FUNCTION_DECL
1320 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1322 if (DECL_DECLARED_INLINE_P (newdecl)
1323 && DECL_UNINLINABLE (newdecl)
1324 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1325 /* Already warned elsewhere. */;
1326 else if (DECL_DECLARED_INLINE_P (olddecl)
1327 && DECL_UNINLINABLE (olddecl)
1328 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1329 /* Already warned. */;
1330 else if (DECL_DECLARED_INLINE_P (newdecl)
1331 && DECL_UNINLINABLE (olddecl)
1332 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1334 if (warning_at (DECL_SOURCE_LOCATION (newdecl),
1335 OPT_Wattributes, "function %qD redeclared as inline",
1336 newdecl))
1337 inform (DECL_SOURCE_LOCATION (olddecl),
1338 "previous declaration of %qD with attribute noinline",
1339 olddecl);
1341 else if (DECL_DECLARED_INLINE_P (olddecl)
1342 && DECL_UNINLINABLE (newdecl)
1343 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1345 if (warning_at (DECL_SOURCE_LOCATION (newdecl),
1346 OPT_Wattributes, "function %qD redeclared with "
1347 "attribute noinline", newdecl))
1348 inform (DECL_SOURCE_LOCATION (olddecl),
1349 "previous declaration of %qD was inline",
1350 olddecl);
1354 /* Check for redeclaration and other discrepancies. */
1355 if (TREE_CODE (olddecl) == FUNCTION_DECL
1356 && DECL_ARTIFICIAL (olddecl))
1358 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1359 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1361 /* Avoid warnings redeclaring built-ins which have not been
1362 explicitly declared. */
1363 if (DECL_ANTICIPATED (olddecl))
1364 return NULL_TREE;
1366 /* If you declare a built-in or predefined function name as static,
1367 the old definition is overridden, but optionally warn this was a
1368 bad choice of name. */
1369 if (! TREE_PUBLIC (newdecl))
1371 warning (OPT_Wshadow,
1372 DECL_BUILT_IN (olddecl)
1373 ? G_("shadowing built-in function %q#D")
1374 : G_("shadowing library function %q#D"), olddecl);
1375 /* Discard the old built-in function. */
1376 return NULL_TREE;
1378 /* If the built-in is not ansi, then programs can override
1379 it even globally without an error. */
1380 else if (! DECL_BUILT_IN (olddecl))
1381 warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1382 "library function %q#D redeclared as non-function %q#D",
1383 olddecl, newdecl);
1384 else
1385 error ("declaration of %q+#D conflicts with built-in "
1386 "declaration %q#D", newdecl, olddecl);
1387 return NULL_TREE;
1389 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1391 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1392 error_at (DECL_SOURCE_LOCATION (newdecl),
1393 "redeclaration of %<pragma omp declare reduction%>");
1394 inform (DECL_SOURCE_LOCATION (olddecl),
1395 "previous %<pragma omp declare reduction%> declaration");
1396 return error_mark_node;
1398 else if (!types_match)
1400 /* Avoid warnings redeclaring built-ins which have not been
1401 explicitly declared. */
1402 if (DECL_ANTICIPATED (olddecl))
1404 /* Deal with fileptr_type_node. FILE type is not known
1405 at the time we create the builtins. */
1406 tree t1, t2;
1408 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1409 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1410 t1 || t2;
1411 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1412 if (!t1 || !t2)
1413 break;
1414 else if (TREE_VALUE (t2) == fileptr_type_node)
1416 tree t = TREE_VALUE (t1);
1418 if (TYPE_PTR_P (t)
1419 && TYPE_IDENTIFIER (TREE_TYPE (t))
1420 == get_identifier ("FILE")
1421 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1423 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1425 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1426 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1427 types_match = decls_match (newdecl, olddecl);
1428 if (types_match)
1429 return duplicate_decls (newdecl, olddecl,
1430 newdecl_is_friend);
1431 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1434 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1435 break;
1437 else if ((DECL_EXTERN_C_P (newdecl)
1438 && DECL_EXTERN_C_P (olddecl))
1439 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1440 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1442 /* A near match; override the builtin. */
1444 if (TREE_PUBLIC (newdecl))
1445 warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1446 "new declaration %q#D ambiguates built-in "
1447 "declaration %q#D", newdecl, olddecl);
1448 else
1449 warning (OPT_Wshadow,
1450 DECL_BUILT_IN (olddecl)
1451 ? G_("shadowing built-in function %q#D")
1452 : G_("shadowing library function %q#D"), olddecl);
1454 else
1455 /* Discard the old built-in function. */
1456 return NULL_TREE;
1458 /* Replace the old RTL to avoid problems with inlining. */
1459 COPY_DECL_RTL (newdecl, olddecl);
1461 /* Even if the types match, prefer the new declarations type for
1462 built-ins which have not been explicitly declared, for
1463 exception lists, etc... */
1464 else if (DECL_IS_BUILTIN (olddecl))
1466 tree type = TREE_TYPE (newdecl);
1467 tree attribs = (*targetm.merge_type_attributes)
1468 (TREE_TYPE (olddecl), type);
1470 type = cp_build_type_attribute_variant (type, attribs);
1471 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1474 /* If a function is explicitly declared "throw ()", propagate that to
1475 the corresponding builtin. */
1476 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1477 && DECL_ANTICIPATED (olddecl)
1478 && TREE_NOTHROW (newdecl)
1479 && !TREE_NOTHROW (olddecl))
1481 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1482 tree tmpdecl = builtin_decl_explicit (fncode);
1483 if (tmpdecl && tmpdecl != olddecl && types_match)
1484 TREE_NOTHROW (tmpdecl) = 1;
1487 /* Whether or not the builtin can throw exceptions has no
1488 bearing on this declarator. */
1489 TREE_NOTHROW (olddecl) = 0;
1491 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1493 /* If a builtin function is redeclared as `static', merge
1494 the declarations, but make the original one static. */
1495 DECL_THIS_STATIC (olddecl) = 1;
1496 TREE_PUBLIC (olddecl) = 0;
1498 /* Make the old declaration consistent with the new one so
1499 that all remnants of the builtin-ness of this function
1500 will be banished. */
1501 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1502 COPY_DECL_RTL (newdecl, olddecl);
1505 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1507 /* C++ Standard, 3.3, clause 4:
1508 "[Note: a namespace name or a class template name must be unique
1509 in its declarative region (7.3.2, clause 14). ]" */
1510 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1511 && TREE_CODE (newdecl) != NAMESPACE_DECL
1512 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1513 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1514 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1515 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1517 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1518 && TREE_CODE (newdecl) != TYPE_DECL)
1519 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1520 && TREE_CODE (olddecl) != TYPE_DECL))
1522 /* We do nothing special here, because C++ does such nasty
1523 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1524 get shadowed, and know that if we need to find a TYPE_DECL
1525 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1526 slot of the identifier. */
1527 return NULL_TREE;
1530 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1531 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1532 || (TREE_CODE (olddecl) == FUNCTION_DECL
1533 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1534 return NULL_TREE;
1537 error ("%q#D redeclared as different kind of symbol", newdecl);
1538 if (TREE_CODE (olddecl) == TREE_LIST)
1539 olddecl = TREE_VALUE (olddecl);
1540 inform (DECL_SOURCE_LOCATION (olddecl),
1541 "previous declaration %q#D", olddecl);
1543 return error_mark_node;
1545 else if (!types_match)
1547 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1548 /* These are certainly not duplicate declarations; they're
1549 from different scopes. */
1550 return NULL_TREE;
1552 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1554 /* The name of a class template may not be declared to refer to
1555 any other template, class, function, object, namespace, value,
1556 or type in the same scope. */
1557 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1558 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1560 error ("conflicting declaration of template %q+#D", newdecl);
1561 inform (DECL_SOURCE_LOCATION (olddecl),
1562 "previous declaration %q#D", olddecl);
1563 return error_mark_node;
1565 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1566 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1567 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1568 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1569 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1570 DECL_TEMPLATE_PARMS (olddecl))
1571 /* Template functions can be disambiguated by
1572 return type. */
1573 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1574 TREE_TYPE (TREE_TYPE (olddecl))))
1576 error ("ambiguating new declaration %q+#D", newdecl);
1577 inform (DECL_SOURCE_LOCATION (olddecl),
1578 "old declaration %q#D", olddecl);
1580 return NULL_TREE;
1582 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1584 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1586 error ("conflicting declaration of C function %q+#D",
1587 newdecl);
1588 inform (DECL_SOURCE_LOCATION (olddecl),
1589 "previous declaration %q#D", olddecl);
1590 return NULL_TREE;
1592 /* For function versions, params and types match, but they
1593 are not ambiguous. */
1594 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1595 && !DECL_FUNCTION_VERSIONED (olddecl))
1596 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1597 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1599 error ("ambiguating new declaration of %q+#D", newdecl);
1600 inform (DECL_SOURCE_LOCATION (olddecl),
1601 "old declaration %q#D", olddecl);
1602 return error_mark_node;
1604 else
1605 return NULL_TREE;
1607 else
1609 error ("conflicting declaration %q+#D", newdecl);
1610 inform (DECL_SOURCE_LOCATION (olddecl),
1611 "previous declaration as %q#D", olddecl);
1612 return error_mark_node;
1615 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1616 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1617 && (!DECL_TEMPLATE_INFO (newdecl)
1618 || (DECL_TI_TEMPLATE (newdecl)
1619 != DECL_TI_TEMPLATE (olddecl))))
1620 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1621 && (!DECL_TEMPLATE_INFO (olddecl)
1622 || (DECL_TI_TEMPLATE (olddecl)
1623 != DECL_TI_TEMPLATE (newdecl))))))
1624 /* It's OK to have a template specialization and a non-template
1625 with the same type, or to have specializations of two
1626 different templates with the same type. Note that if one is a
1627 specialization, and the other is an instantiation of the same
1628 template, that we do not exit at this point. That situation
1629 can occur if we instantiate a template class, and then
1630 specialize one of its methods. This situation is valid, but
1631 the declarations must be merged in the usual way. */
1632 return NULL_TREE;
1633 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1634 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1635 && !DECL_USE_TEMPLATE (newdecl))
1636 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1637 && !DECL_USE_TEMPLATE (olddecl))))
1638 /* One of the declarations is a template instantiation, and the
1639 other is not a template at all. That's OK. */
1640 return NULL_TREE;
1641 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1643 /* In [namespace.alias] we have:
1645 In a declarative region, a namespace-alias-definition can be
1646 used to redefine a namespace-alias declared in that declarative
1647 region to refer only to the namespace to which it already
1648 refers.
1650 Therefore, if we encounter a second alias directive for the same
1651 alias, we can just ignore the second directive. */
1652 if (DECL_NAMESPACE_ALIAS (newdecl)
1653 && (DECL_NAMESPACE_ALIAS (newdecl)
1654 == DECL_NAMESPACE_ALIAS (olddecl)))
1655 return olddecl;
1656 /* [namespace.alias]
1658 A namespace-name or namespace-alias shall not be declared as
1659 the name of any other entity in the same declarative region.
1660 A namespace-name defined at global scope shall not be
1661 declared as the name of any other entity in any global scope
1662 of the program. */
1663 error ("conflicting declaration of namespace %q+D", newdecl);
1664 inform (DECL_SOURCE_LOCATION (olddecl),
1665 "previous declaration of namespace %qD here", olddecl);
1666 return error_mark_node;
1668 else
1670 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1671 if (errmsg)
1673 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1674 if (DECL_NAME (olddecl) != NULL_TREE)
1675 inform (DECL_SOURCE_LOCATION (olddecl),
1676 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1677 ? G_("%q#D previously defined here")
1678 : G_("%q#D previously declared here"), olddecl);
1679 return error_mark_node;
1681 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1682 && DECL_INITIAL (olddecl) != NULL_TREE
1683 && !prototype_p (TREE_TYPE (olddecl))
1684 && prototype_p (TREE_TYPE (newdecl)))
1686 /* Prototype decl follows defn w/o prototype. */
1687 if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1688 "prototype specified for %q#D", newdecl))
1689 inform (DECL_SOURCE_LOCATION (olddecl),
1690 "previous non-prototype definition here");
1692 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1693 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1695 /* [dcl.link]
1696 If two declarations of the same function or object
1697 specify different linkage-specifications ..., the program
1698 is ill-formed.... Except for functions with C++ linkage,
1699 a function declaration without a linkage specification
1700 shall not precede the first linkage specification for
1701 that function. A function can be declared without a
1702 linkage specification after an explicit linkage
1703 specification has been seen; the linkage explicitly
1704 specified in the earlier declaration is not affected by
1705 such a function declaration.
1707 DR 563 raises the question why the restrictions on
1708 functions should not also apply to objects. Older
1709 versions of G++ silently ignore the linkage-specification
1710 for this example:
1712 namespace N {
1713 extern int i;
1714 extern "C" int i;
1717 which is clearly wrong. Therefore, we now treat objects
1718 like functions. */
1719 if (current_lang_depth () == 0)
1721 /* There is no explicit linkage-specification, so we use
1722 the linkage from the previous declaration. */
1723 if (!DECL_LANG_SPECIFIC (newdecl))
1724 retrofit_lang_decl (newdecl);
1725 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1727 else
1729 error ("conflicting declaration of %q+#D with %qL linkage",
1730 newdecl, DECL_LANGUAGE (newdecl));
1731 inform (DECL_SOURCE_LOCATION (olddecl),
1732 "previous declaration with %qL linkage",
1733 DECL_LANGUAGE (olddecl));
1737 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1739 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1741 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */
1742 if (DECL_FUNCTION_MEMBER_P (olddecl)
1743 && (/* grokfndecl passes member function templates too
1744 as FUNCTION_DECLs. */
1745 DECL_TEMPLATE_INFO (olddecl)
1746 /* C++11 8.3.6/6.
1747 Default arguments for a member function of a class
1748 template shall be specified on the initial declaration
1749 of the member function within the class template. */
1750 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1751 check_redeclaration_no_default_args (newdecl);
1752 else
1754 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1755 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1756 int i = 1;
1758 for (; t1 && t1 != void_list_node;
1759 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1760 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1762 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1763 TREE_PURPOSE (t2)))
1765 if (permerror (input_location,
1766 "default argument given for parameter "
1767 "%d of %q#D", i, newdecl))
1768 inform (DECL_SOURCE_LOCATION (olddecl),
1769 "previous specification in %q#D here",
1770 olddecl);
1772 else
1774 error ("default argument given for parameter %d "
1775 "of %q#D", i, newdecl);
1776 inform (DECL_SOURCE_LOCATION (olddecl),
1777 "previous specification in %q#D here",
1778 olddecl);
1785 /* Do not merge an implicit typedef with an explicit one. In:
1787 class A;
1789 typedef class A A __attribute__ ((foo));
1791 the attribute should apply only to the typedef. */
1792 if (TREE_CODE (olddecl) == TYPE_DECL
1793 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1794 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1795 return NULL_TREE;
1797 /* If new decl is `static' and an `extern' was seen previously,
1798 warn about it. */
1799 warn_extern_redeclared_static (newdecl, olddecl);
1801 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1802 return error_mark_node;
1804 /* We have committed to returning 1 at this point. */
1805 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1807 /* Now that functions must hold information normally held
1808 by field decls, there is extra work to do so that
1809 declaration information does not get destroyed during
1810 definition. */
1811 if (DECL_VINDEX (olddecl))
1812 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1813 if (DECL_CONTEXT (olddecl))
1814 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1815 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1816 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1817 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1818 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1819 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1820 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1821 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1822 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1823 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1824 SET_OVERLOADED_OPERATOR_CODE
1825 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1826 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1828 /* Optionally warn about more than one declaration for the same
1829 name, but don't warn about a function declaration followed by a
1830 definition. */
1831 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1832 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1833 /* Don't warn about extern decl followed by definition. */
1834 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1835 /* Don't warn about friends, let add_friend take care of it. */
1836 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1837 /* Don't warn about declaration followed by specialization. */
1838 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1839 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1841 if (warning_at (DECL_SOURCE_LOCATION (newdecl),
1842 OPT_Wredundant_decls,
1843 "redundant redeclaration of %qD in same scope",
1844 newdecl))
1845 inform (DECL_SOURCE_LOCATION (olddecl),
1846 "previous declaration of %qD", olddecl);
1849 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1850 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1852 if (DECL_DELETED_FN (newdecl))
1854 error ("deleted definition of %q+D", newdecl);
1855 inform (DECL_SOURCE_LOCATION (olddecl),
1856 "previous declaration of %qD", olddecl);
1858 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1862 /* Deal with C++: must preserve virtual function table size. */
1863 if (TREE_CODE (olddecl) == TYPE_DECL)
1865 tree newtype = TREE_TYPE (newdecl);
1866 tree oldtype = TREE_TYPE (olddecl);
1868 if (newtype != error_mark_node && oldtype != error_mark_node
1869 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1870 CLASSTYPE_FRIEND_CLASSES (newtype)
1871 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1873 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1876 /* Copy all the DECL_... slots specified in the new decl
1877 except for any that we copy here from the old type. */
1878 DECL_ATTRIBUTES (newdecl)
1879 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1881 if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
1883 olddecl_friend = DECL_FRIEND_P (olddecl);
1884 hidden_friend = (DECL_ANTICIPATED (olddecl)
1885 && DECL_HIDDEN_FRIEND_P (olddecl)
1886 && newdecl_is_friend);
1887 if (!hidden_friend)
1889 DECL_ANTICIPATED (olddecl) = 0;
1890 DECL_HIDDEN_FRIEND_P (olddecl) = 0;
1894 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1896 tree old_result;
1897 tree new_result;
1898 old_result = DECL_TEMPLATE_RESULT (olddecl);
1899 new_result = DECL_TEMPLATE_RESULT (newdecl);
1900 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1901 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1902 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1903 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1905 DECL_ATTRIBUTES (old_result)
1906 = (*targetm.merge_decl_attributes) (old_result, new_result);
1908 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1910 /* Per C++11 8.3.6/4, default arguments cannot be added in later
1911 declarations of a function template. */
1912 if (DECL_SOURCE_LOCATION (newdecl)
1913 != DECL_SOURCE_LOCATION (olddecl))
1914 check_redeclaration_no_default_args (newdecl);
1916 check_default_args (newdecl);
1918 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1919 && DECL_INITIAL (new_result))
1921 if (DECL_INITIAL (old_result))
1922 DECL_UNINLINABLE (old_result) = 1;
1923 else
1924 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1925 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1926 DECL_NOT_REALLY_EXTERN (old_result)
1927 = DECL_NOT_REALLY_EXTERN (new_result);
1928 DECL_INTERFACE_KNOWN (old_result)
1929 = DECL_INTERFACE_KNOWN (new_result);
1930 DECL_DECLARED_INLINE_P (old_result)
1931 = DECL_DECLARED_INLINE_P (new_result);
1932 DECL_DISREGARD_INLINE_LIMITS (old_result)
1933 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1936 else
1938 DECL_DECLARED_INLINE_P (old_result)
1939 |= DECL_DECLARED_INLINE_P (new_result);
1940 DECL_DISREGARD_INLINE_LIMITS (old_result)
1941 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1942 check_redeclaration_exception_specification (newdecl, olddecl);
1946 /* If the new declaration is a definition, update the file and
1947 line information on the declaration, and also make
1948 the old declaration the same definition. */
1949 if (DECL_INITIAL (new_result) != NULL_TREE)
1951 DECL_SOURCE_LOCATION (olddecl)
1952 = DECL_SOURCE_LOCATION (old_result)
1953 = DECL_SOURCE_LOCATION (newdecl);
1954 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1955 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1957 tree parm;
1958 DECL_ARGUMENTS (old_result)
1959 = DECL_ARGUMENTS (new_result);
1960 for (parm = DECL_ARGUMENTS (old_result); parm;
1961 parm = DECL_CHAIN (parm))
1962 DECL_CONTEXT (parm) = old_result;
1966 return olddecl;
1969 if (types_match)
1971 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1972 check_redeclaration_exception_specification (newdecl, olddecl);
1974 /* Automatically handles default parameters. */
1975 tree oldtype = TREE_TYPE (olddecl);
1976 tree newtype;
1978 /* For typedefs use the old type, as the new type's DECL_NAME points
1979 at newdecl, which will be ggc_freed. */
1980 if (TREE_CODE (newdecl) == TYPE_DECL)
1981 newtype = oldtype;
1982 else
1983 /* Merge the data types specified in the two decls. */
1984 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1986 if (VAR_P (newdecl))
1988 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1989 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1990 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1991 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1992 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1993 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1995 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1996 if (DECL_LANG_SPECIFIC (olddecl)
1997 && CP_DECL_THREADPRIVATE_P (olddecl))
1999 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2000 if (!DECL_LANG_SPECIFIC (newdecl))
2001 retrofit_lang_decl (newdecl);
2003 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2007 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2009 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2010 check_default_args (newdecl);
2012 /* Lay the type out, unless already done. */
2013 if (! same_type_p (newtype, oldtype)
2014 && TREE_TYPE (newdecl) != error_mark_node
2015 && !(processing_template_decl && uses_template_parms (newdecl)))
2016 layout_type (TREE_TYPE (newdecl));
2018 if ((VAR_P (newdecl)
2019 || TREE_CODE (newdecl) == PARM_DECL
2020 || TREE_CODE (newdecl) == RESULT_DECL
2021 || TREE_CODE (newdecl) == FIELD_DECL
2022 || TREE_CODE (newdecl) == TYPE_DECL)
2023 && !(processing_template_decl && uses_template_parms (newdecl)))
2024 layout_decl (newdecl, 0);
2026 /* Merge the type qualifiers. */
2027 if (TREE_READONLY (newdecl))
2028 TREE_READONLY (olddecl) = 1;
2029 if (TREE_THIS_VOLATILE (newdecl))
2030 TREE_THIS_VOLATILE (olddecl) = 1;
2031 if (TREE_NOTHROW (newdecl))
2032 TREE_NOTHROW (olddecl) = 1;
2034 /* Merge deprecatedness. */
2035 if (TREE_DEPRECATED (newdecl))
2036 TREE_DEPRECATED (olddecl) = 1;
2038 /* Preserve function specific target and optimization options */
2039 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2041 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2042 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2043 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2044 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2046 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2047 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2048 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2049 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2052 /* Merge the initialization information. */
2053 if (DECL_INITIAL (newdecl) == NULL_TREE
2054 && DECL_INITIAL (olddecl) != NULL_TREE)
2056 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2057 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2058 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2060 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2061 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2065 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2067 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2068 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2069 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2070 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2071 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2072 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2073 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2074 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2075 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2076 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2077 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2078 /* Keep the old RTL. */
2079 COPY_DECL_RTL (olddecl, newdecl);
2081 else if (VAR_P (newdecl)
2082 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2084 /* Keep the old RTL. We cannot keep the old RTL if the old
2085 declaration was for an incomplete object and the new
2086 declaration is not since many attributes of the RTL will
2087 change. */
2088 COPY_DECL_RTL (olddecl, newdecl);
2091 /* If cannot merge, then use the new type and qualifiers,
2092 and don't preserve the old rtl. */
2093 else
2095 /* Clean out any memory we had of the old declaration. */
2096 tree oldstatic = value_member (olddecl, static_aggregates);
2097 if (oldstatic)
2098 TREE_VALUE (oldstatic) = error_mark_node;
2100 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2101 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2102 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2103 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2106 /* Merge the storage class information. */
2107 merge_weak (newdecl, olddecl);
2109 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2110 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2111 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2112 if (! DECL_EXTERNAL (olddecl))
2113 DECL_EXTERNAL (newdecl) = 0;
2114 if (! DECL_COMDAT (olddecl))
2115 DECL_COMDAT (newdecl) = 0;
2117 new_template_info = NULL_TREE;
2118 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2120 bool new_redefines_gnu_inline = false;
2122 if (new_defines_function
2123 && ((DECL_INTERFACE_KNOWN (olddecl)
2124 && TREE_CODE (olddecl) == FUNCTION_DECL)
2125 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2126 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2127 == FUNCTION_DECL))))
2129 tree fn = olddecl;
2131 if (TREE_CODE (fn) == TEMPLATE_DECL)
2132 fn = DECL_TEMPLATE_RESULT (olddecl);
2134 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2137 if (!new_redefines_gnu_inline)
2139 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2140 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2141 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2143 DECL_TEMPLATE_INSTANTIATED (newdecl)
2144 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2145 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2147 /* If the OLDDECL is an instantiation and/or specialization,
2148 then the NEWDECL must be too. But, it may not yet be marked
2149 as such if the caller has created NEWDECL, but has not yet
2150 figured out that it is a redeclaration. */
2151 if (!DECL_USE_TEMPLATE (newdecl))
2152 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2154 /* Don't really know how much of the language-specific
2155 values we should copy from old to new. */
2156 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2157 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2158 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2159 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2161 if (LANG_DECL_HAS_MIN (newdecl))
2163 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2164 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2165 if (DECL_TEMPLATE_INFO (newdecl))
2167 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2168 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2169 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2170 /* Remember the presence of explicit specialization args. */
2171 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2172 = TINFO_USED_TEMPLATE_ID (new_template_info);
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 DECL_BEFRIENDING_CLASSES (newdecl)
2181 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2182 DECL_BEFRIENDING_CLASSES (olddecl));
2183 /* DECL_THUNKS is only valid for virtual functions,
2184 otherwise it is a DECL_FRIEND_CONTEXT. */
2185 if (DECL_VIRTUAL_P (newdecl))
2186 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2188 /* Only variables have this field. */
2189 else if (VAR_P (newdecl)
2190 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2191 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2194 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2196 tree parm;
2198 /* Merge parameter attributes. */
2199 tree oldarg, newarg;
2200 for (oldarg = DECL_ARGUMENTS(olddecl),
2201 newarg = DECL_ARGUMENTS(newdecl);
2202 oldarg && newarg;
2203 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2204 DECL_ATTRIBUTES (newarg)
2205 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2206 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2209 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2210 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2212 /* If newdecl is not a specialization, then it is not a
2213 template-related function at all. And that means that we
2214 should have exited above, returning 0. */
2215 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2217 if (DECL_ODR_USED (olddecl))
2218 /* From [temp.expl.spec]:
2220 If a template, a member template or the member of a class
2221 template is explicitly specialized then that
2222 specialization shall be declared before the first use of
2223 that specialization that would cause an implicit
2224 instantiation to take place, in every translation unit in
2225 which such a use occurs. */
2226 error ("explicit specialization of %qD after first use",
2227 olddecl);
2229 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2230 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2231 && DECL_DECLARED_INLINE_P (newdecl));
2233 /* Don't propagate visibility from the template to the
2234 specialization here. We'll do that in determine_visibility if
2235 appropriate. */
2236 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2238 /* [temp.expl.spec/14] We don't inline explicit specialization
2239 just because the primary template says so. */
2241 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2242 the always_inline attribute. */
2243 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2244 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2246 if (DECL_DECLARED_INLINE_P (newdecl))
2247 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2248 else
2249 DECL_ATTRIBUTES (newdecl)
2250 = remove_attribute ("always_inline",
2251 DECL_ATTRIBUTES (newdecl));
2254 else if (new_defines_function && DECL_INITIAL (olddecl))
2256 /* Never inline re-defined extern inline functions.
2257 FIXME: this could be better handled by keeping both
2258 function as separate declarations. */
2259 DECL_UNINLINABLE (newdecl) = 1;
2261 else
2263 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2264 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2266 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2268 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2269 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2271 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2272 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2273 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2274 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2277 /* Preserve abstractness on cloned [cd]tors. */
2278 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2280 /* Update newdecl's parms to point at olddecl. */
2281 for (parm = DECL_ARGUMENTS (newdecl); parm;
2282 parm = DECL_CHAIN (parm))
2283 DECL_CONTEXT (parm) = olddecl;
2285 if (! types_match)
2287 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2288 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2289 COPY_DECL_RTL (newdecl, olddecl);
2291 if (! types_match || new_defines_function)
2293 /* These need to be copied so that the names are available.
2294 Note that if the types do match, we'll preserve inline
2295 info and other bits, but if not, we won't. */
2296 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2297 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2299 /* If redeclaring a builtin function, it stays built in
2300 if newdecl is a gnu_inline definition, or if newdecl is just
2301 a declaration. */
2302 if (DECL_BUILT_IN (olddecl)
2303 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2305 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2306 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2307 /* If we're keeping the built-in definition, keep the rtl,
2308 regardless of declaration matches. */
2309 COPY_DECL_RTL (olddecl, newdecl);
2310 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2312 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2313 switch (fncode)
2315 /* If a compatible prototype of these builtin functions
2316 is seen, assume the runtime implements it with the
2317 expected semantics. */
2318 case BUILT_IN_STPCPY:
2319 if (builtin_decl_explicit_p (fncode))
2320 set_builtin_decl_implicit_p (fncode, true);
2321 break;
2322 default:
2323 if (builtin_decl_explicit_p (fncode))
2324 set_builtin_decl_declared_p (fncode, true);
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 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2357 "%qD: visibility attribute ignored because it "
2358 "conflicts with previous declaration", newdecl))
2359 inform (DECL_SOURCE_LOCATION (olddecl),
2360 "previous declaration of %qD", olddecl);
2362 /* Choose the declaration which specified visibility. */
2363 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2365 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2366 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2368 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2369 so keep this behavior. */
2370 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2372 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2373 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2375 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2376 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2378 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2379 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2381 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2382 if (TREE_CODE (newdecl) == FIELD_DECL)
2383 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2385 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2386 with that from NEWDECL below. */
2387 if (DECL_LANG_SPECIFIC (olddecl))
2389 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2390 != DECL_LANG_SPECIFIC (newdecl));
2391 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2394 /* Merge the USED information. */
2395 if (TREE_USED (olddecl))
2396 TREE_USED (newdecl) = 1;
2397 else if (TREE_USED (newdecl))
2398 TREE_USED (olddecl) = 1;
2399 if (VAR_P (newdecl))
2401 if (DECL_READ_P (olddecl))
2402 DECL_READ_P (newdecl) = 1;
2403 else if (DECL_READ_P (newdecl))
2404 DECL_READ_P (olddecl) = 1;
2406 if (DECL_PRESERVE_P (olddecl))
2407 DECL_PRESERVE_P (newdecl) = 1;
2408 else if (DECL_PRESERVE_P (newdecl))
2409 DECL_PRESERVE_P (olddecl) = 1;
2411 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2412 to olddecl and deleted. */
2413 if (TREE_CODE (newdecl) == FUNCTION_DECL
2414 && DECL_FUNCTION_VERSIONED (olddecl))
2416 /* Set the flag for newdecl so that it gets copied to olddecl. */
2417 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2418 /* newdecl will be purged after copying to olddecl and is no longer
2419 a version. */
2420 cgraph_node::delete_function_version (newdecl);
2423 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2425 int function_size;
2426 struct symtab_node *snode = symtab_node::get (olddecl);
2428 function_size = sizeof (struct tree_decl_common);
2430 memcpy ((char *) olddecl + sizeof (struct tree_common),
2431 (char *) newdecl + sizeof (struct tree_common),
2432 function_size - sizeof (struct tree_common));
2434 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2435 (char *) newdecl + sizeof (struct tree_decl_common),
2436 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2438 /* Preserve symtab node mapping. */
2439 olddecl->decl_with_vis.symtab_node = snode;
2441 if (new_template_info)
2442 /* If newdecl is a template instantiation, it is possible that
2443 the following sequence of events has occurred:
2445 o A friend function was declared in a class template. The
2446 class template was instantiated.
2448 o The instantiation of the friend declaration was
2449 recorded on the instantiation list, and is newdecl.
2451 o Later, however, instantiate_class_template called pushdecl
2452 on the newdecl to perform name injection. But, pushdecl in
2453 turn called duplicate_decls when it discovered that another
2454 declaration of a global function with the same name already
2455 existed.
2457 o Here, in duplicate_decls, we decided to clobber newdecl.
2459 If we're going to do that, we'd better make sure that
2460 olddecl, and not newdecl, is on the list of
2461 instantiations so that if we try to do the instantiation
2462 again we won't get the clobbered declaration. */
2463 reregister_specialization (newdecl,
2464 new_template_info,
2465 olddecl);
2467 else
2469 size_t size = tree_code_size (TREE_CODE (newdecl));
2471 memcpy ((char *) olddecl + sizeof (struct tree_common),
2472 (char *) newdecl + sizeof (struct tree_common),
2473 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2474 switch (TREE_CODE (newdecl))
2476 case LABEL_DECL:
2477 case VAR_DECL:
2478 case RESULT_DECL:
2479 case PARM_DECL:
2480 case FIELD_DECL:
2481 case TYPE_DECL:
2482 case CONST_DECL:
2484 struct symtab_node *snode = NULL;
2486 if (VAR_P (newdecl)
2487 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2488 || DECL_EXTERNAL (olddecl)))
2489 snode = symtab_node::get (olddecl);
2490 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2491 (char *) newdecl + sizeof (struct tree_decl_common),
2492 size - sizeof (struct tree_decl_common)
2493 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2494 if (VAR_P (newdecl))
2495 olddecl->decl_with_vis.symtab_node = snode;
2497 break;
2498 default:
2499 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2500 (char *) newdecl + sizeof (struct tree_decl_common),
2501 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2502 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2503 break;
2507 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2509 if (DECL_EXTERNAL (olddecl)
2510 || TREE_PUBLIC (olddecl)
2511 || TREE_STATIC (olddecl))
2513 /* Merge the section attribute.
2514 We want to issue an error if the sections conflict but that must be
2515 done later in decl_attributes since we are called before attributes
2516 are assigned. */
2517 if (DECL_SECTION_NAME (newdecl) != NULL)
2518 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2520 if (DECL_ONE_ONLY (newdecl))
2522 struct symtab_node *oldsym, *newsym;
2523 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2524 oldsym = cgraph_node::get_create (olddecl);
2525 else
2526 oldsym = varpool_node::get_create (olddecl);
2527 newsym = symtab_node::get (newdecl);
2528 oldsym->set_comdat_group (newsym->get_comdat_group ());
2532 if (VAR_P (newdecl)
2533 && CP_DECL_THREAD_LOCAL_P (newdecl))
2535 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2536 if (!processing_template_decl)
2537 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2541 DECL_UID (olddecl) = olddecl_uid;
2542 if (olddecl_friend)
2543 DECL_FRIEND_P (olddecl) = 1;
2544 if (hidden_friend)
2546 DECL_ANTICIPATED (olddecl) = 1;
2547 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2550 /* NEWDECL contains the merged attribute lists.
2551 Update OLDDECL to be the same. */
2552 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2554 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2555 so that encode_section_info has a chance to look at the new decl
2556 flags and attributes. */
2557 if (DECL_RTL_SET_P (olddecl)
2558 && (TREE_CODE (olddecl) == FUNCTION_DECL
2559 || (VAR_P (olddecl)
2560 && TREE_STATIC (olddecl))))
2561 make_decl_rtl (olddecl);
2563 /* The NEWDECL will no longer be needed. Because every out-of-class
2564 declaration of a member results in a call to duplicate_decls,
2565 freeing these nodes represents in a significant savings.
2567 Before releasing the node, be sore to remove function from symbol
2568 table that might have been inserted there to record comdat group.
2569 Be sure to however do not free DECL_STRUCT_FUNCTION becuase this
2570 structure is shared in between newdecl and oldecl. */
2571 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2572 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2573 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2575 struct symtab_node *snode = symtab_node::get (newdecl);
2576 if (snode)
2577 snode->remove ();
2579 ggc_free (newdecl);
2581 return olddecl;
2584 /* Return zero if the declaration NEWDECL is valid
2585 when the declaration OLDDECL (assumed to be for the same name)
2586 has already been seen.
2587 Otherwise return an error message format string with a %s
2588 where the identifier should go. */
2590 static const char *
2591 redeclaration_error_message (tree newdecl, tree olddecl)
2593 if (TREE_CODE (newdecl) == TYPE_DECL)
2595 /* Because C++ can put things into name space for free,
2596 constructs like "typedef struct foo { ... } foo"
2597 would look like an erroneous redeclaration. */
2598 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2599 return NULL;
2600 else
2601 return G_("redefinition of %q#D");
2603 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2605 /* If this is a pure function, its olddecl will actually be
2606 the original initialization to `0' (which we force to call
2607 abort()). Don't complain about redefinition in this case. */
2608 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2609 && DECL_INITIAL (olddecl) == NULL_TREE)
2610 return NULL;
2612 /* If both functions come from different namespaces, this is not
2613 a redeclaration - this is a conflict with a used function. */
2614 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2615 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2616 && ! decls_match (olddecl, newdecl))
2617 return G_("%qD conflicts with used function");
2619 /* We'll complain about linkage mismatches in
2620 warn_extern_redeclared_static. */
2622 /* Defining the same name twice is no good. */
2623 if (DECL_INITIAL (olddecl) != NULL_TREE
2624 && DECL_INITIAL (newdecl) != NULL_TREE)
2626 if (DECL_NAME (olddecl) == NULL_TREE)
2627 return G_("%q#D not declared in class");
2628 else if (!GNU_INLINE_P (olddecl)
2629 || GNU_INLINE_P (newdecl))
2630 return G_("redefinition of %q#D");
2633 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2635 bool olda = GNU_INLINE_P (olddecl);
2636 bool newa = GNU_INLINE_P (newdecl);
2638 if (olda != newa)
2640 if (newa)
2641 return G_("%q+D redeclared inline with "
2642 "%<gnu_inline%> attribute");
2643 else
2644 return G_("%q+D redeclared inline without "
2645 "%<gnu_inline%> attribute");
2649 check_abi_tag_redeclaration
2650 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2651 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2653 return NULL;
2655 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2657 tree nt, ot;
2659 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2661 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2662 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2663 return G_("redefinition of %q#D");
2664 return NULL;
2667 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2668 || (DECL_TEMPLATE_RESULT (newdecl)
2669 == DECL_TEMPLATE_RESULT (olddecl)))
2670 return NULL;
2672 nt = DECL_TEMPLATE_RESULT (newdecl);
2673 if (DECL_TEMPLATE_INFO (nt))
2674 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2675 ot = DECL_TEMPLATE_RESULT (olddecl);
2676 if (DECL_TEMPLATE_INFO (ot))
2677 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2678 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2679 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2680 return G_("redefinition of %q#D");
2682 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2684 bool olda = GNU_INLINE_P (ot);
2685 bool newa = GNU_INLINE_P (nt);
2687 if (olda != newa)
2689 if (newa)
2690 return G_("%q+D redeclared inline with "
2691 "%<gnu_inline%> attribute");
2692 else
2693 return G_("%q+D redeclared inline without "
2694 "%<gnu_inline%> attribute");
2698 /* Core issue #226 (C++0x):
2700 If a friend function template declaration specifies a
2701 default template-argument, that declaration shall be a
2702 definition and shall be the only declaration of the
2703 function template in the translation unit. */
2704 if ((cxx_dialect != cxx98)
2705 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2706 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2707 /*is_primary=*/true,
2708 /*is_partial=*/false,
2709 /*is_friend_decl=*/2))
2710 return G_("redeclaration of friend %q#D "
2711 "may not have default template arguments");
2713 return NULL;
2715 else if (VAR_P (newdecl)
2716 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2717 && (! DECL_LANG_SPECIFIC (olddecl)
2718 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2719 || CP_DECL_THREAD_LOCAL_P (newdecl)))
2721 /* Only variables can be thread-local, and all declarations must
2722 agree on this property. */
2723 if (CP_DECL_THREAD_LOCAL_P (newdecl))
2724 return G_("thread-local declaration of %q#D follows "
2725 "non-thread-local declaration");
2726 else
2727 return G_("non-thread-local declaration of %q#D follows "
2728 "thread-local declaration");
2730 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2732 /* The objects have been declared at namespace scope. If either
2733 is a member of an anonymous union, then this is an invalid
2734 redeclaration. For example:
2736 int i;
2737 union { int i; };
2739 is invalid. */
2740 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2741 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2742 return G_("redeclaration of %q#D");
2743 /* If at least one declaration is a reference, there is no
2744 conflict. For example:
2746 int i = 3;
2747 extern int i;
2749 is valid. */
2750 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2751 return NULL;
2752 /* Reject two definitions. */
2753 return G_("redefinition of %q#D");
2755 else
2757 /* Objects declared with block scope: */
2758 /* Reject two definitions, and reject a definition
2759 together with an external reference. */
2760 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2761 return G_("redeclaration of %q#D");
2762 return NULL;
2766 /* Hash and equality functions for the named_label table. */
2768 hashval_t
2769 named_label_hasher::hash (named_label_entry *ent)
2771 return DECL_UID (ent->label_decl);
2774 bool
2775 named_label_hasher::equal (named_label_entry *a, named_label_entry *b)
2777 return a->label_decl == b->label_decl;
2780 /* Create a new label, named ID. */
2782 static tree
2783 make_label_decl (tree id, int local_p)
2785 struct named_label_entry *ent;
2786 tree decl;
2788 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2790 DECL_CONTEXT (decl) = current_function_decl;
2791 DECL_MODE (decl) = VOIDmode;
2792 C_DECLARED_LABEL_FLAG (decl) = local_p;
2794 /* Say where one reference is to the label, for the sake of the
2795 error if it is not defined. */
2796 DECL_SOURCE_LOCATION (decl) = input_location;
2798 /* Record the fact that this identifier is bound to this label. */
2799 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2801 /* Create the label htab for the function on demand. */
2802 if (!named_labels)
2803 named_labels = hash_table<named_label_hasher>::create_ggc (13);
2805 /* Record this label on the list of labels used in this function.
2806 We do this before calling make_label_decl so that we get the
2807 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2808 ent = ggc_cleared_alloc<named_label_entry> ();
2809 ent->label_decl = decl;
2811 named_label_entry **slot = named_labels->find_slot (ent, INSERT);
2812 gcc_assert (*slot == NULL);
2813 *slot = ent;
2815 return decl;
2818 /* Look for a label named ID in the current function. If one cannot
2819 be found, create one. (We keep track of used, but undefined,
2820 labels, and complain about them at the end of a function.) */
2822 static tree
2823 lookup_label_1 (tree id)
2825 tree decl;
2827 /* You can't use labels at global scope. */
2828 if (current_function_decl == NULL_TREE)
2830 error ("label %qE referenced outside of any function", id);
2831 return NULL_TREE;
2834 /* See if we've already got this label. */
2835 decl = IDENTIFIER_LABEL_VALUE (id);
2836 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2837 return decl;
2839 decl = make_label_decl (id, /*local_p=*/0);
2840 return decl;
2843 /* Wrapper for lookup_label_1. */
2845 tree
2846 lookup_label (tree id)
2848 tree ret;
2849 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2850 ret = lookup_label_1 (id);
2851 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2852 return ret;
2855 /* Declare a local label named ID. */
2857 tree
2858 declare_local_label (tree id)
2860 tree decl;
2861 cp_label_binding bind;
2863 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2864 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2865 bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
2867 decl = make_label_decl (id, /*local_p=*/1);
2868 bind.label = decl;
2869 vec_safe_push (current_binding_level->shadowed_labels, bind);
2871 return decl;
2874 /* Returns nonzero if it is ill-formed to jump past the declaration of
2875 DECL. Returns 2 if it's also a real problem. */
2877 static int
2878 decl_jump_unsafe (tree decl)
2880 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2881 with automatic storage duration is not in scope to a point where it is
2882 in scope is ill-formed unless the variable has scalar type, class type
2883 with a trivial default constructor and a trivial destructor, a
2884 cv-qualified version of one of these types, or an array of one of the
2885 preceding types and is declared without an initializer (8.5). */
2886 tree type = TREE_TYPE (decl);
2888 if (!VAR_P (decl) || TREE_STATIC (decl)
2889 || type == error_mark_node)
2890 return 0;
2892 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
2893 || variably_modified_type_p (type, NULL_TREE))
2894 return 2;
2896 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2897 return 1;
2899 return 0;
2902 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2904 static bool
2905 identify_goto (tree decl, const location_t *locus)
2907 bool complained = (decl
2908 ? permerror (input_location, "jump to label %qD", decl)
2909 : permerror (input_location, "jump to case label"));
2910 if (complained && locus)
2911 inform (*locus, " from here");
2912 return complained;
2915 /* Check that a single previously seen jump to a newly defined label
2916 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2917 the jump context; NAMES are the names in scope in LEVEL at the jump
2918 context; LOCUS is the source position of the jump or 0. Returns
2919 true if all is well. */
2921 static bool
2922 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2923 bool exited_omp, const location_t *locus)
2925 cp_binding_level *b;
2926 bool identified = false, complained = false;
2927 bool saw_eh = false, saw_omp = false;
2929 if (exited_omp)
2931 complained = identify_goto (decl, locus);
2932 if (complained)
2933 inform (input_location, " exits OpenMP structured block");
2934 identified = saw_omp = true;
2937 for (b = current_binding_level; b ; b = b->level_chain)
2939 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2941 for (new_decls = b->names; new_decls != old_decls;
2942 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2943 : TREE_CHAIN (new_decls)))
2945 int problem = decl_jump_unsafe (new_decls);
2946 if (! problem)
2947 continue;
2949 if (!identified)
2951 complained = identify_goto (decl, locus);
2952 identified = true;
2954 if (complained)
2956 if (problem > 1)
2957 inform (DECL_SOURCE_LOCATION (new_decls),
2958 " crosses initialization of %q#D", new_decls);
2959 else
2960 inform (DECL_SOURCE_LOCATION (new_decls),
2961 " enters scope of %q#D which has "
2962 "non-trivial destructor", new_decls);
2966 if (b == level)
2967 break;
2968 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2970 if (!identified)
2972 complained = identify_goto (decl, locus);
2973 identified = true;
2975 if (complained)
2977 if (b->kind == sk_try)
2978 inform (input_location, " enters try block");
2979 else
2980 inform (input_location, " enters catch block");
2982 saw_eh = true;
2984 if (b->kind == sk_omp && !saw_omp)
2986 if (!identified)
2988 complained = identify_goto (decl, locus);
2989 identified = true;
2991 if (complained)
2992 inform (input_location, " enters OpenMP structured block");
2993 saw_omp = true;
2997 return !identified;
3000 static void
3001 check_previous_goto (tree decl, struct named_label_use_entry *use)
3003 check_previous_goto_1 (decl, use->binding_level,
3004 use->names_in_scope, use->in_omp_scope,
3005 &use->o_goto_locus);
3008 static bool
3009 check_switch_goto (cp_binding_level* level)
3011 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3014 /* Check that a new jump to a label DECL is OK. Called by
3015 finish_goto_stmt. */
3017 void
3018 check_goto (tree decl)
3020 struct named_label_entry *ent, dummy;
3021 bool saw_catch = false, identified = false, complained = false;
3022 tree bad;
3023 unsigned ix;
3025 /* We can't know where a computed goto is jumping.
3026 So we assume that it's OK. */
3027 if (TREE_CODE (decl) != LABEL_DECL)
3028 return;
3030 /* We didn't record any information about this label when we created it,
3031 and there's not much point since it's trivial to analyze as a return. */
3032 if (decl == cdtor_label)
3033 return;
3035 dummy.label_decl = decl;
3036 ent = named_labels->find (&dummy);
3037 gcc_assert (ent != NULL);
3039 /* If the label hasn't been defined yet, defer checking. */
3040 if (! DECL_INITIAL (decl))
3042 struct named_label_use_entry *new_use;
3044 /* Don't bother creating another use if the last goto had the
3045 same data, and will therefore create the same set of errors. */
3046 if (ent->uses
3047 && ent->uses->names_in_scope == current_binding_level->names)
3048 return;
3050 new_use = ggc_alloc<named_label_use_entry> ();
3051 new_use->binding_level = current_binding_level;
3052 new_use->names_in_scope = current_binding_level->names;
3053 new_use->o_goto_locus = input_location;
3054 new_use->in_omp_scope = false;
3056 new_use->next = ent->uses;
3057 ent->uses = new_use;
3058 return;
3061 if (ent->in_try_scope || ent->in_catch_scope
3062 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3064 complained = permerror (DECL_SOURCE_LOCATION (decl),
3065 "jump to label %qD", decl);
3066 if (complained)
3067 inform (input_location, " from here");
3068 identified = true;
3071 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3073 int u = decl_jump_unsafe (bad);
3075 if (u > 1 && DECL_ARTIFICIAL (bad))
3077 /* Can't skip init of __exception_info. */
3078 if (complained)
3079 inform (DECL_SOURCE_LOCATION (bad), " enters catch block");
3080 saw_catch = true;
3082 else if (complained)
3084 if (u > 1)
3085 inform (DECL_SOURCE_LOCATION (bad),
3086 " skips initialization of %q#D", bad);
3087 else
3088 inform (DECL_SOURCE_LOCATION (bad),
3089 " enters scope of %q#D which has "
3090 "non-trivial destructor", bad);
3094 if (complained)
3096 if (ent->in_try_scope)
3097 inform (input_location, " enters try block");
3098 else if (ent->in_catch_scope && !saw_catch)
3099 inform (input_location, " enters catch block");
3102 if (ent->in_omp_scope)
3104 if (complained)
3105 inform (input_location, " enters OpenMP structured block");
3107 else if (flag_openmp)
3109 cp_binding_level *b;
3110 for (b = current_binding_level; b ; b = b->level_chain)
3112 if (b == ent->binding_level)
3113 break;
3114 if (b->kind == sk_omp)
3116 if (!identified)
3118 complained = permerror (DECL_SOURCE_LOCATION (decl),
3119 "jump to label %qD", decl);
3120 if (complained)
3121 inform (input_location, " from here");
3122 identified = true;
3124 if (complained)
3125 inform (input_location, " exits OpenMP structured block");
3126 break;
3132 /* Check that a return is ok wrt OpenMP structured blocks.
3133 Called by finish_return_stmt. Returns true if all is well. */
3135 bool
3136 check_omp_return (void)
3138 cp_binding_level *b;
3139 for (b = current_binding_level; b ; b = b->level_chain)
3140 if (b->kind == sk_omp)
3142 error ("invalid exit from OpenMP structured block");
3143 return false;
3145 else if (b->kind == sk_function_parms)
3146 break;
3147 return true;
3150 /* Define a label, specifying the location in the source file.
3151 Return the LABEL_DECL node for the label. */
3153 static tree
3154 define_label_1 (location_t location, tree name)
3156 struct named_label_entry *ent, dummy;
3157 cp_binding_level *p;
3158 tree decl;
3160 decl = lookup_label (name);
3162 dummy.label_decl = decl;
3163 ent = named_labels->find (&dummy);
3164 gcc_assert (ent != NULL);
3166 /* After labels, make any new cleanups in the function go into their
3167 own new (temporary) binding contour. */
3168 for (p = current_binding_level;
3169 p->kind != sk_function_parms;
3170 p = p->level_chain)
3171 p->more_cleanups_ok = 0;
3173 if (name == get_identifier ("wchar_t"))
3174 permerror (input_location, "label named wchar_t");
3176 if (DECL_INITIAL (decl) != NULL_TREE)
3178 error ("duplicate label %qD", decl);
3179 return error_mark_node;
3181 else
3183 struct named_label_use_entry *use;
3185 /* Mark label as having been defined. */
3186 DECL_INITIAL (decl) = error_mark_node;
3187 /* Say where in the source. */
3188 DECL_SOURCE_LOCATION (decl) = location;
3190 ent->binding_level = current_binding_level;
3191 ent->names_in_scope = current_binding_level->names;
3193 for (use = ent->uses; use ; use = use->next)
3194 check_previous_goto (decl, use);
3195 ent->uses = NULL;
3198 return decl;
3201 /* Wrapper for define_label_1. */
3203 tree
3204 define_label (location_t location, tree name)
3206 tree ret;
3207 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3208 ret = define_label_1 (location, name);
3209 timevar_cond_stop (TV_NAME_LOOKUP, running);
3210 return ret;
3214 struct cp_switch
3216 cp_binding_level *level;
3217 struct cp_switch *next;
3218 /* The SWITCH_STMT being built. */
3219 tree switch_stmt;
3220 /* A splay-tree mapping the low element of a case range to the high
3221 element, or NULL_TREE if there is no high element. Used to
3222 determine whether or not a new case label duplicates an old case
3223 label. We need a tree, rather than simply a hash table, because
3224 of the GNU case range extension. */
3225 splay_tree cases;
3226 /* Remember whether there was a case value that is outside the
3227 range of the original type of the controlling expression. */
3228 bool outside_range_p;
3231 /* A stack of the currently active switch statements. The innermost
3232 switch statement is on the top of the stack. There is no need to
3233 mark the stack for garbage collection because it is only active
3234 during the processing of the body of a function, and we never
3235 collect at that point. */
3237 static struct cp_switch *switch_stack;
3239 /* Called right after a switch-statement condition is parsed.
3240 SWITCH_STMT is the switch statement being parsed. */
3242 void
3243 push_switch (tree switch_stmt)
3245 struct cp_switch *p = XNEW (struct cp_switch);
3246 p->level = current_binding_level;
3247 p->next = switch_stack;
3248 p->switch_stmt = switch_stmt;
3249 p->cases = splay_tree_new (case_compare, NULL, NULL);
3250 p->outside_range_p = false;
3251 switch_stack = p;
3254 void
3255 pop_switch (void)
3257 struct cp_switch *cs = switch_stack;
3258 location_t switch_location;
3260 /* Emit warnings as needed. */
3261 switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3262 const bool bool_cond_p
3263 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3264 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3265 if (!processing_template_decl)
3266 c_do_switch_warnings (cs->cases, switch_location,
3267 SWITCH_STMT_TYPE (cs->switch_stmt),
3268 SWITCH_STMT_COND (cs->switch_stmt),
3269 bool_cond_p, cs->outside_range_p);
3271 splay_tree_delete (cs->cases);
3272 switch_stack = switch_stack->next;
3273 free (cs);
3276 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3277 condition. Note that if TYPE and VALUE are already integral we don't
3278 really do the conversion because the language-independent
3279 warning/optimization code will work better that way. */
3281 static tree
3282 case_conversion (tree type, tree value)
3284 if (value == NULL_TREE)
3285 return value;
3287 if (cxx_dialect >= cxx11
3288 && (SCOPED_ENUM_P (type)
3289 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3291 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3292 type = type_promotes_to (type);
3293 value = (perform_implicit_conversion_flags
3294 (type, value, tf_warning_or_error,
3295 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3297 return cxx_constant_value (value);
3300 /* Note that we've seen a definition of a case label, and complain if this
3301 is a bad place for one. */
3303 tree
3304 finish_case_label (location_t loc, tree low_value, tree high_value)
3306 tree cond, r;
3307 cp_binding_level *p;
3308 tree type;
3310 if (processing_template_decl)
3312 tree label;
3314 /* For templates, just add the case label; we'll do semantic
3315 analysis at instantiation-time. */
3316 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3317 return add_stmt (build_case_label (low_value, high_value, label));
3320 /* Find the condition on which this switch statement depends. */
3321 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3322 if (cond && TREE_CODE (cond) == TREE_LIST)
3323 cond = TREE_VALUE (cond);
3325 if (!check_switch_goto (switch_stack->level))
3326 return error_mark_node;
3328 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3330 low_value = case_conversion (type, low_value);
3331 high_value = case_conversion (type, high_value);
3333 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3334 low_value, high_value,
3335 &switch_stack->outside_range_p);
3337 /* After labels, make any new cleanups in the function go into their
3338 own new (temporary) binding contour. */
3339 for (p = current_binding_level;
3340 p->kind != sk_function_parms;
3341 p = p->level_chain)
3342 p->more_cleanups_ok = 0;
3344 return r;
3347 struct typename_info {
3348 tree scope;
3349 tree name;
3350 tree template_id;
3351 bool enum_p;
3352 bool class_p;
3355 struct typename_hasher : ggc_ptr_hash<tree_node>
3357 typedef typename_info *compare_type;
3359 /* Hash a TYPENAME_TYPE. */
3361 static hashval_t
3362 hash (tree t)
3364 hashval_t hash;
3366 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3367 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3369 return hash;
3372 /* Compare two TYPENAME_TYPEs. */
3374 static bool
3375 equal (tree t1, const typename_info *t2)
3377 return (TYPE_IDENTIFIER (t1) == t2->name
3378 && TYPE_CONTEXT (t1) == t2->scope
3379 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3380 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3381 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3385 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3386 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3388 Returns the new TYPENAME_TYPE. */
3390 static GTY (()) hash_table<typename_hasher> *typename_htab;
3392 static tree
3393 build_typename_type (tree context, tree name, tree fullname,
3394 enum tag_types tag_type)
3396 tree t;
3397 tree d;
3398 typename_info ti;
3399 tree *e;
3400 hashval_t hash;
3402 if (typename_htab == NULL)
3403 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3405 ti.scope = FROB_CONTEXT (context);
3406 ti.name = name;
3407 ti.template_id = fullname;
3408 ti.enum_p = tag_type == enum_type;
3409 ti.class_p = (tag_type == class_type
3410 || tag_type == record_type
3411 || tag_type == union_type);
3412 hash = (htab_hash_pointer (ti.scope)
3413 ^ htab_hash_pointer (ti.name));
3415 /* See if we already have this type. */
3416 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3417 if (*e)
3418 t = *e;
3419 else
3421 /* Build the TYPENAME_TYPE. */
3422 t = cxx_make_type (TYPENAME_TYPE);
3423 TYPE_CONTEXT (t) = ti.scope;
3424 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3425 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3426 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3428 /* Build the corresponding TYPE_DECL. */
3429 d = build_decl (input_location, TYPE_DECL, name, t);
3430 TYPE_NAME (TREE_TYPE (d)) = d;
3431 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3432 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3433 DECL_ARTIFICIAL (d) = 1;
3435 /* Store it in the hash table. */
3436 *e = t;
3438 /* TYPENAME_TYPEs must always be compared structurally, because
3439 they may or may not resolve down to another type depending on
3440 the currently open classes. */
3441 SET_TYPE_STRUCTURAL_EQUALITY (t);
3444 return t;
3447 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3448 provided to name the type. Returns an appropriate type, unless an
3449 error occurs, in which case error_mark_node is returned. If we
3450 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3451 return that, rather than the _TYPE it corresponds to, in other
3452 cases we look through the type decl. If TF_ERROR is set, complain
3453 about errors, otherwise be quiet. */
3455 tree
3456 make_typename_type (tree context, tree name, enum tag_types tag_type,
3457 tsubst_flags_t complain)
3459 tree fullname;
3460 tree t;
3461 bool want_template;
3463 if (name == error_mark_node
3464 || context == NULL_TREE
3465 || context == error_mark_node)
3466 return error_mark_node;
3468 if (TYPE_P (name))
3470 if (!(TYPE_LANG_SPECIFIC (name)
3471 && (CLASSTYPE_IS_TEMPLATE (name)
3472 || CLASSTYPE_USE_TEMPLATE (name))))
3473 name = TYPE_IDENTIFIER (name);
3474 else
3475 /* Create a TEMPLATE_ID_EXPR for the type. */
3476 name = build_nt (TEMPLATE_ID_EXPR,
3477 CLASSTYPE_TI_TEMPLATE (name),
3478 CLASSTYPE_TI_ARGS (name));
3480 else if (TREE_CODE (name) == TYPE_DECL)
3481 name = DECL_NAME (name);
3483 fullname = name;
3485 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3487 name = TREE_OPERAND (name, 0);
3488 if (DECL_TYPE_TEMPLATE_P (name))
3489 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3490 if (TREE_CODE (name) != IDENTIFIER_NODE)
3492 if (complain & tf_error)
3493 error ("%qD is not a type", name);
3494 return error_mark_node;
3497 if (TREE_CODE (name) == TEMPLATE_DECL)
3499 if (complain & tf_error)
3500 error ("%qD used without template parameters", name);
3501 return error_mark_node;
3503 gcc_assert (identifier_p (name));
3504 gcc_assert (TYPE_P (context));
3506 if (!MAYBE_CLASS_TYPE_P (context))
3508 if (complain & tf_error)
3509 error ("%q#T is not a class", context);
3510 return error_mark_node;
3513 /* When the CONTEXT is a dependent type, NAME could refer to a
3514 dependent base class of CONTEXT. But look inside it anyway
3515 if CONTEXT is a currently open scope, in case it refers to a
3516 member of the current instantiation or a non-dependent base;
3517 lookup will stop when we hit a dependent base. */
3518 if (!dependent_scope_p (context))
3519 /* We should only set WANT_TYPE when we're a nested typename type.
3520 Then we can give better diagnostics if we find a non-type. */
3521 t = lookup_field (context, name, 2, /*want_type=*/true);
3522 else
3523 t = NULL_TREE;
3525 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3526 return build_typename_type (context, name, fullname, tag_type);
3528 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3530 if (!t)
3532 if (complain & tf_error)
3533 error (want_template ? G_("no class template named %q#T in %q#T")
3534 : G_("no type named %q#T in %q#T"), name, context);
3535 return error_mark_node;
3538 /* Pull out the template from an injected-class-name (or multiple). */
3539 if (want_template)
3540 t = maybe_get_template_decl_from_type_decl (t);
3542 if (TREE_CODE (t) == TREE_LIST)
3544 if (complain & tf_error)
3546 error ("lookup of %qT in %qT is ambiguous", name, context);
3547 print_candidates (t);
3549 return error_mark_node;
3552 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3554 if (complain & tf_error)
3555 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3556 context, name, t);
3557 return error_mark_node;
3559 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3561 if (complain & tf_error)
3562 error ("%<typename %T::%D%> names %q#T, which is not a type",
3563 context, name, t);
3564 return error_mark_node;
3567 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3568 return error_mark_node;
3570 /* If we are currently parsing a template and if T is a typedef accessed
3571 through CONTEXT then we need to remember and check access of T at
3572 template instantiation time. */
3573 add_typedef_to_current_template_for_access_check (t, context, input_location);
3575 if (want_template)
3576 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3577 NULL_TREE, context,
3578 /*entering_scope=*/0,
3579 complain | tf_user);
3581 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3582 t = TREE_TYPE (t);
3584 maybe_record_typedef_use (t);
3586 return t;
3589 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3590 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3591 in which case error_mark_node is returned.
3593 If PARM_LIST is non-NULL, also make sure that the template parameter
3594 list of TEMPLATE_DECL matches.
3596 If COMPLAIN zero, don't complain about any errors that occur. */
3598 tree
3599 make_unbound_class_template (tree context, tree name, tree parm_list,
3600 tsubst_flags_t complain)
3602 tree t;
3603 tree d;
3605 if (TYPE_P (name))
3606 name = TYPE_IDENTIFIER (name);
3607 else if (DECL_P (name))
3608 name = DECL_NAME (name);
3609 gcc_assert (identifier_p (name));
3611 if (!dependent_type_p (context)
3612 || currently_open_class (context))
3614 tree tmpl = NULL_TREE;
3616 if (MAYBE_CLASS_TYPE_P (context))
3617 tmpl = lookup_field (context, name, 0, false);
3619 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3620 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3622 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3624 if (complain & tf_error)
3625 error ("no class template named %q#T in %q#T", name, context);
3626 return error_mark_node;
3629 if (parm_list
3630 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3632 if (complain & tf_error)
3634 error ("template parameters do not match template %qD", tmpl);
3635 inform (DECL_SOURCE_LOCATION (tmpl),
3636 "%qD declared here", tmpl);
3638 return error_mark_node;
3641 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3642 complain))
3643 return error_mark_node;
3645 return tmpl;
3648 /* Build the UNBOUND_CLASS_TEMPLATE. */
3649 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3650 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3651 TREE_TYPE (t) = NULL_TREE;
3652 SET_TYPE_STRUCTURAL_EQUALITY (t);
3654 /* Build the corresponding TEMPLATE_DECL. */
3655 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3656 TYPE_NAME (TREE_TYPE (d)) = d;
3657 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3658 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3659 DECL_ARTIFICIAL (d) = 1;
3660 DECL_TEMPLATE_PARMS (d) = parm_list;
3662 return t;
3667 /* Push the declarations of builtin types into the namespace.
3668 RID_INDEX is the index of the builtin type in the array
3669 RID_POINTERS. NAME is the name used when looking up the builtin
3670 type. TYPE is the _TYPE node for the builtin type. */
3672 void
3673 record_builtin_type (enum rid rid_index,
3674 const char* name,
3675 tree type)
3677 tree rname = NULL_TREE, tname = NULL_TREE;
3678 tree tdecl = NULL_TREE;
3680 if ((int) rid_index < (int) RID_MAX)
3681 rname = ridpointers[(int) rid_index];
3682 if (name)
3683 tname = get_identifier (name);
3685 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3686 eliminated. Built-in types should not be looked up name; their
3687 names are keywords that the parser can recognize. However, there
3688 is code in c-common.c that uses identifier_global_value to look
3689 up built-in types by name. */
3690 if (tname)
3692 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3693 DECL_ARTIFICIAL (tdecl) = 1;
3694 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3696 if (rname)
3698 if (!tdecl)
3700 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3701 DECL_ARTIFICIAL (tdecl) = 1;
3703 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3706 if (!TYPE_NAME (type))
3707 TYPE_NAME (type) = tdecl;
3709 if (tdecl)
3710 debug_hooks->type_decl (tdecl, 0);
3713 /* Record one of the standard Java types.
3714 * Declare it as having the given NAME.
3715 * If SIZE > 0, it is the size of one of the integral types;
3716 * otherwise it is the negative of the size of one of the other types. */
3718 static tree
3719 record_builtin_java_type (const char* name, int size)
3721 tree type, decl;
3722 if (size > 0)
3724 type = build_nonstandard_integer_type (size, 0);
3725 type = build_distinct_type_copy (type);
3727 else if (size > -32)
3729 tree stype;
3730 /* "__java_char" or ""__java_boolean". */
3731 type = build_nonstandard_integer_type (-size, 1);
3732 type = build_distinct_type_copy (type);
3733 /* Get the signed type cached and attached to the unsigned type,
3734 so it doesn't get garbage-collected at "random" times,
3735 causing potential codegen differences out of different UIDs
3736 and different alias set numbers. */
3737 stype = build_nonstandard_integer_type (-size, 0);
3738 stype = build_distinct_type_copy (stype);
3739 TREE_CHAIN (type) = stype;
3740 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3742 else
3743 { /* "__java_float" or ""__java_double". */
3744 type = make_node (REAL_TYPE);
3745 TYPE_PRECISION (type) = - size;
3746 layout_type (type);
3748 record_builtin_type (RID_MAX, name, type);
3749 decl = TYPE_NAME (type);
3751 /* Suppress generate debug symbol entries for these types,
3752 since for normal C++ they are just clutter.
3753 However, push_lang_context undoes this if extern "Java" is seen. */
3754 DECL_IGNORED_P (decl) = 1;
3756 TYPE_FOR_JAVA (type) = 1;
3757 return type;
3760 /* Push a type into the namespace so that the back ends ignore it. */
3762 static void
3763 record_unknown_type (tree type, const char* name)
3765 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3766 TYPE_DECL, get_identifier (name), type));
3767 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3768 DECL_IGNORED_P (decl) = 1;
3769 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3770 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3771 TYPE_ALIGN (type) = 1;
3772 TYPE_USER_ALIGN (type) = 0;
3773 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3776 /* A string for which we should create an IDENTIFIER_NODE at
3777 startup. */
3779 typedef struct predefined_identifier
3781 /* The name of the identifier. */
3782 const char *const name;
3783 /* The place where the IDENTIFIER_NODE should be stored. */
3784 tree *const node;
3785 /* Nonzero if this is the name of a constructor or destructor. */
3786 const int ctor_or_dtor_p;
3787 } predefined_identifier;
3789 /* Create all the predefined identifiers. */
3791 static void
3792 initialize_predefined_identifiers (void)
3794 const predefined_identifier *pid;
3796 /* A table of identifiers to create at startup. */
3797 static const predefined_identifier predefined_identifiers[] = {
3798 { "C++", &lang_name_cplusplus, 0 },
3799 { "C", &lang_name_c, 0 },
3800 { "Java", &lang_name_java, 0 },
3801 /* Some of these names have a trailing space so that it is
3802 impossible for them to conflict with names written by users. */
3803 { "__ct ", &ctor_identifier, 1 },
3804 { "__base_ctor ", &base_ctor_identifier, 1 },
3805 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3806 { "__dt ", &dtor_identifier, 1 },
3807 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3808 { "__base_dtor ", &base_dtor_identifier, 1 },
3809 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3810 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3811 { "nelts", &nelts_identifier, 0 },
3812 { THIS_NAME, &this_identifier, 0 },
3813 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3814 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3815 { "_vptr", &vptr_identifier, 0 },
3816 { "__vtt_parm", &vtt_parm_identifier, 0 },
3817 { "::", &global_scope_name, 0 },
3818 { "std", &std_identifier, 0 },
3819 { NULL, NULL, 0 }
3822 for (pid = predefined_identifiers; pid->name; ++pid)
3824 *pid->node = get_identifier (pid->name);
3825 if (pid->ctor_or_dtor_p)
3826 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3830 /* Create the predefined scalar types of C,
3831 and some nodes representing standard constants (0, 1, (void *)0).
3832 Initialize the global binding level.
3833 Make definitions for built-in primitive functions. */
3835 void
3836 cxx_init_decl_processing (void)
3838 tree void_ftype;
3839 tree void_ftype_ptr;
3841 /* Create all the identifiers we need. */
3842 initialize_predefined_identifiers ();
3844 /* Create the global variables. */
3845 push_to_top_level ();
3847 current_function_decl = NULL_TREE;
3848 current_binding_level = NULL;
3849 /* Enter the global namespace. */
3850 gcc_assert (global_namespace == NULL_TREE);
3851 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3852 void_type_node);
3853 DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3854 debug_hooks->register_main_translation_unit
3855 (DECL_CONTEXT (global_namespace));
3856 TREE_PUBLIC (global_namespace) = 1;
3857 begin_scope (sk_namespace, global_namespace);
3859 if (flag_visibility_ms_compat)
3860 default_visibility = VISIBILITY_HIDDEN;
3862 /* Initially, C. */
3863 current_lang_name = lang_name_c;
3865 /* Create the `std' namespace. */
3866 push_namespace (std_identifier);
3867 std_node = current_namespace;
3868 pop_namespace ();
3870 c_common_nodes_and_builtins ();
3872 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3873 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3874 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3875 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3876 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3877 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3878 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3879 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3881 integer_two_node = build_int_cst (NULL_TREE, 2);
3883 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3884 truthvalue_type_node = boolean_type_node;
3885 truthvalue_false_node = boolean_false_node;
3886 truthvalue_true_node = boolean_true_node;
3888 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3889 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3890 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3892 #if 0
3893 record_builtin_type (RID_MAX, NULL, string_type_node);
3894 #endif
3896 delta_type_node = ptrdiff_type_node;
3897 vtable_index_type = ptrdiff_type_node;
3899 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3900 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3901 void_ftype_ptr = build_function_type_list (void_type_node,
3902 ptr_type_node, NULL_TREE);
3903 void_ftype_ptr
3904 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3906 /* C++ extensions */
3908 unknown_type_node = make_node (LANG_TYPE);
3909 record_unknown_type (unknown_type_node, "unknown type");
3911 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3912 TREE_TYPE (unknown_type_node) = unknown_type_node;
3914 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3915 result. */
3916 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3917 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3919 init_list_type_node = make_node (LANG_TYPE);
3920 record_unknown_type (init_list_type_node, "init list");
3923 /* Make sure we get a unique function type, so we can give
3924 its pointer type a name. (This wins for gdb.) */
3925 tree vfunc_type = make_node (FUNCTION_TYPE);
3926 TREE_TYPE (vfunc_type) = integer_type_node;
3927 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3928 layout_type (vfunc_type);
3930 vtable_entry_type = build_pointer_type (vfunc_type);
3932 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3934 vtbl_type_node
3935 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3936 layout_type (vtbl_type_node);
3937 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3938 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3939 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3940 layout_type (vtbl_ptr_type_node);
3941 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3943 push_namespace (get_identifier ("__cxxabiv1"));
3944 abi_node = current_namespace;
3945 pop_namespace ();
3947 global_type_node = make_node (LANG_TYPE);
3948 record_unknown_type (global_type_node, "global type");
3950 /* Now, C++. */
3951 current_lang_name = lang_name_cplusplus;
3954 tree newattrs, extvisattr;
3955 tree newtype, deltype;
3956 tree ptr_ftype_sizetype;
3957 tree new_eh_spec;
3959 ptr_ftype_sizetype
3960 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3961 if (cxx_dialect == cxx98)
3963 tree bad_alloc_id;
3964 tree bad_alloc_type_node;
3965 tree bad_alloc_decl;
3967 push_namespace (std_identifier);
3968 bad_alloc_id = get_identifier ("bad_alloc");
3969 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3970 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3971 bad_alloc_decl
3972 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3973 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3974 pop_namespace ();
3976 new_eh_spec
3977 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3979 else
3980 new_eh_spec = noexcept_false_spec;
3982 /* Ensure attribs.c is initialized. */
3983 init_attributes ();
3984 extvisattr = build_tree_list (get_identifier ("externally_visible"),
3985 NULL_TREE);
3986 newattrs = tree_cons (get_identifier ("alloc_size"),
3987 build_tree_list (NULL_TREE, integer_one_node),
3988 extvisattr);
3989 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3990 newtype = build_exception_variant (newtype, new_eh_spec);
3991 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3992 deltype = build_exception_variant (deltype, empty_except_spec);
3993 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
3994 DECL_IS_MALLOC (opnew) = 1;
3995 DECL_IS_OPERATOR_NEW (opnew) = 1;
3996 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
3997 DECL_IS_MALLOC (opnew) = 1;
3998 DECL_IS_OPERATOR_NEW (opnew) = 1;
3999 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4000 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4001 if (flag_sized_deallocation)
4003 /* Also push the sized deallocation variants:
4004 void operator delete(void*, std::size_t) throw();
4005 void operator delete[](void*, std::size_t) throw(); */
4006 tree void_ftype_ptr_size
4007 = build_function_type_list (void_type_node, ptr_type_node,
4008 size_type_node, NULL_TREE);
4009 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4010 extvisattr);
4011 deltype = build_exception_variant (deltype, empty_except_spec);
4012 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4013 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4016 nullptr_type_node = make_node (NULLPTR_TYPE);
4017 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4018 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4019 TYPE_UNSIGNED (nullptr_type_node) = 1;
4020 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4021 if (abi_version_at_least (9))
4022 TYPE_ALIGN (nullptr_type_node) = GET_MODE_ALIGNMENT (ptr_mode);
4023 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4024 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4025 nullptr_node = build_int_cst (nullptr_type_node, 0);
4028 abort_fndecl
4029 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4030 ECF_NORETURN | ECF_NOTHROW);
4032 /* Perform other language dependent initializations. */
4033 init_class_processing ();
4034 init_rtti_processing ();
4035 init_template_processing ();
4037 if (flag_exceptions)
4038 init_exception_processing ();
4040 if (! supports_one_only ())
4041 flag_weak = 0;
4043 make_fname_decl = cp_make_fname_decl;
4044 start_fname_decls ();
4046 /* Show we use EH for cleanups. */
4047 if (flag_exceptions)
4048 using_eh_for_cleanups ();
4051 /* Generate an initializer for a function naming variable from
4052 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4053 filled in with the type of the init. */
4055 tree
4056 cp_fname_init (const char* name, tree *type_p)
4058 tree domain = NULL_TREE;
4059 tree type;
4060 tree init = NULL_TREE;
4061 size_t length = 0;
4063 if (name)
4065 length = strlen (name);
4066 domain = build_index_type (size_int (length));
4067 init = build_string (length + 1, name);
4070 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4071 type = build_cplus_array_type (type, domain);
4073 *type_p = type;
4075 if (init)
4076 TREE_TYPE (init) = type;
4077 else
4078 init = error_mark_node;
4080 return init;
4083 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4084 the decl, LOC is the location to give the decl, NAME is the
4085 initialization string and TYPE_DEP indicates whether NAME depended
4086 on the type of the function. We make use of that to detect
4087 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4088 at the point of first use, so we mustn't push the decl now. */
4090 static tree
4091 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4093 const char *const name = (type_dep && processing_template_decl
4094 ? NULL : fname_as_string (type_dep));
4095 tree type;
4096 tree init = cp_fname_init (name, &type);
4097 tree decl = build_decl (loc, VAR_DECL, id, type);
4099 if (name)
4100 free (CONST_CAST (char *, name));
4102 /* As we're using pushdecl_with_scope, we must set the context. */
4103 DECL_CONTEXT (decl) = current_function_decl;
4105 TREE_STATIC (decl) = 1;
4106 TREE_READONLY (decl) = 1;
4107 DECL_ARTIFICIAL (decl) = 1;
4109 TREE_USED (decl) = 1;
4111 if (current_function_decl)
4113 cp_binding_level *b = current_binding_level;
4114 if (b->kind == sk_function_parms)
4115 return error_mark_node;
4116 while (b->level_chain->kind != sk_function_parms)
4117 b = b->level_chain;
4118 pushdecl_with_scope (decl, b, /*is_friend=*/false);
4119 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4120 LOOKUP_ONLYCONVERTING);
4122 else
4124 DECL_THIS_STATIC (decl) = true;
4125 pushdecl_top_level_and_finish (decl, init);
4128 return decl;
4131 static tree
4132 builtin_function_1 (tree decl, tree context, bool is_global)
4134 tree id = DECL_NAME (decl);
4135 const char *name = IDENTIFIER_POINTER (id);
4137 retrofit_lang_decl (decl);
4139 DECL_ARTIFICIAL (decl) = 1;
4140 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
4141 SET_DECL_LANGUAGE (decl, lang_c);
4142 /* Runtime library routines are, by definition, available in an
4143 external shared object. */
4144 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4145 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4147 DECL_CONTEXT (decl) = context;
4149 if (is_global)
4150 pushdecl_top_level (decl);
4151 else
4152 pushdecl (decl);
4154 /* A function in the user's namespace should have an explicit
4155 declaration before it is used. Mark the built-in function as
4156 anticipated but not actually declared. */
4157 if (name[0] != '_' || name[1] != '_')
4158 DECL_ANTICIPATED (decl) = 1;
4159 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4161 size_t len = strlen (name);
4163 /* Treat __*_chk fortification functions as anticipated as well,
4164 unless they are __builtin_*. */
4165 if (len > strlen ("___chk")
4166 && memcmp (name + len - strlen ("_chk"),
4167 "_chk", strlen ("_chk") + 1) == 0)
4168 DECL_ANTICIPATED (decl) = 1;
4171 return decl;
4174 tree
4175 cxx_builtin_function (tree decl)
4177 tree id = DECL_NAME (decl);
4178 const char *name = IDENTIFIER_POINTER (id);
4179 /* All builtins that don't begin with an '_' should additionally
4180 go in the 'std' namespace. */
4181 if (name[0] != '_')
4183 tree decl2 = copy_node(decl);
4184 push_namespace (std_identifier);
4185 builtin_function_1 (decl2, std_node, false);
4186 pop_namespace ();
4189 return builtin_function_1 (decl, NULL_TREE, false);
4192 /* Like cxx_builtin_function, but guarantee the function is added to the global
4193 scope. This is to allow function specific options to add new machine
4194 dependent builtins when the target ISA changes via attribute((target(...)))
4195 which saves space on program startup if the program does not use non-generic
4196 ISAs. */
4198 tree
4199 cxx_builtin_function_ext_scope (tree decl)
4202 tree id = DECL_NAME (decl);
4203 const char *name = IDENTIFIER_POINTER (id);
4204 /* All builtins that don't begin with an '_' should additionally
4205 go in the 'std' namespace. */
4206 if (name[0] != '_')
4208 tree decl2 = copy_node(decl);
4209 push_namespace (std_identifier);
4210 builtin_function_1 (decl2, std_node, true);
4211 pop_namespace ();
4214 return builtin_function_1 (decl, NULL_TREE, true);
4217 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4218 function. Not called directly. */
4220 static tree
4221 build_library_fn (tree name, enum tree_code operator_code, tree type,
4222 int ecf_flags)
4224 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4225 DECL_EXTERNAL (fn) = 1;
4226 TREE_PUBLIC (fn) = 1;
4227 DECL_ARTIFICIAL (fn) = 1;
4228 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4229 SET_DECL_LANGUAGE (fn, lang_c);
4230 /* Runtime library routines are, by definition, available in an
4231 external shared object. */
4232 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4233 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4234 set_call_expr_flags (fn, ecf_flags);
4235 return fn;
4238 /* Returns the _DECL for a library function with C++ linkage. */
4240 static tree
4241 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4242 int ecf_flags)
4244 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4245 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4246 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4247 return fn;
4250 /* Like build_library_fn, but takes a C string instead of an
4251 IDENTIFIER_NODE. */
4253 tree
4254 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4256 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4259 /* Like build_cp_library_fn, but takes a C string instead of an
4260 IDENTIFIER_NODE. */
4262 tree
4263 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4265 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4266 ecf_flags);
4269 /* Like build_library_fn, but also pushes the function so that we will
4270 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
4271 may throw exceptions listed in RAISES. */
4273 tree
4274 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4276 tree fn;
4278 if (raises)
4279 type = build_exception_variant (type, raises);
4281 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4282 pushdecl_top_level (fn);
4283 return fn;
4286 /* Like build_cp_library_fn, but also pushes the function so that it
4287 will be found by normal lookup. */
4289 static tree
4290 push_cp_library_fn (enum tree_code operator_code, tree type,
4291 int ecf_flags)
4293 tree fn = build_cp_library_fn (ansi_opname (operator_code),
4294 operator_code,
4295 type, ecf_flags);
4296 pushdecl (fn);
4297 if (flag_tm)
4298 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4299 return fn;
4302 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4303 a FUNCTION_TYPE. */
4305 tree
4306 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4308 tree type = build_function_type (void_type_node, parmtypes);
4309 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4312 /* Like push_library_fn, but also note that this function throws
4313 and does not return. Used for __throw_foo and the like. */
4315 tree
4316 push_throw_library_fn (tree name, tree type)
4318 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4319 return fn;
4322 /* When we call finish_struct for an anonymous union, we create
4323 default copy constructors and such. But, an anonymous union
4324 shouldn't have such things; this function undoes the damage to the
4325 anonymous union type T.
4327 (The reason that we create the synthesized methods is that we don't
4328 distinguish `union { int i; }' from `typedef union { int i; } U'.
4329 The first is an anonymous union; the second is just an ordinary
4330 union type.) */
4332 void
4333 fixup_anonymous_aggr (tree t)
4335 tree *q;
4337 /* Wipe out memory of synthesized methods. */
4338 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4339 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4340 TYPE_HAS_COPY_CTOR (t) = 0;
4341 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4342 TYPE_HAS_COPY_ASSIGN (t) = 0;
4343 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4345 /* Splice the implicitly generated functions out of the TYPE_METHODS
4346 list. */
4347 q = &TYPE_METHODS (t);
4348 while (*q)
4350 if (DECL_ARTIFICIAL (*q))
4351 *q = TREE_CHAIN (*q);
4352 else
4353 q = &DECL_CHAIN (*q);
4356 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
4357 if (TYPE_METHODS (t))
4359 tree decl = TYPE_MAIN_DECL (t);
4361 if (TREE_CODE (t) != UNION_TYPE)
4362 error_at (DECL_SOURCE_LOCATION (decl),
4363 "an anonymous struct cannot have function members");
4364 else
4365 error_at (DECL_SOURCE_LOCATION (decl),
4366 "an anonymous union cannot have function members");
4369 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4370 assignment operators (because they cannot have these methods themselves).
4371 For anonymous unions this is already checked because they are not allowed
4372 in any union, otherwise we have to check it. */
4373 if (TREE_CODE (t) != UNION_TYPE)
4375 tree field, type;
4377 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4378 if (TREE_CODE (field) == FIELD_DECL)
4380 type = TREE_TYPE (field);
4381 if (CLASS_TYPE_P (type))
4383 if (TYPE_NEEDS_CONSTRUCTING (type))
4384 error ("member %q+#D with constructor not allowed "
4385 "in anonymous aggregate", field);
4386 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4387 error ("member %q+#D with destructor not allowed "
4388 "in anonymous aggregate", field);
4389 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4390 error ("member %q+#D with copy assignment operator "
4391 "not allowed in anonymous aggregate", field);
4397 /* Warn for an attribute located at LOCATION that appertains to the
4398 class type CLASS_TYPE that has not been properly placed after its
4399 class-key, in it class-specifier. */
4401 void
4402 warn_misplaced_attr_for_class_type (source_location location,
4403 tree class_type)
4405 gcc_assert (OVERLOAD_TYPE_P (class_type));
4407 if (warning_at (location, OPT_Wattributes,
4408 "attribute ignored in declaration "
4409 "of %q#T", class_type))
4410 inform (location,
4411 "attribute for %q#T must follow the %qs keyword",
4412 class_type, class_key_or_enum_as_string (class_type));
4415 /* Make sure that a declaration with no declarator is well-formed, i.e.
4416 just declares a tagged type or anonymous union.
4418 Returns the type declared; or NULL_TREE if none. */
4420 tree
4421 check_tag_decl (cp_decl_specifier_seq *declspecs,
4422 bool explicit_type_instantiation_p)
4424 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4425 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4426 /* If a class, struct, or enum type is declared by the DECLSPECS
4427 (i.e, if a class-specifier, enum-specifier, or non-typename
4428 elaborated-type-specifier appears in the DECLSPECS),
4429 DECLARED_TYPE is set to the corresponding type. */
4430 tree declared_type = NULL_TREE;
4431 bool error_p = false;
4433 if (declspecs->multiple_types_p)
4434 error ("multiple types in one declaration");
4435 else if (declspecs->redefined_builtin_type)
4437 if (!in_system_header_at (input_location))
4438 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4439 "redeclaration of C++ built-in type %qT",
4440 declspecs->redefined_builtin_type);
4441 return NULL_TREE;
4444 if (declspecs->type
4445 && TYPE_P (declspecs->type)
4446 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4447 && MAYBE_CLASS_TYPE_P (declspecs->type))
4448 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4449 declared_type = declspecs->type;
4450 else if (declspecs->type == error_mark_node)
4451 error_p = true;
4452 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4453 permerror (input_location, "declaration does not declare anything");
4454 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4456 error ("%<auto%> can only be specified for variables "
4457 "or function declarations");
4458 return error_mark_node;
4460 /* Check for an anonymous union. */
4461 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4462 && TYPE_ANONYMOUS_P (declared_type))
4464 /* 7/3 In a simple-declaration, the optional init-declarator-list
4465 can be omitted only when declaring a class (clause 9) or
4466 enumeration (7.2), that is, when the decl-specifier-seq contains
4467 either a class-specifier, an elaborated-type-specifier with
4468 a class-key (9.1), or an enum-specifier. In these cases and
4469 whenever a class-specifier or enum-specifier is present in the
4470 decl-specifier-seq, the identifiers in these specifiers are among
4471 the names being declared by the declaration (as class-name,
4472 enum-names, or enumerators, depending on the syntax). In such
4473 cases, and except for the declaration of an unnamed bit-field (9.6),
4474 the decl-specifier-seq shall introduce one or more names into the
4475 program, or shall redeclare a name introduced by a previous
4476 declaration. [Example:
4477 enum { }; // ill-formed
4478 typedef class { }; // ill-formed
4479 --end example] */
4480 if (saw_typedef)
4482 error ("missing type-name in typedef-declaration");
4483 return NULL_TREE;
4485 /* Anonymous unions are objects, so they can have specifiers. */;
4486 SET_ANON_AGGR_TYPE_P (declared_type);
4488 if (TREE_CODE (declared_type) != UNION_TYPE
4489 && !in_system_header_at (input_location))
4490 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4493 else
4495 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4496 error_at (declspecs->locations[ds_inline],
4497 "%<inline%> can only be specified for functions");
4498 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4499 error_at (declspecs->locations[ds_virtual],
4500 "%<virtual%> can only be specified for functions");
4501 else if (saw_friend
4502 && (!current_class_type
4503 || current_scope () != current_class_type))
4504 error_at (declspecs->locations[ds_friend],
4505 "%<friend%> can only be specified inside a class");
4506 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4507 error_at (declspecs->locations[ds_explicit],
4508 "%<explicit%> can only be specified for constructors");
4509 else if (declspecs->storage_class)
4510 error_at (declspecs->locations[ds_storage_class],
4511 "a storage class can only be specified for objects "
4512 "and functions");
4513 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4514 error_at (declspecs->locations[ds_const],
4515 "%<const%> can only be specified for objects and "
4516 "functions");
4517 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4518 error_at (declspecs->locations[ds_volatile],
4519 "%<volatile%> can only be specified for objects and "
4520 "functions");
4521 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4522 error_at (declspecs->locations[ds_restrict],
4523 "%<__restrict%> can only be specified for objects and "
4524 "functions");
4525 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4526 error_at (declspecs->locations[ds_thread],
4527 "%<__thread%> can only be specified for objects "
4528 "and functions");
4529 else if (saw_typedef)
4530 warning_at (declspecs->locations[ds_typedef], 0,
4531 "%<typedef%> was ignored in this declaration");
4532 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4533 error_at (declspecs->locations[ds_constexpr],
4534 "%<constexpr%> cannot be used for type declarations");
4537 if (declspecs->attributes && warn_attributes && declared_type)
4539 location_t loc;
4540 if (!CLASS_TYPE_P (declared_type)
4541 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4542 /* For a non-template class, use the name location. */
4543 loc = location_of (declared_type);
4544 else
4545 /* For a template class (an explicit instantiation), use the
4546 current location. */
4547 loc = input_location;
4549 if (explicit_type_instantiation_p)
4550 /* [dcl.attr.grammar]/4:
4552 No attribute-specifier-seq shall appertain to an explicit
4553 instantiation. */
4555 if (warning_at (loc, OPT_Wattributes,
4556 "attribute ignored in explicit instantiation %q#T",
4557 declared_type))
4558 inform (loc,
4559 "no attribute can be applied to "
4560 "an explicit instantiation");
4562 else
4563 warn_misplaced_attr_for_class_type (loc, declared_type);
4566 return declared_type;
4569 /* Called when a declaration is seen that contains no names to declare.
4570 If its type is a reference to a structure, union or enum inherited
4571 from a containing scope, shadow that tag name for the current scope
4572 with a forward reference.
4573 If its type defines a new named structure or union
4574 or defines an enum, it is valid but we need not do anything here.
4575 Otherwise, it is an error.
4577 C++: may have to grok the declspecs to learn about static,
4578 complain for anonymous unions.
4580 Returns the TYPE declared -- or NULL_TREE if none. */
4582 tree
4583 shadow_tag (cp_decl_specifier_seq *declspecs)
4585 tree t = check_tag_decl (declspecs,
4586 /*explicit_type_instantiation_p=*/false);
4588 if (!t)
4589 return NULL_TREE;
4591 if (maybe_process_partial_specialization (t) == error_mark_node)
4592 return NULL_TREE;
4594 /* This is where the variables in an anonymous union are
4595 declared. An anonymous union declaration looks like:
4596 union { ... } ;
4597 because there is no declarator after the union, the parser
4598 sends that declaration here. */
4599 if (ANON_AGGR_TYPE_P (t))
4601 fixup_anonymous_aggr (t);
4603 if (TYPE_FIELDS (t))
4605 tree decl = grokdeclarator (/*declarator=*/NULL,
4606 declspecs, NORMAL, 0, NULL);
4607 finish_anon_union (decl);
4611 return t;
4614 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4616 tree
4617 groktypename (cp_decl_specifier_seq *type_specifiers,
4618 const cp_declarator *declarator,
4619 bool is_template_arg)
4621 tree attrs;
4622 tree type;
4623 enum decl_context context
4624 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4625 attrs = type_specifiers->attributes;
4626 type_specifiers->attributes = NULL_TREE;
4627 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4628 if (attrs && type != error_mark_node)
4630 if (CLASS_TYPE_P (type))
4631 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4632 "outside of definition", type);
4633 else if (MAYBE_CLASS_TYPE_P (type))
4634 /* A template type parameter or other dependent type. */
4635 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4636 "type %qT without an associated declaration", type);
4637 else
4638 cplus_decl_attributes (&type, attrs, 0);
4640 return type;
4643 /* Process a DECLARATOR for a function-scope variable declaration,
4644 namespace-scope variable declaration, or function declaration.
4645 (Function definitions go through start_function; class member
4646 declarations appearing in the body of the class go through
4647 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4648 If an error occurs, the error_mark_node is returned instead.
4650 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4651 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4652 for an explicitly defaulted function, or SD_DELETED for an explicitly
4653 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4654 implicitly initialized via a default constructor. ATTRIBUTES and
4655 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4657 The scope represented by the context of the returned DECL is pushed
4658 (if it is not the global namespace) and is assigned to
4659 *PUSHED_SCOPE_P. The caller is then responsible for calling
4660 pop_scope on *PUSHED_SCOPE_P if it is set. */
4662 tree
4663 start_decl (const cp_declarator *declarator,
4664 cp_decl_specifier_seq *declspecs,
4665 int initialized,
4666 tree attributes,
4667 tree prefix_attributes,
4668 tree *pushed_scope_p)
4670 tree decl;
4671 tree context;
4672 bool was_public;
4673 int flags;
4674 bool alias;
4676 *pushed_scope_p = NULL_TREE;
4678 /* An object declared as __attribute__((deprecated)) suppresses
4679 warnings of uses of other deprecated items. */
4680 if (lookup_attribute ("deprecated", attributes))
4681 deprecated_state = DEPRECATED_SUPPRESS;
4683 attributes = chainon (attributes, prefix_attributes);
4685 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4686 &attributes);
4688 deprecated_state = DEPRECATED_NORMAL;
4690 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4691 || decl == error_mark_node)
4692 return error_mark_node;
4694 context = CP_DECL_CONTEXT (decl);
4695 if (context != global_namespace)
4696 *pushed_scope_p = push_scope (context);
4698 /* Is it valid for this decl to have an initializer at all?
4699 If not, set INITIALIZED to zero, which will indirectly
4700 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4701 if (initialized
4702 && TREE_CODE (decl) == TYPE_DECL)
4704 error ("typedef %qD is initialized (use decltype instead)", decl);
4705 return error_mark_node;
4708 if (initialized)
4710 if (! toplevel_bindings_p ()
4711 && DECL_EXTERNAL (decl))
4712 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4713 decl);
4714 DECL_EXTERNAL (decl) = 0;
4715 if (toplevel_bindings_p ())
4716 TREE_STATIC (decl) = 1;
4718 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4720 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4721 record_key_method_defined (decl);
4723 /* If this is a typedef that names the class for linkage purposes
4724 (7.1.3p8), apply any attributes directly to the type. */
4725 if (TREE_CODE (decl) == TYPE_DECL
4726 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4727 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4728 flags = ATTR_FLAG_TYPE_IN_PLACE;
4729 else
4730 flags = 0;
4732 /* Set attributes here so if duplicate decl, will have proper attributes. */
4733 cplus_decl_attributes (&decl, attributes, flags);
4735 /* Dllimported symbols cannot be defined. Static data members (which
4736 can be initialized in-class and dllimported) go through grokfield,
4737 not here, so we don't need to exclude those decls when checking for
4738 a definition. */
4739 if (initialized && DECL_DLLIMPORT_P (decl))
4741 error ("definition of %q#D is marked %<dllimport%>", decl);
4742 DECL_DLLIMPORT_P (decl) = 0;
4745 /* If #pragma weak was used, mark the decl weak now. */
4746 if (!processing_template_decl)
4747 maybe_apply_pragma_weak (decl);
4749 if (TREE_CODE (decl) == FUNCTION_DECL
4750 && DECL_DECLARED_INLINE_P (decl)
4751 && DECL_UNINLINABLE (decl)
4752 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4753 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4754 "inline function %qD given attribute noinline", decl);
4756 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4758 bool this_tmpl = (processing_template_decl
4759 > template_class_depth (context));
4760 if (VAR_P (decl))
4762 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4763 if (field == NULL_TREE
4764 || !(VAR_P (field) || variable_template_p (field)))
4765 error ("%q+#D is not a static data member of %q#T", decl, context);
4766 else if (variable_template_p (field) && !this_tmpl)
4768 if (DECL_LANG_SPECIFIC (decl)
4769 && DECL_TEMPLATE_SPECIALIZATION (decl))
4770 /* OK, specialization was already checked. */;
4771 else
4773 error_at (DECL_SOURCE_LOCATION (decl),
4774 "non-member-template declaration of %qD", decl);
4775 inform (DECL_SOURCE_LOCATION (field), "does not match "
4776 "member template declaration here");
4777 return error_mark_node;
4780 else
4782 if (variable_template_p (field))
4783 field = DECL_TEMPLATE_RESULT (field);
4785 if (DECL_CONTEXT (field) != context)
4787 if (!same_type_p (DECL_CONTEXT (field), context))
4788 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4789 "to be defined as %<%T::%D%>",
4790 DECL_CONTEXT (field), DECL_NAME (decl),
4791 context, DECL_NAME (decl));
4792 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4794 /* Static data member are tricky; an in-class initialization
4795 still doesn't provide a definition, so the in-class
4796 declaration will have DECL_EXTERNAL set, but will have an
4797 initialization. Thus, duplicate_decls won't warn
4798 about this situation, and so we check here. */
4799 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4800 error ("duplicate initialization of %qD", decl);
4801 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4802 decl = field;
4803 if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4804 && !DECL_DECLARED_CONSTEXPR_P (field))
4805 error ("%qD declared %<constexpr%> outside its class", field);
4808 else
4810 tree field = check_classfn (context, decl,
4811 this_tmpl
4812 ? current_template_parms
4813 : NULL_TREE);
4814 if (field && field != error_mark_node
4815 && duplicate_decls (decl, field,
4816 /*newdecl_is_friend=*/false))
4817 decl = field;
4820 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4821 DECL_IN_AGGR_P (decl) = 0;
4822 /* Do not mark DECL as an explicit specialization if it was not
4823 already marked as an instantiation; a declaration should
4824 never be marked as a specialization unless we know what
4825 template is being specialized. */
4826 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4828 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4829 if (TREE_CODE (decl) == FUNCTION_DECL)
4830 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
4831 && DECL_DECLARED_INLINE_P (decl));
4832 else
4833 DECL_COMDAT (decl) = false;
4835 /* [temp.expl.spec] An explicit specialization of a static data
4836 member of a template is a definition if the declaration
4837 includes an initializer; otherwise, it is a declaration.
4839 We check for processing_specialization so this only applies
4840 to the new specialization syntax. */
4841 if (!initialized && processing_specialization)
4842 DECL_EXTERNAL (decl) = 1;
4845 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4846 /* Aliases are definitions. */
4847 && !alias)
4848 permerror (input_location, "declaration of %q#D outside of class is not definition",
4849 decl);
4852 was_public = TREE_PUBLIC (decl);
4854 /* Enter this declaration into the symbol table. Don't push the plain
4855 VAR_DECL for a variable template. */
4856 if (!template_parm_scope_p ()
4857 || !VAR_P (decl))
4858 decl = maybe_push_decl (decl);
4860 if (processing_template_decl)
4861 decl = push_template_decl (decl);
4862 if (decl == error_mark_node)
4863 return error_mark_node;
4865 if (VAR_P (decl)
4866 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4867 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4869 /* This is a const variable with implicit 'static'. Set
4870 DECL_THIS_STATIC so we can tell it from variables that are
4871 !TREE_PUBLIC because of the anonymous namespace. */
4872 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4873 DECL_THIS_STATIC (decl) = 1;
4876 if (current_function_decl && VAR_P (decl)
4877 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
4879 bool ok = false;
4880 if (CP_DECL_THREAD_LOCAL_P (decl))
4881 error ("%qD declared %<thread_local%> in %<constexpr%> function",
4882 decl);
4883 else if (TREE_STATIC (decl))
4884 error ("%qD declared %<static%> in %<constexpr%> function", decl);
4885 else
4886 ok = true;
4887 if (!ok)
4888 cp_function_chain->invalid_constexpr = true;
4891 if (!processing_template_decl && VAR_P (decl))
4892 start_decl_1 (decl, initialized);
4894 return decl;
4897 /* Process the declaration of a variable DECL. INITIALIZED is true
4898 iff DECL is explicitly initialized. (INITIALIZED is false if the
4899 variable is initialized via an implicitly-called constructor.)
4900 This function must be called for ordinary variables (including, for
4901 example, implicit instantiations of templates), but must not be
4902 called for template declarations. */
4904 void
4905 start_decl_1 (tree decl, bool initialized)
4907 tree type;
4908 bool complete_p;
4909 bool aggregate_definition_p;
4911 gcc_assert (!processing_template_decl);
4913 if (error_operand_p (decl))
4914 return;
4916 gcc_assert (VAR_P (decl));
4918 type = TREE_TYPE (decl);
4919 complete_p = COMPLETE_TYPE_P (type);
4920 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4922 /* If an explicit initializer is present, or if this is a definition
4923 of an aggregate, then we need a complete type at this point.
4924 (Scalars are always complete types, so there is nothing to
4925 check.) This code just sets COMPLETE_P; errors (if necessary)
4926 are issued below. */
4927 if ((initialized || aggregate_definition_p)
4928 && !complete_p
4929 && COMPLETE_TYPE_P (complete_type (type)))
4931 complete_p = true;
4932 /* We will not yet have set TREE_READONLY on DECL if the type
4933 was "const", but incomplete, before this point. But, now, we
4934 have a complete type, so we can try again. */
4935 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4938 if (initialized)
4939 /* Is it valid for this decl to have an initializer at all? */
4941 /* Don't allow initializations for incomplete types except for
4942 arrays which might be completed by the initialization. */
4943 if (complete_p)
4944 ; /* A complete type is ok. */
4945 else if (type_uses_auto (type))
4946 ; /* An auto type is ok. */
4947 else if (TREE_CODE (type) != ARRAY_TYPE)
4949 error ("variable %q#D has initializer but incomplete type", decl);
4950 type = TREE_TYPE (decl) = error_mark_node;
4952 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4954 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4955 error ("elements of array %q#D have incomplete type", decl);
4956 /* else we already gave an error in start_decl. */
4959 else if (aggregate_definition_p && !complete_p)
4961 if (type_uses_auto (type))
4962 error ("declaration of %q#D has no initializer", decl);
4963 else
4964 error ("aggregate %q#D has incomplete type and cannot be defined",
4965 decl);
4966 /* Change the type so that assemble_variable will give
4967 DECL an rtl we can live with: (mem (const_int 0)). */
4968 type = TREE_TYPE (decl) = error_mark_node;
4971 /* Create a new scope to hold this declaration if necessary.
4972 Whether or not a new scope is necessary cannot be determined
4973 until after the type has been completed; if the type is a
4974 specialization of a class template it is not until after
4975 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4976 will be set correctly. */
4977 maybe_push_cleanup_level (type);
4980 /* Handle initialization of references. DECL, TYPE, and INIT have the
4981 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4982 but will be set to a new CLEANUP_STMT if a temporary is created
4983 that must be destroyed subsequently.
4985 Returns an initializer expression to use to initialize DECL, or
4986 NULL if the initialization can be performed statically.
4988 Quotes on semantics can be found in ARM 8.4.3. */
4990 static tree
4991 grok_reference_init (tree decl, tree type, tree init, int flags)
4993 if (init == NULL_TREE)
4995 if ((DECL_LANG_SPECIFIC (decl) == 0
4996 || DECL_IN_AGGR_P (decl) == 0)
4997 && ! DECL_THIS_EXTERN (decl))
4998 error ("%qD declared as reference but not initialized", decl);
4999 return NULL_TREE;
5002 if (TREE_CODE (init) == TREE_LIST)
5003 init = build_x_compound_expr_from_list (init, ELK_INIT,
5004 tf_warning_or_error);
5006 tree ttype = TREE_TYPE (type);
5007 if (TREE_CODE (ttype) != ARRAY_TYPE
5008 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5009 /* Note: default conversion is only called in very special cases. */
5010 init = decay_conversion (init, tf_warning_or_error);
5012 /* check_initializer handles this for non-reference variables, but for
5013 references we need to do it here or the initializer will get the
5014 incomplete array type and confuse later calls to
5015 cp_complete_array_type. */
5016 if (TREE_CODE (ttype) == ARRAY_TYPE
5017 && TYPE_DOMAIN (ttype) == NULL_TREE
5018 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5019 || TREE_CODE (init) == STRING_CST))
5021 cp_complete_array_type (&ttype, init, false);
5022 if (ttype != TREE_TYPE (type))
5023 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5026 /* Convert INIT to the reference type TYPE. This may involve the
5027 creation of a temporary, whose lifetime must be the same as that
5028 of the reference. If so, a DECL_EXPR for the temporary will be
5029 added just after the DECL_EXPR for DECL. That's why we don't set
5030 DECL_INITIAL for local references (instead assigning to them
5031 explicitly); we need to allow the temporary to be initialized
5032 first. */
5033 return initialize_reference (type, init, flags,
5034 tf_warning_or_error);
5037 /* Designated initializers in arrays are not supported in GNU C++.
5038 The parser cannot detect this error since it does not know whether
5039 a given brace-enclosed initializer is for a class type or for an
5040 array. This function checks that CE does not use a designated
5041 initializer. If it does, an error is issued. Returns true if CE
5042 is valid, i.e., does not have a designated initializer. */
5044 static bool
5045 check_array_designated_initializer (constructor_elt *ce,
5046 unsigned HOST_WIDE_INT index)
5048 /* Designated initializers for array elements are not supported. */
5049 if (ce->index)
5051 /* The parser only allows identifiers as designated
5052 initializers. */
5053 if (ce->index == error_mark_node)
5055 error ("name used in a GNU-style designated "
5056 "initializer for an array");
5057 return false;
5059 else if (identifier_p (ce->index))
5061 error ("name %qD used in a GNU-style designated "
5062 "initializer for an array", ce->index);
5063 return false;
5066 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5067 ce->index, true);
5068 if (ce_index
5069 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5070 && (TREE_CODE (ce_index = maybe_constant_value (ce_index))
5071 == INTEGER_CST))
5073 /* A C99 designator is OK if it matches the current index. */
5074 if (wi::eq_p (ce_index, index))
5075 return true;
5076 else
5077 sorry ("non-trivial designated initializers not supported");
5079 else
5080 error ("C99 designator %qE is not an integral constant-expression",
5081 ce->index);
5083 return false;
5086 return true;
5089 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5090 array until we finish parsing the initializer. If that's the
5091 situation we're in, update DECL accordingly. */
5093 static void
5094 maybe_deduce_size_from_array_init (tree decl, tree init)
5096 tree type = TREE_TYPE (decl);
5098 if (TREE_CODE (type) == ARRAY_TYPE
5099 && TYPE_DOMAIN (type) == NULL_TREE
5100 && TREE_CODE (decl) != TYPE_DECL)
5102 /* do_default is really a C-ism to deal with tentative definitions.
5103 But let's leave it here to ease the eventual merge. */
5104 int do_default = !DECL_EXTERNAL (decl);
5105 tree initializer = init ? init : DECL_INITIAL (decl);
5106 int failure = 0;
5108 /* Check that there are no designated initializers in INIT, as
5109 those are not supported in GNU C++, and as the middle-end
5110 will crash if presented with a non-numeric designated
5111 initializer. */
5112 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5114 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5115 constructor_elt *ce;
5116 HOST_WIDE_INT i;
5117 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5118 if (!check_array_designated_initializer (ce, i))
5119 failure = 1;
5122 if (!failure)
5124 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5125 do_default);
5126 if (failure == 1)
5128 error ("initializer fails to determine size of %qD", decl);
5130 else if (failure == 2)
5132 if (do_default)
5134 error ("array size missing in %qD", decl);
5136 /* If a `static' var's size isn't known, make it extern as
5137 well as static, so it does not get allocated. If it's not
5138 `static', then don't mark it extern; finish_incomplete_decl
5139 will give it a default size and it will get allocated. */
5140 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5141 DECL_EXTERNAL (decl) = 1;
5143 else if (failure == 3)
5145 error ("zero-size array %qD", decl);
5149 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5151 relayout_decl (decl);
5155 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5156 any appropriate error messages regarding the layout. */
5158 static void
5159 layout_var_decl (tree decl)
5161 tree type;
5163 type = TREE_TYPE (decl);
5164 if (type == error_mark_node)
5165 return;
5167 /* If we haven't already laid out this declaration, do so now.
5168 Note that we must not call complete type for an external object
5169 because it's type might involve templates that we are not
5170 supposed to instantiate yet. (And it's perfectly valid to say
5171 `extern X x' for some incomplete type `X'.) */
5172 if (!DECL_EXTERNAL (decl))
5173 complete_type (type);
5174 if (!DECL_SIZE (decl)
5175 && TREE_TYPE (decl) != error_mark_node
5176 && (COMPLETE_TYPE_P (type)
5177 || (TREE_CODE (type) == ARRAY_TYPE
5178 && !TYPE_DOMAIN (type)
5179 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
5180 layout_decl (decl, 0);
5182 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5184 /* An automatic variable with an incomplete type: that is an error.
5185 Don't talk about array types here, since we took care of that
5186 message in grokdeclarator. */
5187 error ("storage size of %qD isn%'t known", decl);
5188 TREE_TYPE (decl) = error_mark_node;
5190 #if 0
5191 /* Keep this code around in case we later want to control debug info
5192 based on whether a type is "used". (jason 1999-11-11) */
5194 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5195 /* Let debugger know it should output info for this type. */
5196 note_debug_info_needed (ttype);
5198 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5199 note_debug_info_needed (DECL_CONTEXT (decl));
5200 #endif
5202 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5203 && DECL_SIZE (decl) != NULL_TREE
5204 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5206 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5207 constant_expression_warning (DECL_SIZE (decl));
5208 else
5210 error ("storage size of %qD isn%'t constant", decl);
5211 TREE_TYPE (decl) = error_mark_node;
5216 /* If a local static variable is declared in an inline function, or if
5217 we have a weak definition, we must endeavor to create only one
5218 instance of the variable at link-time. */
5220 void
5221 maybe_commonize_var (tree decl)
5223 /* Static data in a function with comdat linkage also has comdat
5224 linkage. */
5225 if (TREE_STATIC (decl)
5226 /* Don't mess with __FUNCTION__. */
5227 && ! DECL_ARTIFICIAL (decl)
5228 && DECL_FUNCTION_SCOPE_P (decl)
5229 && vague_linkage_p (DECL_CONTEXT (decl)))
5231 if (flag_weak)
5233 /* With weak symbols, we simply make the variable COMDAT;
5234 that will cause copies in multiple translations units to
5235 be merged. */
5236 comdat_linkage (decl);
5238 else
5240 if (DECL_INITIAL (decl) == NULL_TREE
5241 || DECL_INITIAL (decl) == error_mark_node)
5243 /* Without weak symbols, we can use COMMON to merge
5244 uninitialized variables. */
5245 TREE_PUBLIC (decl) = 1;
5246 DECL_COMMON (decl) = 1;
5248 else
5250 /* While for initialized variables, we must use internal
5251 linkage -- which means that multiple copies will not
5252 be merged. */
5253 TREE_PUBLIC (decl) = 0;
5254 DECL_COMMON (decl) = 0;
5255 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5256 "sorry: semantics of inline function static "
5257 "data %q#D are wrong (you%'ll wind up "
5258 "with multiple copies)", decl))
5259 inform (DECL_SOURCE_LOCATION (decl),
5260 "you can work around this by removing the initializer");
5266 /* Issue an error message if DECL is an uninitialized const variable. */
5268 static void
5269 check_for_uninitialized_const_var (tree decl)
5271 tree type = strip_array_types (TREE_TYPE (decl));
5273 /* ``Unless explicitly declared extern, a const object does not have
5274 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5275 7.1.6 */
5276 if (VAR_P (decl)
5277 && TREE_CODE (type) != REFERENCE_TYPE
5278 && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5279 && !DECL_INITIAL (decl))
5281 tree field = default_init_uninitialized_part (type);
5282 if (!field)
5283 return;
5285 if (CP_TYPE_CONST_P (type))
5286 permerror (DECL_SOURCE_LOCATION (decl),
5287 "uninitialized const %qD", decl);
5288 else
5290 error_at (DECL_SOURCE_LOCATION (decl),
5291 "uninitialized variable %qD in %<constexpr%> function",
5292 decl);
5293 cp_function_chain->invalid_constexpr = true;
5296 if (CLASS_TYPE_P (type))
5298 tree defaulted_ctor;
5300 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5301 "%q#T has no user-provided default constructor", type);
5302 defaulted_ctor = in_class_defaulted_default_constructor (type);
5303 if (defaulted_ctor)
5304 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5305 "constructor is not user-provided because it is "
5306 "explicitly defaulted in the class body");
5307 inform (DECL_SOURCE_LOCATION (field),
5308 "and the implicitly-defined constructor does not "
5309 "initialize %q#D", field);
5314 /* Structure holding the current initializer being processed by reshape_init.
5315 CUR is a pointer to the current element being processed, END is a pointer
5316 after the last element present in the initializer. */
5317 typedef struct reshape_iterator_t
5319 constructor_elt *cur;
5320 constructor_elt *end;
5321 } reshape_iter;
5323 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5325 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5326 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5327 initialized. If there are no more such fields, the return value
5328 will be NULL. */
5330 tree
5331 next_initializable_field (tree field)
5333 while (field
5334 && (TREE_CODE (field) != FIELD_DECL
5335 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5336 || DECL_ARTIFICIAL (field)))
5337 field = DECL_CHAIN (field);
5339 return field;
5342 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5343 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5344 INTEGER_CST representing the size of the array minus one (the maximum index),
5345 or NULL_TREE if the array was declared without specifying the size. D is
5346 the iterator within the constructor. */
5348 static tree
5349 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5350 tsubst_flags_t complain)
5352 tree new_init;
5353 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5354 unsigned HOST_WIDE_INT max_index_cst = 0;
5355 unsigned HOST_WIDE_INT index;
5357 /* The initializer for an array is always a CONSTRUCTOR. */
5358 new_init = build_constructor (init_list_type_node, NULL);
5360 if (sized_array_p)
5362 /* Minus 1 is used for zero sized arrays. */
5363 if (integer_all_onesp (max_index))
5364 return new_init;
5366 if (tree_fits_uhwi_p (max_index))
5367 max_index_cst = tree_to_uhwi (max_index);
5368 /* sizetype is sign extended, not zero extended. */
5369 else
5370 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5373 /* Loop until there are no more initializers. */
5374 for (index = 0;
5375 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5376 ++index)
5378 tree elt_init;
5379 constructor_elt *old_cur = d->cur;
5381 check_array_designated_initializer (d->cur, index);
5382 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5383 complain);
5384 if (elt_init == error_mark_node)
5385 return error_mark_node;
5386 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5387 size_int (index), elt_init);
5388 if (!TREE_CONSTANT (elt_init))
5389 TREE_CONSTANT (new_init) = false;
5391 /* This can happen with an invalid initializer (c++/54501). */
5392 if (d->cur == old_cur && !sized_array_p)
5393 break;
5396 return new_init;
5399 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5400 Parameters are the same of reshape_init_r. */
5402 static tree
5403 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5405 tree max_index = NULL_TREE;
5407 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5409 if (TYPE_DOMAIN (type))
5410 max_index = array_type_nelts (type);
5412 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5415 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5416 Parameters are the same of reshape_init_r. */
5418 static tree
5419 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5421 tree max_index = NULL_TREE;
5423 gcc_assert (VECTOR_TYPE_P (type));
5425 if (COMPOUND_LITERAL_P (d->cur->value))
5427 tree value = d->cur->value;
5428 if (!same_type_p (TREE_TYPE (value), type))
5430 if (complain & tf_error)
5431 error ("invalid type %qT as initializer for a vector of type %qT",
5432 TREE_TYPE (d->cur->value), type);
5433 value = error_mark_node;
5435 ++d->cur;
5436 return value;
5439 /* For a vector, we initialize it as an array of the appropriate size. */
5440 if (VECTOR_TYPE_P (type))
5441 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5443 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5446 /* Subroutine of reshape_init_r, processes the initializers for classes
5447 or union. Parameters are the same of reshape_init_r. */
5449 static tree
5450 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5451 tsubst_flags_t complain)
5453 tree field;
5454 tree new_init;
5456 gcc_assert (CLASS_TYPE_P (type));
5458 /* The initializer for a class is always a CONSTRUCTOR. */
5459 new_init = build_constructor (init_list_type_node, NULL);
5460 field = next_initializable_field (TYPE_FIELDS (type));
5462 if (!field)
5464 /* [dcl.init.aggr]
5466 An initializer for an aggregate member that is an
5467 empty class shall have the form of an empty
5468 initializer-list {}. */
5469 if (!first_initializer_p)
5471 if (complain & tf_error)
5472 error ("initializer for %qT must be brace-enclosed", type);
5473 return error_mark_node;
5475 return new_init;
5478 /* Loop through the initializable fields, gathering initializers. */
5479 while (d->cur != d->end)
5481 tree field_init;
5482 constructor_elt *old_cur = d->cur;
5484 /* Handle designated initializers, as an extension. */
5485 if (d->cur->index)
5487 if (d->cur->index == error_mark_node)
5488 return error_mark_node;
5490 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5491 /* We already reshaped this. */
5492 gcc_assert (d->cur->index == field);
5493 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5494 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5495 else
5497 if (complain & tf_error)
5498 error ("%<[%E] =%> used in a GNU-style designated initializer"
5499 " for class %qT", d->cur->index, type);
5500 return error_mark_node;
5503 if (!field || TREE_CODE (field) != FIELD_DECL)
5505 if (complain & tf_error)
5506 error ("%qT has no non-static data member named %qD", type,
5507 d->cur->index);
5508 return error_mark_node;
5512 /* If we processed all the member of the class, we are done. */
5513 if (!field)
5514 break;
5516 field_init = reshape_init_r (TREE_TYPE (field), d,
5517 /*first_initializer_p=*/false, complain);
5518 if (field_init == error_mark_node)
5519 return error_mark_node;
5521 if (d->cur == old_cur && d->cur->index)
5523 /* This can happen with an invalid initializer for a flexible
5524 array member (c++/54441). */
5525 if (complain & tf_error)
5526 error ("invalid initializer for %q#D", field);
5527 return error_mark_node;
5530 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5532 /* [dcl.init.aggr]
5534 When a union is initialized with a brace-enclosed
5535 initializer, the braces shall only contain an
5536 initializer for the first member of the union. */
5537 if (TREE_CODE (type) == UNION_TYPE)
5538 break;
5540 field = next_initializable_field (DECL_CHAIN (field));
5543 return new_init;
5546 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5547 designators are not valid; either complain or return true to indicate
5548 that reshape_init_r should return error_mark_node. */
5550 static bool
5551 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5553 if (d->cur->index)
5555 if (complain & tf_error)
5556 error ("C99 designator %qE outside aggregate initializer",
5557 d->cur->index);
5558 else
5559 return true;
5561 return false;
5564 /* Subroutine of reshape_init, which processes a single initializer (part of
5565 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5566 iterator within the CONSTRUCTOR which points to the initializer to process.
5567 FIRST_INITIALIZER_P is true if this is the first initializer of the
5568 outermost CONSTRUCTOR node. */
5570 static tree
5571 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5572 tsubst_flags_t complain)
5574 tree init = d->cur->value;
5576 if (error_operand_p (init))
5577 return error_mark_node;
5579 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5580 && has_designator_problem (d, complain))
5581 return error_mark_node;
5583 if (TREE_CODE (type) == COMPLEX_TYPE)
5585 /* A complex type can be initialized from one or two initializers,
5586 but braces are not elided. */
5587 d->cur++;
5588 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5590 if (CONSTRUCTOR_NELTS (init) > 2)
5592 if (complain & tf_error)
5593 error ("too many initializers for %qT", type);
5594 else
5595 return error_mark_node;
5598 else if (first_initializer_p && d->cur != d->end)
5600 vec<constructor_elt, va_gc> *v = 0;
5601 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5602 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5603 if (has_designator_problem (d, complain))
5604 return error_mark_node;
5605 d->cur++;
5606 init = build_constructor (init_list_type_node, v);
5608 return init;
5611 /* A non-aggregate type is always initialized with a single
5612 initializer. */
5613 if (!CP_AGGREGATE_TYPE_P (type))
5615 /* It is invalid to initialize a non-aggregate type with a
5616 brace-enclosed initializer before C++0x.
5617 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5618 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5619 a CONSTRUCTOR (with a record type). */
5620 if (TREE_CODE (init) == CONSTRUCTOR
5621 /* Don't complain about a capture-init. */
5622 && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5623 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5625 if (SCALAR_TYPE_P (type))
5627 if (cxx_dialect < cxx11
5628 /* Isn't value-initialization. */
5629 || CONSTRUCTOR_NELTS (init) > 0)
5631 if (complain & tf_error)
5632 error ("braces around scalar initializer for type %qT",
5633 type);
5634 init = error_mark_node;
5637 else
5638 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5641 d->cur++;
5642 return init;
5645 /* "If T is a class type and the initializer list has a single element of
5646 type cv U, where U is T or a class derived from T, the object is
5647 initialized from that element." Even if T is an aggregate. */
5648 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5649 && first_initializer_p
5650 && d->end - d->cur == 1
5651 && reference_related_p (type, TREE_TYPE (init)))
5653 d->cur++;
5654 return init;
5657 /* [dcl.init.aggr]
5659 All implicit type conversions (clause _conv_) are considered when
5660 initializing the aggregate member with an initializer from an
5661 initializer-list. If the initializer can initialize a member,
5662 the member is initialized. Otherwise, if the member is itself a
5663 non-empty subaggregate, brace elision is assumed and the
5664 initializer is considered for the initialization of the first
5665 member of the subaggregate. */
5666 if (TREE_CODE (init) != CONSTRUCTOR
5667 /* But don't try this for the first initializer, since that would be
5668 looking through the outermost braces; A a2 = { a1 }; is not a
5669 valid aggregate initialization. */
5670 && !first_initializer_p
5671 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5672 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5673 complain)))
5675 d->cur++;
5676 return init;
5679 /* [dcl.init.string]
5681 A char array (whether plain char, signed char, or unsigned char)
5682 can be initialized by a string-literal (optionally enclosed in
5683 braces); a wchar_t array can be initialized by a wide
5684 string-literal (optionally enclosed in braces). */
5685 if (TREE_CODE (type) == ARRAY_TYPE
5686 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5688 tree str_init = init;
5690 /* Strip one level of braces if and only if they enclose a single
5691 element (as allowed by [dcl.init.string]). */
5692 if (!first_initializer_p
5693 && TREE_CODE (str_init) == CONSTRUCTOR
5694 && vec_safe_length (CONSTRUCTOR_ELTS (str_init)) == 1)
5696 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5699 /* If it's a string literal, then it's the initializer for the array
5700 as a whole. Otherwise, continue with normal initialization for
5701 array types (one value per array element). */
5702 if (TREE_CODE (str_init) == STRING_CST)
5704 if (has_designator_problem (d, complain))
5705 return error_mark_node;
5706 d->cur++;
5707 return str_init;
5711 /* The following cases are about aggregates. If we are not within a full
5712 initializer already, and there is not a CONSTRUCTOR, it means that there
5713 is a missing set of braces (that is, we are processing the case for
5714 which reshape_init exists). */
5715 if (!first_initializer_p)
5717 if (TREE_CODE (init) == CONSTRUCTOR)
5719 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5720 /* There is no need to reshape pointer-to-member function
5721 initializers, as they are always constructed correctly
5722 by the front end. */
5724 else if (COMPOUND_LITERAL_P (init))
5725 /* For a nested compound literal, there is no need to reshape since
5726 brace elision is not allowed. Even if we decided to allow it,
5727 we should add a call to reshape_init in finish_compound_literal,
5728 before calling digest_init, so changing this code would still
5729 not be necessary. */
5730 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5731 else
5733 ++d->cur;
5734 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5735 return reshape_init (type, init, complain);
5739 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5740 type);
5743 /* Dispatch to specialized routines. */
5744 if (CLASS_TYPE_P (type))
5745 return reshape_init_class (type, d, first_initializer_p, complain);
5746 else if (TREE_CODE (type) == ARRAY_TYPE)
5747 return reshape_init_array (type, d, complain);
5748 else if (VECTOR_TYPE_P (type))
5749 return reshape_init_vector (type, d, complain);
5750 else
5751 gcc_unreachable();
5754 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5755 brace-enclosed aggregate initializer.
5757 INIT is the CONSTRUCTOR containing the list of initializers describing
5758 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5759 It may not presently match the shape of the TYPE; for example:
5761 struct S { int a; int b; };
5762 struct S a[] = { 1, 2, 3, 4 };
5764 Here INIT will hold a vector of four elements, rather than a
5765 vector of two elements, each itself a vector of two elements. This
5766 routine transforms INIT from the former form into the latter. The
5767 revised CONSTRUCTOR node is returned. */
5769 tree
5770 reshape_init (tree type, tree init, tsubst_flags_t complain)
5772 vec<constructor_elt, va_gc> *v;
5773 reshape_iter d;
5774 tree new_init;
5776 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5778 v = CONSTRUCTOR_ELTS (init);
5780 /* An empty constructor does not need reshaping, and it is always a valid
5781 initializer. */
5782 if (vec_safe_is_empty (v))
5783 return init;
5785 /* Recurse on this CONSTRUCTOR. */
5786 d.cur = &(*v)[0];
5787 d.end = d.cur + v->length ();
5789 new_init = reshape_init_r (type, &d, true, complain);
5790 if (new_init == error_mark_node)
5791 return error_mark_node;
5793 /* Make sure all the element of the constructor were used. Otherwise,
5794 issue an error about exceeding initializers. */
5795 if (d.cur != d.end)
5797 if (complain & tf_error)
5798 error ("too many initializers for %qT", type);
5799 else
5800 return error_mark_node;
5803 return new_init;
5806 /* Verify array initializer. Returns true if errors have been reported. */
5808 bool
5809 check_array_initializer (tree decl, tree type, tree init)
5811 tree element_type = TREE_TYPE (type);
5813 /* The array type itself need not be complete, because the
5814 initializer may tell us how many elements are in the array.
5815 But, the elements of the array must be complete. */
5816 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5818 if (decl)
5819 error ("elements of array %q#D have incomplete type", decl);
5820 else
5821 error ("elements of array %q#T have incomplete type", type);
5822 return true;
5824 /* A compound literal can't have variable size. */
5825 if (init && !decl
5826 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5827 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5829 error ("variable-sized compound literal");
5830 return true;
5832 return false;
5835 /* Subroutine of check_initializer; args are passed down from that function.
5836 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5838 static tree
5839 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5842 gcc_assert (stmts_are_full_exprs_p ());
5843 return build_aggr_init (decl, init, flags, tf_warning_or_error);
5846 /* Verify INIT (the initializer for DECL), and record the
5847 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5848 grok_reference_init.
5850 If the return value is non-NULL, it is an expression that must be
5851 evaluated dynamically to initialize DECL. */
5853 static tree
5854 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
5856 tree type = TREE_TYPE (decl);
5857 tree init_code = NULL;
5858 tree core_type;
5860 /* Things that are going to be initialized need to have complete
5861 type. */
5862 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5864 if (DECL_HAS_VALUE_EXPR_P (decl))
5866 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5867 it doesn't have storage to be initialized. */
5868 gcc_assert (init == NULL_TREE);
5869 return NULL_TREE;
5872 if (type == error_mark_node)
5873 /* We will have already complained. */
5874 return NULL_TREE;
5876 if (TREE_CODE (type) == ARRAY_TYPE)
5878 if (check_array_initializer (decl, type, init))
5879 return NULL_TREE;
5881 else if (!COMPLETE_TYPE_P (type))
5883 error ("%q#D has incomplete type", decl);
5884 TREE_TYPE (decl) = error_mark_node;
5885 return NULL_TREE;
5887 else
5888 /* There is no way to make a variable-sized class type in GNU C++. */
5889 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5891 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5893 int init_len = vec_safe_length (CONSTRUCTOR_ELTS (init));
5894 if (SCALAR_TYPE_P (type))
5896 if (init_len == 0)
5898 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5899 init = build_zero_init (type, NULL_TREE, false);
5901 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5903 error ("scalar object %qD requires one element in initializer",
5904 decl);
5905 TREE_TYPE (decl) = error_mark_node;
5906 return NULL_TREE;
5911 if (TREE_CODE (decl) == CONST_DECL)
5913 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5915 DECL_INITIAL (decl) = init;
5917 gcc_assert (init != NULL_TREE);
5918 init = NULL_TREE;
5920 else if (!init && DECL_REALLY_EXTERN (decl))
5922 else if (init || type_build_ctor_call (type)
5923 || TREE_CODE (type) == REFERENCE_TYPE)
5925 if (TREE_CODE (type) == REFERENCE_TYPE)
5927 init = grok_reference_init (decl, type, init, flags);
5928 flags |= LOOKUP_ALREADY_DIGESTED;
5930 else if (!init)
5931 check_for_uninitialized_const_var (decl);
5932 /* Do not reshape constructors of vectors (they don't need to be
5933 reshaped. */
5934 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5936 if (is_std_init_list (type))
5938 init = perform_implicit_conversion (type, init,
5939 tf_warning_or_error);
5940 flags |= LOOKUP_ALREADY_DIGESTED;
5942 else if (TYPE_NON_AGGREGATE_CLASS (type))
5944 /* Don't reshape if the class has constructors. */
5945 if (cxx_dialect == cxx98)
5946 error ("in C++98 %qD must be initialized by constructor, "
5947 "not by %<{...}%>",
5948 decl);
5950 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
5952 error ("opaque vector types cannot be initialized");
5953 init = error_mark_node;
5955 else
5957 init = reshape_init (type, init, tf_warning_or_error);
5958 flags |= LOOKUP_NO_NARROWING;
5961 else if (TREE_CODE (init) == TREE_LIST
5962 && TREE_TYPE (init) != unknown_type_node
5963 && !MAYBE_CLASS_TYPE_P (type))
5965 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5967 /* We get here with code like `int a (2);' */
5968 init = build_x_compound_expr_from_list (init, ELK_INIT,
5969 tf_warning_or_error);
5972 /* If DECL has an array type without a specific bound, deduce the
5973 array size from the initializer. */
5974 maybe_deduce_size_from_array_init (decl, init);
5975 type = TREE_TYPE (decl);
5976 if (type == error_mark_node)
5977 return NULL_TREE;
5979 if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5980 && !(flags & LOOKUP_ALREADY_DIGESTED)
5981 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5982 && CP_AGGREGATE_TYPE_P (type)
5983 && (CLASS_TYPE_P (type)
5984 || !TYPE_NEEDS_CONSTRUCTING (type)
5985 || type_has_extended_temps (type))))
5987 init_code = build_aggr_init_full_exprs (decl, init, flags);
5989 /* A constructor call is a non-trivial initializer even if
5990 it isn't explicitly written. */
5991 if (TREE_SIDE_EFFECTS (init_code))
5992 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
5994 /* If this is a constexpr initializer, expand_default_init will
5995 have returned an INIT_EXPR rather than a CALL_EXPR. In that
5996 case, pull the initializer back out and pass it down into
5997 store_init_value. */
5998 while (TREE_CODE (init_code) == EXPR_STMT
5999 || TREE_CODE (init_code) == CONVERT_EXPR)
6000 init_code = TREE_OPERAND (init_code, 0);
6001 if (TREE_CODE (init_code) == INIT_EXPR)
6003 init = TREE_OPERAND (init_code, 1);
6004 init_code = NULL_TREE;
6005 /* Don't call digest_init; it's unnecessary and will complain
6006 about aggregate initialization of non-aggregate classes. */
6007 flags |= LOOKUP_ALREADY_DIGESTED;
6009 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6011 /* Declared constexpr, but no suitable initializer; massage
6012 init appropriately so we can pass it into store_init_value
6013 for the error. */
6014 if (CLASS_TYPE_P (type)
6015 && (!init || TREE_CODE (init) == TREE_LIST))
6017 init = build_functional_cast (type, init, tf_none);
6018 if (TREE_CODE (init) == TARGET_EXPR)
6019 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6021 init_code = NULL_TREE;
6023 else
6024 init = NULL_TREE;
6027 if (init && TREE_CODE (init) != TREE_VEC)
6029 /* In aggregate initialization of a variable, each element
6030 initialization is a full-expression because there is no
6031 enclosing expression. */
6032 gcc_assert (stmts_are_full_exprs_p ());
6034 init_code = store_init_value (decl, init, cleanups, flags);
6036 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6037 && DECL_INITIAL (decl)
6038 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6039 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6040 warning (0, "array %qD initialized by parenthesized string literal %qE",
6041 decl, DECL_INITIAL (decl));
6042 init = NULL;
6045 else
6047 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6048 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6049 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6050 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6051 /*complain=*/true);
6053 check_for_uninitialized_const_var (decl);
6056 if (init && init != error_mark_node)
6057 init_code = build2 (INIT_EXPR, type, decl, init);
6059 if (init_code)
6061 /* We might have set these in cp_finish_decl. */
6062 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6063 TREE_CONSTANT (decl) = false;
6066 if (init_code && DECL_IN_AGGR_P (decl))
6068 static int explained = 0;
6070 if (cxx_dialect < cxx11)
6071 error ("initializer invalid for static member with constructor");
6072 else
6073 error ("non-constant in-class initialization invalid for static "
6074 "member %qD", decl);
6075 if (!explained)
6077 inform (input_location,
6078 "(an out of class initialization is required)");
6079 explained = 1;
6081 return NULL_TREE;
6084 return init_code;
6087 /* If DECL is not a local variable, give it RTL. */
6089 static void
6090 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6092 int toplev = toplevel_bindings_p ();
6093 int defer_p;
6095 /* Set the DECL_ASSEMBLER_NAME for the object. */
6096 if (asmspec)
6098 /* The `register' keyword, when used together with an
6099 asm-specification, indicates that the variable should be
6100 placed in a particular register. */
6101 if (VAR_P (decl) && DECL_REGISTER (decl))
6103 set_user_assembler_name (decl, asmspec);
6104 DECL_HARD_REGISTER (decl) = 1;
6106 else
6108 if (TREE_CODE (decl) == FUNCTION_DECL
6109 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6110 set_builtin_user_assembler_name (decl, asmspec);
6111 set_user_assembler_name (decl, asmspec);
6115 /* Handle non-variables up front. */
6116 if (!VAR_P (decl))
6118 rest_of_decl_compilation (decl, toplev, at_eof);
6119 return;
6122 /* If we see a class member here, it should be a static data
6123 member. */
6124 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6126 gcc_assert (TREE_STATIC (decl));
6127 /* An in-class declaration of a static data member should be
6128 external; it is only a declaration, and not a definition. */
6129 if (init == NULL_TREE)
6130 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
6133 /* We don't create any RTL for local variables. */
6134 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6135 return;
6137 /* We defer emission of local statics until the corresponding
6138 DECL_EXPR is expanded. */
6139 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
6141 /* Defer template instantiations. */
6142 if (DECL_LANG_SPECIFIC (decl)
6143 && DECL_IMPLICIT_INSTANTIATION (decl))
6144 defer_p = 1;
6146 /* If we're not deferring, go ahead and assemble the variable. */
6147 if (!defer_p)
6148 rest_of_decl_compilation (decl, toplev, at_eof);
6151 /* walk_tree helper for wrap_temporary_cleanups, below. */
6153 static tree
6154 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6156 /* Stop at types or full-expression boundaries. */
6157 if (TYPE_P (*stmt_p)
6158 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6160 *walk_subtrees = 0;
6161 return NULL_TREE;
6164 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6166 tree guard = (tree)data;
6167 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6169 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6170 /* Tell honor_protect_cleanup_actions to handle this as a separate
6171 cleanup. */
6172 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6174 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6177 return NULL_TREE;
6180 /* We're initializing a local variable which has a cleanup GUARD. If there
6181 are any temporaries used in the initializer INIT of this variable, we
6182 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6183 variable will be cleaned up properly if one of them throws.
6185 Unfortunately, there's no way to express this properly in terms of
6186 nesting, as the regions for the temporaries overlap the region for the
6187 variable itself; if there are two temporaries, the variable needs to be
6188 the first thing destroyed if either of them throws. However, we only
6189 want to run the variable's cleanup if it actually got constructed. So
6190 we need to guard the temporary cleanups with the variable's cleanup if
6191 they are run on the normal path, but not if they are run on the
6192 exceptional path. We implement this by telling
6193 honor_protect_cleanup_actions to strip the variable cleanup from the
6194 exceptional path. */
6196 static void
6197 wrap_temporary_cleanups (tree init, tree guard)
6199 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6202 /* Generate code to initialize DECL (a local variable). */
6204 static void
6205 initialize_local_var (tree decl, tree init)
6207 tree type = TREE_TYPE (decl);
6208 tree cleanup;
6209 int already_used;
6211 gcc_assert (VAR_P (decl)
6212 || TREE_CODE (decl) == RESULT_DECL);
6213 gcc_assert (!TREE_STATIC (decl));
6215 if (DECL_SIZE (decl) == NULL_TREE)
6217 /* If we used it already as memory, it must stay in memory. */
6218 DECL_INITIAL (decl) = NULL_TREE;
6219 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6220 return;
6223 if (type == error_mark_node)
6224 return;
6226 /* Compute and store the initial value. */
6227 already_used = TREE_USED (decl) || TREE_USED (type);
6228 if (TREE_USED (type))
6229 DECL_READ_P (decl) = 1;
6231 /* Generate a cleanup, if necessary. */
6232 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6234 /* Perform the initialization. */
6235 if (init)
6237 tree rinit = (TREE_CODE (init) == INIT_EXPR
6238 ? TREE_OPERAND (init, 1) : NULL_TREE);
6239 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6241 /* Stick simple initializers in DECL_INITIAL so that
6242 -Wno-init-self works (c++/34772). */
6243 gcc_assert (TREE_OPERAND (init, 0) == decl);
6244 DECL_INITIAL (decl) = rinit;
6246 if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6248 STRIP_NOPS (rinit);
6249 if (rinit == decl)
6250 warning_at (DECL_SOURCE_LOCATION (decl),
6251 OPT_Winit_self,
6252 "reference %qD is initialized with itself", decl);
6255 else
6257 int saved_stmts_are_full_exprs_p;
6259 /* If we're only initializing a single object, guard the
6260 destructors of any temporaries used in its initializer with
6261 its destructor. This isn't right for arrays because each
6262 element initialization is a full-expression. */
6263 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6264 wrap_temporary_cleanups (init, cleanup);
6266 gcc_assert (building_stmt_list_p ());
6267 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6268 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6269 finish_expr_stmt (init);
6270 current_stmt_tree ()->stmts_are_full_exprs_p =
6271 saved_stmts_are_full_exprs_p;
6275 /* Set this to 0 so we can tell whether an aggregate which was
6276 initialized was ever used. Don't do this if it has a
6277 destructor, so we don't complain about the 'resource
6278 allocation is initialization' idiom. Now set
6279 attribute((unused)) on types so decls of that type will be
6280 marked used. (see TREE_USED, above.) */
6281 if (TYPE_NEEDS_CONSTRUCTING (type)
6282 && ! already_used
6283 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6284 && DECL_NAME (decl))
6285 TREE_USED (decl) = 0;
6286 else if (already_used)
6287 TREE_USED (decl) = 1;
6289 if (cleanup)
6290 finish_decl_cleanup (decl, cleanup);
6293 /* DECL is a VAR_DECL for a compiler-generated variable with static
6294 storage duration (like a virtual table) whose initializer is a
6295 compile-time constant. Initialize the variable and provide it to the
6296 back end. */
6298 void
6299 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6301 tree init;
6302 gcc_assert (DECL_ARTIFICIAL (decl));
6303 init = build_constructor (TREE_TYPE (decl), v);
6304 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6305 DECL_INITIAL (decl) = init;
6306 DECL_INITIALIZED_P (decl) = 1;
6307 determine_visibility (decl);
6308 layout_var_decl (decl);
6309 maybe_commonize_var (decl);
6310 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6313 /* INIT is the initializer for a variable, as represented by the
6314 parser. Returns true iff INIT is type-dependent. */
6316 static bool
6317 type_dependent_init_p (tree init)
6319 if (TREE_CODE (init) == TREE_LIST)
6320 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6321 return any_type_dependent_elements_p (init);
6322 else if (TREE_CODE (init) == CONSTRUCTOR)
6323 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6325 vec<constructor_elt, va_gc> *elts;
6326 size_t nelts;
6327 size_t i;
6329 elts = CONSTRUCTOR_ELTS (init);
6330 nelts = vec_safe_length (elts);
6331 for (i = 0; i < nelts; ++i)
6332 if (type_dependent_init_p ((*elts)[i].value))
6333 return true;
6335 else
6336 /* It must be a simple expression, e.g., int i = 3; */
6337 return type_dependent_expression_p (init);
6339 return false;
6342 /* INIT is the initializer for a variable, as represented by the
6343 parser. Returns true iff INIT is value-dependent. */
6345 static bool
6346 value_dependent_init_p (tree init)
6348 if (TREE_CODE (init) == TREE_LIST)
6349 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6350 return any_value_dependent_elements_p (init);
6351 else if (TREE_CODE (init) == CONSTRUCTOR)
6352 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6354 vec<constructor_elt, va_gc> *elts;
6355 size_t nelts;
6356 size_t i;
6358 elts = CONSTRUCTOR_ELTS (init);
6359 nelts = vec_safe_length (elts);
6360 for (i = 0; i < nelts; ++i)
6361 if (value_dependent_init_p ((*elts)[i].value))
6362 return true;
6364 else
6365 /* It must be a simple expression, e.g., int i = 3; */
6366 return value_dependent_expression_p (init);
6368 return false;
6371 /* Finish processing of a declaration;
6372 install its line number and initial value.
6373 If the length of an array type is not known before,
6374 it must be determined now, from the initial value, or it is an error.
6376 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6377 true, then INIT is an integral constant expression.
6379 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6380 if the (init) syntax was used. */
6382 void
6383 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6384 tree asmspec_tree, int flags)
6386 tree type;
6387 vec<tree, va_gc> *cleanups = NULL;
6388 const char *asmspec = NULL;
6389 int was_readonly = 0;
6390 bool var_definition_p = false;
6391 tree auto_node;
6393 if (decl == error_mark_node)
6394 return;
6395 else if (! decl)
6397 if (init)
6398 error ("assignment (not initialization) in declaration");
6399 return;
6402 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6403 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6404 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6406 type = TREE_TYPE (decl);
6407 if (type == error_mark_node)
6408 return;
6410 /* If a name was specified, get the string. */
6411 if (at_namespace_scope_p ())
6412 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6413 if (asmspec_tree && asmspec_tree != error_mark_node)
6414 asmspec = TREE_STRING_POINTER (asmspec_tree);
6416 if (current_class_type
6417 && CP_DECL_CONTEXT (decl) == current_class_type
6418 && TYPE_BEING_DEFINED (current_class_type)
6419 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6420 && (DECL_INITIAL (decl) || init))
6421 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6423 if (TREE_CODE (decl) != FUNCTION_DECL
6424 && (auto_node = type_uses_auto (type)))
6426 tree d_init;
6427 if (init == NULL_TREE)
6429 if (DECL_LANG_SPECIFIC (decl)
6430 && DECL_TEMPLATE_INSTANTIATION (decl)
6431 && !DECL_TEMPLATE_INSTANTIATED (decl))
6433 /* init is null because we're deferring instantiating the
6434 initializer until we need it. Well, we need it now. */
6435 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6436 return;
6439 error ("declaration of %q#D has no initializer", decl);
6440 TREE_TYPE (decl) = error_mark_node;
6441 return;
6443 d_init = init;
6444 if (TREE_CODE (d_init) == TREE_LIST)
6445 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6446 tf_warning_or_error);
6447 d_init = resolve_nondeduced_context (d_init);
6448 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6449 auto_node);
6450 if (type == error_mark_node)
6451 return;
6452 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6455 if (!ensure_literal_type_for_constexpr_object (decl))
6456 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6458 if (VAR_P (decl)
6459 && DECL_CLASS_SCOPE_P (decl)
6460 && DECL_INITIALIZED_IN_CLASS_P (decl))
6461 check_static_variable_definition (decl, type);
6463 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6465 tree clone;
6466 if (init == ridpointers[(int)RID_DELETE])
6468 /* FIXME check this is 1st decl. */
6469 DECL_DELETED_FN (decl) = 1;
6470 DECL_DECLARED_INLINE_P (decl) = 1;
6471 DECL_INITIAL (decl) = error_mark_node;
6472 FOR_EACH_CLONE (clone, decl)
6474 DECL_DELETED_FN (clone) = 1;
6475 DECL_DECLARED_INLINE_P (clone) = 1;
6476 DECL_INITIAL (clone) = error_mark_node;
6478 init = NULL_TREE;
6480 else if (init == ridpointers[(int)RID_DEFAULT])
6482 if (defaultable_fn_check (decl))
6483 DECL_DEFAULTED_FN (decl) = 1;
6484 else
6485 DECL_INITIAL (decl) = NULL_TREE;
6489 if (init && VAR_P (decl))
6491 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6492 /* If DECL is a reference, then we want to know whether init is a
6493 reference constant; init_const_expr_p as passed tells us whether
6494 it's an rvalue constant. */
6495 if (TREE_CODE (type) == REFERENCE_TYPE)
6496 init_const_expr_p = potential_constant_expression (init);
6497 if (init_const_expr_p)
6499 /* Set these flags now for templates. We'll update the flags in
6500 store_init_value for instantiations. */
6501 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6502 if (decl_maybe_constant_var_p (decl))
6503 TREE_CONSTANT (decl) = 1;
6507 if (processing_template_decl)
6509 bool type_dependent_p;
6511 /* Add this declaration to the statement-tree. */
6512 if (at_function_scope_p ())
6513 add_decl_expr (decl);
6515 type_dependent_p = dependent_type_p (type);
6517 if (check_for_bare_parameter_packs (init))
6519 init = NULL_TREE;
6520 DECL_INITIAL (decl) = NULL_TREE;
6523 /* Generally, initializers in templates are expanded when the
6524 template is instantiated. But, if DECL is a variable constant
6525 then it can be used in future constant expressions, so its value
6526 must be available. */
6528 if (!VAR_P (decl) || dependent_type_p (type))
6529 /* We can't do anything if the decl has dependent type. */;
6530 else if (init
6531 && init_const_expr_p
6532 && !type_dependent_p
6533 && TREE_CODE (type) != REFERENCE_TYPE
6534 && decl_maybe_constant_var_p (decl)
6535 && !type_dependent_init_p (init)
6536 && !value_dependent_init_p (init))
6538 /* This variable seems to be a non-dependent constant, so process
6539 its initializer. If check_initializer returns non-null the
6540 initialization wasn't constant after all. */
6541 tree init_code;
6542 cleanups = make_tree_vector ();
6543 init_code = check_initializer (decl, init, flags, &cleanups);
6544 if (init_code == NULL_TREE)
6545 init = NULL_TREE;
6546 release_tree_vector (cleanups);
6548 else if (!DECL_PRETTY_FUNCTION_P (decl))
6550 /* Deduce array size even if the initializer is dependent. */
6551 maybe_deduce_size_from_array_init (decl, init);
6552 /* And complain about multiple initializers. */
6553 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6554 && !MAYBE_CLASS_TYPE_P (type))
6555 init = build_x_compound_expr_from_list (init, ELK_INIT,
6556 tf_warning_or_error);
6559 if (init)
6560 DECL_INITIAL (decl) = init;
6561 return;
6564 /* Just store non-static data member initializers for later. */
6565 if (init && TREE_CODE (decl) == FIELD_DECL)
6566 DECL_INITIAL (decl) = init;
6568 /* Take care of TYPE_DECLs up front. */
6569 if (TREE_CODE (decl) == TYPE_DECL)
6571 if (type != error_mark_node
6572 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6574 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6575 warning (0, "shadowing previous type declaration of %q#D", decl);
6576 set_identifier_type_value (DECL_NAME (decl), decl);
6579 /* If we have installed this as the canonical typedef for this
6580 type, and that type has not been defined yet, delay emitting
6581 the debug information for it, as we will emit it later. */
6582 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6583 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6584 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6586 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6587 at_eof);
6588 return;
6591 /* A reference will be modified here, as it is initialized. */
6592 if (! DECL_EXTERNAL (decl)
6593 && TREE_READONLY (decl)
6594 && TREE_CODE (type) == REFERENCE_TYPE)
6596 was_readonly = 1;
6597 TREE_READONLY (decl) = 0;
6600 if (VAR_P (decl))
6602 /* If this is a local variable that will need a mangled name,
6603 register it now. We must do this before processing the
6604 initializer for the variable, since the initialization might
6605 require a guard variable, and since the mangled name of the
6606 guard variable will depend on the mangled name of this
6607 variable. */
6608 if (DECL_FUNCTION_SCOPE_P (decl)
6609 && TREE_STATIC (decl)
6610 && !DECL_ARTIFICIAL (decl))
6612 push_local_name (decl);
6613 if (DECL_CONSTRUCTOR_P (current_function_decl)
6614 || DECL_DESTRUCTOR_P (current_function_decl))
6615 /* Normally local_decls is populated during GIMPLE lowering,
6616 but [cd]tors are never actually compiled directly. We need
6617 to put statics on the list so we can deal with the label
6618 address extension. FIXME. */
6619 add_local_decl (cfun, decl);
6622 /* Convert the initializer to the type of DECL, if we have not
6623 already initialized DECL. */
6624 if (!DECL_INITIALIZED_P (decl)
6625 /* If !DECL_EXTERNAL then DECL is being defined. In the
6626 case of a static data member initialized inside the
6627 class-specifier, there can be an initializer even if DECL
6628 is *not* defined. */
6629 && (!DECL_EXTERNAL (decl) || init))
6631 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6633 tree jclass
6634 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6635 /* Allow libjava/prims.cc define primitive classes. */
6636 if (init != NULL_TREE
6637 || jclass == NULL_TREE
6638 || TREE_CODE (jclass) != TYPE_DECL
6639 || !POINTER_TYPE_P (TREE_TYPE (jclass))
6640 || !same_type_ignoring_top_level_qualifiers_p
6641 (type, TREE_TYPE (TREE_TYPE (jclass))))
6642 error ("Java object %qD not allocated with %<new%>", decl);
6643 init = NULL_TREE;
6645 cleanups = make_tree_vector ();
6646 init = check_initializer (decl, init, flags, &cleanups);
6648 /* Handle:
6650 [dcl.init]
6652 The memory occupied by any object of static storage
6653 duration is zero-initialized at program startup before
6654 any other initialization takes place.
6656 We cannot create an appropriate initializer until after
6657 the type of DECL is finalized. If DECL_INITIAL is set,
6658 then the DECL is statically initialized, and any
6659 necessary zero-initialization has already been performed. */
6660 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6661 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6662 /*nelts=*/NULL_TREE,
6663 /*static_storage_p=*/true);
6664 /* Remember that the initialization for this variable has
6665 taken place. */
6666 DECL_INITIALIZED_P (decl) = 1;
6667 /* This declaration is the definition of this variable,
6668 unless we are initializing a static data member within
6669 the class specifier. */
6670 if (!DECL_EXTERNAL (decl))
6671 var_definition_p = true;
6673 /* If the variable has an array type, lay out the type, even if
6674 there is no initializer. It is valid to index through the
6675 array, and we must get TYPE_ALIGN set correctly on the array
6676 type. */
6677 else if (TREE_CODE (type) == ARRAY_TYPE)
6678 layout_type (type);
6680 if (TREE_STATIC (decl)
6681 && !at_function_scope_p ()
6682 && current_function_decl == NULL)
6683 /* So decl is a global variable or a static member of a
6684 non local class. Record the types it uses
6685 so that we can decide later to emit debug info for them. */
6686 record_types_used_by_current_var_decl (decl);
6688 else if (TREE_CODE (decl) == FIELD_DECL
6689 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6690 error ("non-static data member %qD has Java class type", decl);
6692 /* Add this declaration to the statement-tree. This needs to happen
6693 after the call to check_initializer so that the DECL_EXPR for a
6694 reference temp is added before the DECL_EXPR for the reference itself. */
6695 if (DECL_FUNCTION_SCOPE_P (decl))
6697 /* If we're building a variable sized type, and we might be
6698 reachable other than via the top of the current binding
6699 level, then create a new BIND_EXPR so that we deallocate
6700 the object at the right time. */
6701 if (VAR_P (decl)
6702 && DECL_SIZE (decl)
6703 && !TREE_CONSTANT (DECL_SIZE (decl))
6704 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
6706 tree bind;
6707 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
6708 TREE_SIDE_EFFECTS (bind) = 1;
6709 add_stmt (bind);
6710 BIND_EXPR_BODY (bind) = push_stmt_list ();
6712 add_decl_expr (decl);
6715 /* Let the middle end know about variables and functions -- but not
6716 static data members in uninstantiated class templates. */
6717 if (VAR_OR_FUNCTION_DECL_P (decl))
6719 if (VAR_P (decl))
6721 layout_var_decl (decl);
6722 maybe_commonize_var (decl);
6725 /* This needs to happen after the linkage is set. */
6726 determine_visibility (decl);
6728 if (var_definition_p && TREE_STATIC (decl))
6730 /* If a TREE_READONLY variable needs initialization
6731 at runtime, it is no longer readonly and we need to
6732 avoid MEM_READONLY_P being set on RTL created for it. */
6733 if (init)
6735 if (TREE_READONLY (decl))
6736 TREE_READONLY (decl) = 0;
6737 was_readonly = 0;
6739 else if (was_readonly)
6740 TREE_READONLY (decl) = 1;
6742 /* Likewise if it needs destruction. */
6743 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6744 TREE_READONLY (decl) = 0;
6747 make_rtl_for_nonlocal_decl (decl, init, asmspec);
6749 /* Check for abstractness of the type. Notice that there is no
6750 need to strip array types here since the check for those types
6751 is already done within create_array_type_for_decl. */
6752 abstract_virtuals_error (decl, type);
6754 if (TREE_TYPE (decl) == error_mark_node)
6755 /* No initialization required. */
6757 else if (TREE_CODE (decl) == FUNCTION_DECL)
6759 if (init)
6761 if (init == ridpointers[(int)RID_DEFAULT])
6763 /* An out-of-class default definition is defined at
6764 the point where it is explicitly defaulted. */
6765 if (DECL_DELETED_FN (decl))
6766 maybe_explain_implicit_delete (decl);
6767 else if (DECL_INITIAL (decl) == error_mark_node)
6768 synthesize_method (decl);
6770 else
6771 error ("function %q#D is initialized like a variable", decl);
6773 /* else no initialization required. */
6775 else if (DECL_EXTERNAL (decl)
6776 && ! (DECL_LANG_SPECIFIC (decl)
6777 && DECL_NOT_REALLY_EXTERN (decl)))
6779 if (init)
6780 DECL_INITIAL (decl) = init;
6782 /* A variable definition. */
6783 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6784 /* Initialize the local variable. */
6785 initialize_local_var (decl, init);
6787 /* If a variable is defined, and then a subsequent
6788 definition with external linkage is encountered, we will
6789 get here twice for the same variable. We want to avoid
6790 calling expand_static_init more than once. For variables
6791 that are not static data members, we can call
6792 expand_static_init only when we actually process the
6793 initializer. It is not legal to redeclare a static data
6794 member, so this issue does not arise in that case. */
6795 else if (var_definition_p && TREE_STATIC (decl))
6796 expand_static_init (decl, init);
6799 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6800 reference, insert it in the statement-tree now. */
6801 if (cleanups)
6803 unsigned i; tree t;
6804 FOR_EACH_VEC_ELT (*cleanups, i, t)
6805 push_cleanup (decl, t, false);
6806 release_tree_vector (cleanups);
6809 if (was_readonly)
6810 TREE_READONLY (decl) = 1;
6812 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6815 /* Returns a declaration for a VAR_DECL as if:
6817 extern "C" TYPE NAME;
6819 had been seen. Used to create compiler-generated global
6820 variables. */
6822 static tree
6823 declare_global_var (tree name, tree type)
6825 tree decl;
6827 push_to_top_level ();
6828 decl = build_decl (input_location, VAR_DECL, name, type);
6829 TREE_PUBLIC (decl) = 1;
6830 DECL_EXTERNAL (decl) = 1;
6831 DECL_ARTIFICIAL (decl) = 1;
6832 /* If the user has explicitly declared this variable (perhaps
6833 because the code we are compiling is part of a low-level runtime
6834 library), then it is possible that our declaration will be merged
6835 with theirs by pushdecl. */
6836 decl = pushdecl (decl);
6837 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6838 pop_from_top_level ();
6840 return decl;
6843 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6844 if "__cxa_atexit" is not being used) corresponding to the function
6845 to be called when the program exits. */
6847 static tree
6848 get_atexit_fn_ptr_type (void)
6850 tree fn_type;
6852 if (!atexit_fn_ptr_type_node)
6854 tree arg_type;
6855 if (flag_use_cxa_atexit
6856 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6857 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
6858 arg_type = ptr_type_node;
6859 else
6860 /* The parameter to "atexit" is "void (*)(void)". */
6861 arg_type = NULL_TREE;
6863 fn_type = build_function_type_list (void_type_node,
6864 arg_type, NULL_TREE);
6865 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6868 return atexit_fn_ptr_type_node;
6871 /* Returns a pointer to the `atexit' function. Note that if
6872 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6873 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6875 static tree
6876 get_atexit_node (void)
6878 tree atexit_fndecl;
6879 tree fn_type;
6880 tree fn_ptr_type;
6881 const char *name;
6882 bool use_aeabi_atexit;
6884 if (atexit_node)
6885 return atexit_node;
6887 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6889 /* The declaration for `__cxa_atexit' is:
6891 int __cxa_atexit (void (*)(void *), void *, void *)
6893 We build up the argument types and then the function type
6894 itself. */
6895 tree argtype0, argtype1, argtype2;
6897 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6898 /* First, build the pointer-to-function type for the first
6899 argument. */
6900 fn_ptr_type = get_atexit_fn_ptr_type ();
6901 /* Then, build the rest of the argument types. */
6902 argtype2 = ptr_type_node;
6903 if (use_aeabi_atexit)
6905 argtype1 = fn_ptr_type;
6906 argtype0 = ptr_type_node;
6908 else
6910 argtype1 = ptr_type_node;
6911 argtype0 = fn_ptr_type;
6913 /* And the final __cxa_atexit type. */
6914 fn_type = build_function_type_list (integer_type_node,
6915 argtype0, argtype1, argtype2,
6916 NULL_TREE);
6917 if (use_aeabi_atexit)
6918 name = "__aeabi_atexit";
6919 else
6920 name = "__cxa_atexit";
6922 else
6924 /* The declaration for `atexit' is:
6926 int atexit (void (*)());
6928 We build up the argument types and then the function type
6929 itself. */
6930 fn_ptr_type = get_atexit_fn_ptr_type ();
6931 /* Build the final atexit type. */
6932 fn_type = build_function_type_list (integer_type_node,
6933 fn_ptr_type, NULL_TREE);
6934 name = "atexit";
6937 /* Now, build the function declaration. */
6938 push_lang_context (lang_name_c);
6939 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
6940 mark_used (atexit_fndecl);
6941 pop_lang_context ();
6942 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
6944 return atexit_node;
6947 /* Like get_atexit_node, but for thread-local cleanups. */
6949 static tree
6950 get_thread_atexit_node (void)
6952 /* The declaration for `__cxa_thread_atexit' is:
6954 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
6955 tree fn_type = build_function_type_list (integer_type_node,
6956 get_atexit_fn_ptr_type (),
6957 ptr_type_node, ptr_type_node,
6958 NULL_TREE);
6960 /* Now, build the function declaration. */
6961 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
6962 ECF_LEAF | ECF_NOTHROW);
6963 return decay_conversion (atexit_fndecl, tf_warning_or_error);
6966 /* Returns the __dso_handle VAR_DECL. */
6968 static tree
6969 get_dso_handle_node (void)
6971 if (dso_handle_node)
6972 return dso_handle_node;
6974 /* Declare the variable. */
6975 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6976 ptr_type_node);
6978 #ifdef HAVE_GAS_HIDDEN
6979 if (dso_handle_node != error_mark_node)
6981 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6982 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6984 #endif
6986 return dso_handle_node;
6989 /* Begin a new function with internal linkage whose job will be simply
6990 to destroy some particular variable. */
6992 static GTY(()) int start_cleanup_cnt;
6994 static tree
6995 start_cleanup_fn (void)
6997 char name[32];
6998 tree fntype;
6999 tree fndecl;
7000 bool use_cxa_atexit = flag_use_cxa_atexit
7001 && !targetm.cxx.use_atexit_for_cxa_atexit ();
7003 push_to_top_level ();
7005 /* No need to mangle this. */
7006 push_lang_context (lang_name_c);
7008 /* Build the name of the function. */
7009 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
7010 /* Build the function declaration. */
7011 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
7012 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
7013 /* It's a function with internal linkage, generated by the
7014 compiler. */
7015 TREE_PUBLIC (fndecl) = 0;
7016 DECL_ARTIFICIAL (fndecl) = 1;
7017 /* Make the function `inline' so that it is only emitted if it is
7018 actually needed. It is unlikely that it will be inlined, since
7019 it is only called via a function pointer, but we avoid unnecessary
7020 emissions this way. */
7021 DECL_DECLARED_INLINE_P (fndecl) = 1;
7022 DECL_INTERFACE_KNOWN (fndecl) = 1;
7023 /* Build the parameter. */
7024 if (use_cxa_atexit)
7026 tree parmdecl;
7028 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
7029 DECL_CONTEXT (parmdecl) = fndecl;
7030 TREE_USED (parmdecl) = 1;
7031 DECL_READ_P (parmdecl) = 1;
7032 DECL_ARGUMENTS (fndecl) = parmdecl;
7035 pushdecl (fndecl);
7036 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7038 pop_lang_context ();
7040 return current_function_decl;
7043 /* Finish the cleanup function begun by start_cleanup_fn. */
7045 static void
7046 end_cleanup_fn (void)
7048 expand_or_defer_fn (finish_function (0));
7050 pop_from_top_level ();
7053 /* Generate code to handle the destruction of DECL, an object with
7054 static storage duration. */
7056 tree
7057 register_dtor_fn (tree decl)
7059 tree cleanup;
7060 tree addr;
7061 tree compound_stmt;
7062 tree fcall;
7063 tree type;
7064 bool ob_parm, dso_parm, use_dtor;
7065 tree arg0, arg1, arg2;
7066 tree atex_node;
7068 type = TREE_TYPE (decl);
7069 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7070 return void_node;
7072 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7073 "__aeabi_atexit"), and DECL is a class object, we can just pass the
7074 destructor to "__cxa_atexit"; we don't have to build a temporary
7075 function to do the cleanup. */
7076 dso_parm = (flag_use_cxa_atexit
7077 && !targetm.cxx.use_atexit_for_cxa_atexit ());
7078 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
7079 use_dtor = ob_parm && CLASS_TYPE_P (type);
7080 if (use_dtor)
7082 int idx;
7084 /* Find the destructor. */
7085 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
7086 gcc_assert (idx >= 0);
7087 cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
7088 /* Make sure it is accessible. */
7089 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7090 tf_warning_or_error);
7092 else
7094 /* Call build_cleanup before we enter the anonymous function so
7095 that any access checks will be done relative to the current
7096 scope, rather than the scope of the anonymous function. */
7097 build_cleanup (decl);
7099 /* Now start the function. */
7100 cleanup = start_cleanup_fn ();
7102 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
7103 to the original function, rather than the anonymous one. That
7104 will make the back end think that nested functions are in use,
7105 which causes confusion. */
7106 push_deferring_access_checks (dk_no_check);
7107 fcall = build_cleanup (decl);
7108 pop_deferring_access_checks ();
7110 /* Create the body of the anonymous function. */
7111 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7112 finish_expr_stmt (fcall);
7113 finish_compound_stmt (compound_stmt);
7114 end_cleanup_fn ();
7117 /* Call atexit with the cleanup function. */
7118 mark_used (cleanup);
7119 cleanup = build_address (cleanup);
7121 if (CP_DECL_THREAD_LOCAL_P (decl))
7122 atex_node = get_thread_atexit_node ();
7123 else
7124 atex_node = get_atexit_node ();
7126 if (use_dtor)
7128 /* We must convert CLEANUP to the type that "__cxa_atexit"
7129 expects. */
7130 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
7131 /* "__cxa_atexit" will pass the address of DECL to the
7132 cleanup function. */
7133 mark_used (decl);
7134 addr = build_address (decl);
7135 /* The declared type of the parameter to "__cxa_atexit" is
7136 "void *". For plain "T*", we could just let the
7137 machinery in cp_build_function_call convert it -- but if the
7138 type is "cv-qualified T *", then we need to convert it
7139 before passing it in, to avoid spurious errors. */
7140 addr = build_nop (ptr_type_node, addr);
7142 else
7143 /* Since the cleanup functions we build ignore the address
7144 they're given, there's no reason to pass the actual address
7145 in, and, in general, it's cheaper to pass NULL than any
7146 other value. */
7147 addr = null_pointer_node;
7149 if (dso_parm)
7150 arg2 = cp_build_addr_expr (get_dso_handle_node (),
7151 tf_warning_or_error);
7152 else if (ob_parm)
7153 /* Just pass NULL to the dso handle parm if we don't actually
7154 have a DSO handle on this target. */
7155 arg2 = null_pointer_node;
7156 else
7157 arg2 = NULL_TREE;
7159 if (ob_parm)
7161 if (!CP_DECL_THREAD_LOCAL_P (decl)
7162 && targetm.cxx.use_aeabi_atexit ())
7164 arg1 = cleanup;
7165 arg0 = addr;
7167 else
7169 arg1 = addr;
7170 arg0 = cleanup;
7173 else
7175 arg0 = cleanup;
7176 arg1 = NULL_TREE;
7178 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
7179 arg0, arg1, arg2, NULL_TREE);
7182 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
7183 is its initializer. Generate code to handle the construction
7184 and destruction of DECL. */
7186 static void
7187 expand_static_init (tree decl, tree init)
7189 gcc_assert (VAR_P (decl));
7190 gcc_assert (TREE_STATIC (decl));
7192 /* Some variables require no dynamic initialization. */
7193 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
7195 /* Make sure the destructor is callable. */
7196 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7197 if (!init)
7198 return;
7201 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
7202 && !DECL_FUNCTION_SCOPE_P (decl))
7204 if (init)
7205 error ("non-local variable %qD declared %<__thread%> "
7206 "needs dynamic initialization", decl);
7207 else
7208 error ("non-local variable %qD declared %<__thread%> "
7209 "has a non-trivial destructor", decl);
7210 static bool informed;
7211 if (!informed)
7213 inform (DECL_SOURCE_LOCATION (decl),
7214 "C++11 %<thread_local%> allows dynamic initialization "
7215 "and destruction");
7216 informed = true;
7218 return;
7221 if (DECL_FUNCTION_SCOPE_P (decl))
7223 /* Emit code to perform this initialization but once. */
7224 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
7225 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
7226 tree guard, guard_addr;
7227 tree flag, begin;
7228 /* We don't need thread-safety code for thread-local vars. */
7229 bool thread_guard = (flag_threadsafe_statics
7230 && !CP_DECL_THREAD_LOCAL_P (decl));
7232 /* Emit code to perform this initialization but once. This code
7233 looks like:
7235 static <type> guard;
7236 if (!__atomic_load (guard.first_byte)) {
7237 if (__cxa_guard_acquire (&guard)) {
7238 bool flag = false;
7239 try {
7240 // Do initialization.
7241 flag = true; __cxa_guard_release (&guard);
7242 // Register variable for destruction at end of program.
7243 } catch {
7244 if (!flag) __cxa_guard_abort (&guard);
7248 Note that the `flag' variable is only set to 1 *after* the
7249 initialization is complete. This ensures that an exception,
7250 thrown during the construction, will cause the variable to
7251 reinitialized when we pass through this code again, as per:
7253 [stmt.dcl]
7255 If the initialization exits by throwing an exception, the
7256 initialization is not complete, so it will be tried again
7257 the next time control enters the declaration.
7259 This process should be thread-safe, too; multiple threads
7260 should not be able to initialize the variable more than
7261 once. */
7263 /* Create the guard variable. */
7264 guard = get_guard (decl);
7266 /* Begin the conditional initialization. */
7267 if_stmt = begin_if_stmt ();
7269 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
7270 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7272 if (thread_guard)
7274 tree vfntype = NULL_TREE;
7275 tree acquire_name, release_name, abort_name;
7276 tree acquire_fn, release_fn, abort_fn;
7277 guard_addr = build_address (guard);
7279 acquire_name = get_identifier ("__cxa_guard_acquire");
7280 release_name = get_identifier ("__cxa_guard_release");
7281 abort_name = get_identifier ("__cxa_guard_abort");
7282 acquire_fn = identifier_global_value (acquire_name);
7283 release_fn = identifier_global_value (release_name);
7284 abort_fn = identifier_global_value (abort_name);
7285 if (!acquire_fn)
7286 acquire_fn = push_library_fn
7287 (acquire_name, build_function_type_list (integer_type_node,
7288 TREE_TYPE (guard_addr),
7289 NULL_TREE),
7290 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
7291 if (!release_fn || !abort_fn)
7292 vfntype = build_function_type_list (void_type_node,
7293 TREE_TYPE (guard_addr),
7294 NULL_TREE);
7295 if (!release_fn)
7296 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
7297 ECF_NOTHROW | ECF_LEAF);
7298 if (!abort_fn)
7299 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
7300 ECF_NOTHROW | ECF_LEAF);
7302 inner_if_stmt = begin_if_stmt ();
7303 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
7304 inner_if_stmt);
7306 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7307 begin = get_target_expr (boolean_false_node);
7308 flag = TARGET_EXPR_SLOT (begin);
7310 TARGET_EXPR_CLEANUP (begin)
7311 = build3 (COND_EXPR, void_type_node, flag,
7312 void_node,
7313 build_call_n (abort_fn, 1, guard_addr));
7314 CLEANUP_EH_ONLY (begin) = 1;
7316 /* Do the initialization itself. */
7317 init = add_stmt_to_compound (begin, init);
7318 init = add_stmt_to_compound
7319 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7320 init = add_stmt_to_compound
7321 (init, build_call_n (release_fn, 1, guard_addr));
7323 else
7324 init = add_stmt_to_compound (init, set_guard (guard));
7326 /* Use atexit to register a function for destroying this static
7327 variable. */
7328 init = add_stmt_to_compound (init, register_dtor_fn (decl));
7330 finish_expr_stmt (init);
7332 if (thread_guard)
7334 finish_compound_stmt (inner_then_clause);
7335 finish_then_clause (inner_if_stmt);
7336 finish_if_stmt (inner_if_stmt);
7339 finish_compound_stmt (then_clause);
7340 finish_then_clause (if_stmt);
7341 finish_if_stmt (if_stmt);
7343 else if (CP_DECL_THREAD_LOCAL_P (decl))
7344 tls_aggregates = tree_cons (init, decl, tls_aggregates);
7345 else
7346 static_aggregates = tree_cons (init, decl, static_aggregates);
7350 /* Make TYPE a complete type based on INITIAL_VALUE.
7351 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7352 2 if there was no information (in which case assume 0 if DO_DEFAULT),
7353 3 if the initializer list is empty (in pedantic mode). */
7356 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7358 int failure;
7359 tree type, elt_type;
7361 /* Don't get confused by a CONSTRUCTOR for some other type. */
7362 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
7363 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value))
7364 return 1;
7366 if (initial_value)
7368 unsigned HOST_WIDE_INT i;
7369 tree value;
7371 /* An array of character type can be initialized from a
7372 brace-enclosed string constant.
7374 FIXME: this code is duplicated from reshape_init. Probably
7375 we should just call reshape_init here? */
7376 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7377 && TREE_CODE (initial_value) == CONSTRUCTOR
7378 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
7380 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
7381 tree value = (*v)[0].value;
7383 if (TREE_CODE (value) == STRING_CST
7384 && v->length () == 1)
7385 initial_value = value;
7388 /* If any of the elements are parameter packs, we can't actually
7389 complete this type now because the array size is dependent. */
7390 if (TREE_CODE (initial_value) == CONSTRUCTOR)
7392 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
7393 i, value)
7395 if (PACK_EXPANSION_P (value))
7396 return 0;
7401 failure = complete_array_type (ptype, initial_value, do_default);
7403 /* We can create the array before the element type is complete, which
7404 means that we didn't have these two bits set in the original type
7405 either. In completing the type, we are expected to propagate these
7406 bits. See also complete_type which does the same thing for arrays
7407 of fixed size. */
7408 type = *ptype;
7409 if (TYPE_DOMAIN (type))
7411 elt_type = TREE_TYPE (type);
7412 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7413 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7414 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7417 return failure;
7420 /* As above, but either give an error or reject zero-size arrays, depending
7421 on COMPLAIN. */
7424 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7425 bool do_default, tsubst_flags_t complain)
7427 int failure;
7428 bool sfinae = !(complain & tf_error);
7429 /* In SFINAE context we can't be lenient about zero-size arrays. */
7430 if (sfinae)
7431 ++pedantic;
7432 failure = cp_complete_array_type (ptype, initial_value, do_default);
7433 if (sfinae)
7434 --pedantic;
7435 if (failure)
7437 if (sfinae)
7438 /* Not an error. */;
7439 else if (failure == 1)
7440 error ("initializer fails to determine size of %qT", *ptype);
7441 else if (failure == 2)
7443 if (do_default)
7444 error ("array size missing in %qT", *ptype);
7446 else if (failure == 3)
7447 error ("zero-size array %qT", *ptype);
7448 *ptype = error_mark_node;
7450 return failure;
7453 /* Return zero if something is declared to be a member of type
7454 CTYPE when in the context of CUR_TYPE. STRING is the error
7455 message to print in that case. Otherwise, quietly return 1. */
7457 static int
7458 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7460 if (ctype && ctype != cur_type)
7462 if (flags == DTOR_FLAG)
7463 error ("destructor for alien class %qT cannot be a member", ctype);
7464 else
7465 error ("constructor for alien class %qT cannot be a member", ctype);
7466 return 0;
7468 return 1;
7471 /* Subroutine of `grokdeclarator'. */
7473 /* Generate errors possibly applicable for a given set of specifiers.
7474 This is for ARM $7.1.2. */
7476 static void
7477 bad_specifiers (tree object,
7478 enum bad_spec_place type,
7479 int virtualp,
7480 int quals,
7481 int inlinep,
7482 int friendp,
7483 int raises)
7485 switch (type)
7487 case BSP_VAR:
7488 if (virtualp)
7489 error ("%qD declared as a %<virtual%> variable", object);
7490 if (inlinep)
7491 error ("%qD declared as an %<inline%> variable", object);
7492 if (quals)
7493 error ("%<const%> and %<volatile%> function specifiers on "
7494 "%qD invalid in variable declaration", object);
7495 break;
7496 case BSP_PARM:
7497 if (virtualp)
7498 error ("%qD declared as a %<virtual%> parameter", object);
7499 if (inlinep)
7500 error ("%qD declared as an %<inline%> parameter", object);
7501 if (quals)
7502 error ("%<const%> and %<volatile%> function specifiers on "
7503 "%qD invalid in parameter declaration", object);
7504 break;
7505 case BSP_TYPE:
7506 if (virtualp)
7507 error ("%qD declared as a %<virtual%> type", object);
7508 if (inlinep)
7509 error ("%qD declared as an %<inline%> type", object);
7510 if (quals)
7511 error ("%<const%> and %<volatile%> function specifiers on "
7512 "%qD invalid in type declaration", object);
7513 break;
7514 case BSP_FIELD:
7515 if (virtualp)
7516 error ("%qD declared as a %<virtual%> field", object);
7517 if (inlinep)
7518 error ("%qD declared as an %<inline%> field", object);
7519 if (quals)
7520 error ("%<const%> and %<volatile%> function specifiers on "
7521 "%qD invalid in field declaration", object);
7522 break;
7523 default:
7524 gcc_unreachable();
7526 if (friendp)
7527 error ("%q+D declared as a friend", object);
7528 if (raises
7529 && (TREE_CODE (object) == TYPE_DECL
7530 || (!TYPE_PTRFN_P (TREE_TYPE (object))
7531 && !TYPE_REFFN_P (TREE_TYPE (object))
7532 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7533 error ("%q+D declared with an exception specification", object);
7536 /* DECL is a member function or static data member and is presently
7537 being defined. Check that the definition is taking place in a
7538 valid namespace. */
7540 static void
7541 check_class_member_definition_namespace (tree decl)
7543 /* These checks only apply to member functions and static data
7544 members. */
7545 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
7546 /* We check for problems with specializations in pt.c in
7547 check_specialization_namespace, where we can issue better
7548 diagnostics. */
7549 if (processing_specialization)
7550 return;
7551 /* There are no restrictions on the placement of
7552 explicit instantiations. */
7553 if (processing_explicit_instantiation)
7554 return;
7555 /* [class.mfct]
7557 A member function definition that appears outside of the
7558 class definition shall appear in a namespace scope enclosing
7559 the class definition.
7561 [class.static.data]
7563 The definition for a static data member shall appear in a
7564 namespace scope enclosing the member's class definition. */
7565 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7566 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7567 decl, DECL_CONTEXT (decl));
7570 /* Build a PARM_DECL for the "this" parameter. TYPE is the
7571 METHOD_TYPE for a non-static member function; QUALS are the
7572 cv-qualifiers that apply to the function. */
7574 tree
7575 build_this_parm (tree type, cp_cv_quals quals)
7577 tree this_type;
7578 tree qual_type;
7579 tree parm;
7580 cp_cv_quals this_quals;
7582 if (CLASS_TYPE_P (type))
7584 this_type
7585 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7586 this_type = build_pointer_type (this_type);
7588 else
7589 this_type = type_of_this_parm (type);
7590 /* The `this' parameter is implicitly `const'; it cannot be
7591 assigned to. */
7592 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7593 qual_type = cp_build_qualified_type (this_type, this_quals);
7594 parm = build_artificial_parm (this_identifier, qual_type);
7595 cp_apply_type_quals_to_decl (this_quals, parm);
7596 return parm;
7599 /* DECL is a static member function. Complain if it was declared
7600 with function-cv-quals. */
7602 static void
7603 check_static_quals (tree decl, cp_cv_quals quals)
7605 if (quals != TYPE_UNQUALIFIED)
7606 error ("static member function %q#D declared with type qualifiers",
7607 decl);
7610 /* Helper function. Replace the temporary this parameter injected
7611 during cp_finish_omp_declare_simd with the real this parameter. */
7613 static tree
7614 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
7616 tree this_parm = (tree) data;
7617 if (TREE_CODE (*tp) == PARM_DECL
7618 && DECL_NAME (*tp) == this_identifier
7619 && *tp != this_parm)
7620 *tp = this_parm;
7621 else if (TYPE_P (*tp))
7622 *walk_subtrees = 0;
7623 return NULL_TREE;
7626 /* CTYPE is class type, or null if non-class.
7627 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7628 or METHOD_TYPE.
7629 DECLARATOR is the function's name.
7630 PARMS is a chain of PARM_DECLs for the function.
7631 VIRTUALP is truthvalue of whether the function is virtual or not.
7632 FLAGS are to be passed through to `grokclassfn'.
7633 QUALS are qualifiers indicating whether the function is `const'
7634 or `volatile'.
7635 RAISES is a list of exceptions that this function can raise.
7636 CHECK is 1 if we must find this method in CTYPE, 0 if we should
7637 not look, and -1 if we should not call `grokclassfn' at all.
7639 SFK is the kind of special function (if any) for the new function.
7641 Returns `NULL_TREE' if something goes wrong, after issuing
7642 applicable error messages. */
7644 static tree
7645 grokfndecl (tree ctype,
7646 tree type,
7647 tree declarator,
7648 tree parms,
7649 tree orig_declarator,
7650 int virtualp,
7651 enum overload_flags flags,
7652 cp_cv_quals quals,
7653 cp_ref_qualifier rqual,
7654 tree raises,
7655 int check,
7656 int friendp,
7657 int publicp,
7658 int inlinep,
7659 bool deletedp,
7660 special_function_kind sfk,
7661 bool funcdef_flag,
7662 int template_count,
7663 tree in_namespace,
7664 tree* attrlist,
7665 location_t location)
7667 tree decl;
7668 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7669 tree t;
7671 if (rqual)
7672 type = build_ref_qualified_type (type, rqual);
7673 if (raises)
7674 type = build_exception_variant (type, raises);
7676 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7678 /* If we have an explicit location, use it, otherwise use whatever
7679 build_lang_decl used (probably input_location). */
7680 if (location != UNKNOWN_LOCATION)
7681 DECL_SOURCE_LOCATION (decl) = location;
7683 if (TREE_CODE (type) == METHOD_TYPE)
7685 tree parm;
7686 parm = build_this_parm (type, quals);
7687 DECL_CHAIN (parm) = parms;
7688 parms = parm;
7690 DECL_ARGUMENTS (decl) = parms;
7691 for (t = parms; t; t = DECL_CHAIN (t))
7692 DECL_CONTEXT (t) = decl;
7693 /* Propagate volatile out from type to decl. */
7694 if (TYPE_VOLATILE (type))
7695 TREE_THIS_VOLATILE (decl) = 1;
7697 /* Setup decl according to sfk. */
7698 switch (sfk)
7700 case sfk_constructor:
7701 case sfk_copy_constructor:
7702 case sfk_move_constructor:
7703 DECL_CONSTRUCTOR_P (decl) = 1;
7704 break;
7705 case sfk_destructor:
7706 DECL_DESTRUCTOR_P (decl) = 1;
7707 break;
7708 default:
7709 break;
7712 /* If pointers to member functions use the least significant bit to
7713 indicate whether a function is virtual, ensure a pointer
7714 to this function will have that bit clear. */
7715 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7716 && TREE_CODE (type) == METHOD_TYPE
7717 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7718 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7720 if (friendp
7721 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7723 if (funcdef_flag)
7724 error
7725 ("defining explicit specialization %qD in friend declaration",
7726 orig_declarator);
7727 else
7729 tree fns = TREE_OPERAND (orig_declarator, 0);
7730 tree args = TREE_OPERAND (orig_declarator, 1);
7732 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7734 /* Something like `template <class T> friend void f<T>()'. */
7735 error ("invalid use of template-id %qD in declaration "
7736 "of primary template",
7737 orig_declarator);
7738 return NULL_TREE;
7742 /* A friend declaration of the form friend void f<>(). Record
7743 the information in the TEMPLATE_ID_EXPR. */
7744 SET_DECL_IMPLICIT_INSTANTIATION (decl);
7746 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
7747 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7749 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7750 if (TREE_PURPOSE (t)
7751 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7753 error ("default arguments are not allowed in declaration "
7754 "of friend template specialization %qD",
7755 decl);
7756 return NULL_TREE;
7759 if (inlinep & 1)
7761 error ("%<inline%> is not allowed in declaration of friend "
7762 "template specialization %qD",
7763 decl);
7764 return NULL_TREE;
7769 /* If this decl has namespace scope, set that up. */
7770 if (in_namespace)
7771 set_decl_namespace (decl, in_namespace, friendp);
7772 else if (!ctype)
7773 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7775 /* `main' and builtins have implicit 'C' linkage. */
7776 if ((MAIN_NAME_P (declarator)
7777 || (IDENTIFIER_LENGTH (declarator) > 10
7778 && IDENTIFIER_POINTER (declarator)[0] == '_'
7779 && IDENTIFIER_POINTER (declarator)[1] == '_'
7780 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
7781 || (targetcm.cxx_implicit_extern_c
7782 && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
7783 && current_lang_name == lang_name_cplusplus
7784 && ctype == NULL_TREE
7785 && DECL_FILE_SCOPE_P (decl))
7786 SET_DECL_LANGUAGE (decl, lang_c);
7788 /* Should probably propagate const out from type to decl I bet (mrs). */
7789 if (staticp)
7791 DECL_STATIC_FUNCTION_P (decl) = 1;
7792 DECL_CONTEXT (decl) = ctype;
7795 if (deletedp)
7796 DECL_DELETED_FN (decl) = 1;
7798 if (ctype)
7800 DECL_CONTEXT (decl) = ctype;
7801 if (funcdef_flag)
7802 check_class_member_definition_namespace (decl);
7805 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7807 if (PROCESSING_REAL_TEMPLATE_DECL_P())
7808 error ("cannot declare %<::main%> to be a template");
7809 if (inlinep & 1)
7810 error ("cannot declare %<::main%> to be inline");
7811 if (inlinep & 2)
7812 error ("cannot declare %<::main%> to be constexpr");
7813 if (!publicp)
7814 error ("cannot declare %<::main%> to be static");
7815 inlinep = 0;
7816 publicp = 1;
7819 /* Members of anonymous types and local classes have no linkage; make
7820 them internal. If a typedef is made later, this will be changed. */
7821 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
7822 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7823 publicp = 0;
7825 if (publicp && cxx_dialect == cxx98)
7827 /* [basic.link]: A name with no linkage (notably, the name of a class
7828 or enumeration declared in a local scope) shall not be used to
7829 declare an entity with linkage.
7831 DR 757 relaxes this restriction for C++0x. */
7832 no_linkage_error (decl);
7835 TREE_PUBLIC (decl) = publicp;
7836 if (! publicp)
7838 DECL_INTERFACE_KNOWN (decl) = 1;
7839 DECL_NOT_REALLY_EXTERN (decl) = 1;
7842 /* If the declaration was declared inline, mark it as such. */
7843 if (inlinep)
7845 DECL_DECLARED_INLINE_P (decl) = 1;
7846 if (publicp)
7847 DECL_COMDAT (decl) = 1;
7849 if (inlinep & 2)
7850 DECL_DECLARED_CONSTEXPR_P (decl) = true;
7852 DECL_EXTERNAL (decl) = 1;
7853 if (TREE_CODE (type) == FUNCTION_TYPE)
7855 if (quals)
7857 error (ctype
7858 ? G_("static member function %qD cannot have cv-qualifier")
7859 : G_("non-member function %qD cannot have cv-qualifier"),
7860 decl);
7861 quals = TYPE_UNQUALIFIED;
7864 if (rqual)
7866 error (ctype
7867 ? G_("static member function %qD cannot have ref-qualifier")
7868 : G_("non-member function %qD cannot have ref-qualifier"),
7869 decl);
7870 rqual = REF_QUAL_NONE;
7874 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7875 && !grok_op_properties (decl, /*complain=*/true))
7876 return NULL_TREE;
7877 else if (UDLIT_OPER_P (DECL_NAME (decl)))
7879 bool long_long_unsigned_p;
7880 bool long_double_p;
7881 const char *suffix = NULL;
7882 /* [over.literal]/6: Literal operators shall not have C linkage. */
7883 if (DECL_LANGUAGE (decl) == lang_c)
7885 error ("literal operator with C linkage");
7886 return NULL_TREE;
7889 if (DECL_NAMESPACE_SCOPE_P (decl))
7891 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7892 &long_double_p))
7894 error ("%qD has invalid argument list", decl);
7895 return NULL_TREE;
7898 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7899 if (long_long_unsigned_p)
7901 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
7902 warning (0, "integer suffix %<%s%>"
7903 " shadowed by implementation", suffix);
7905 else if (long_double_p)
7907 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
7908 warning (0, "floating point suffix %<%s%>"
7909 " shadowed by implementation", suffix);
7912 else
7914 error ("%qD must be a non-member function", decl);
7915 return NULL_TREE;
7919 if (funcdef_flag)
7920 /* Make the init_value nonzero so pushdecl knows this is not
7921 tentative. error_mark_node is replaced later with the BLOCK. */
7922 DECL_INITIAL (decl) = error_mark_node;
7924 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7925 TREE_NOTHROW (decl) = 1;
7927 if (flag_openmp || flag_openmp_simd || flag_cilkplus)
7929 /* Adjust "omp declare simd" attributes. */
7930 tree ods = lookup_attribute ("omp declare simd", *attrlist);
7931 if (ods)
7933 tree attr;
7934 for (attr = ods; attr;
7935 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
7937 if (TREE_CODE (type) == METHOD_TYPE)
7938 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
7939 DECL_ARGUMENTS (decl), NULL);
7940 if (TREE_VALUE (attr) != NULL_TREE)
7942 tree cl = TREE_VALUE (TREE_VALUE (attr));
7943 cl = c_omp_declare_simd_clauses_to_numbers
7944 (DECL_ARGUMENTS (decl), cl);
7945 if (cl)
7946 TREE_VALUE (TREE_VALUE (attr)) = cl;
7947 else
7948 TREE_VALUE (attr) = NULL_TREE;
7954 /* Caller will do the rest of this. */
7955 if (check < 0)
7956 return decl;
7958 if (ctype != NULL_TREE)
7959 grokclassfn (ctype, decl, flags);
7961 /* 12.4/3 */
7962 if (cxx_dialect >= cxx11
7963 && DECL_DESTRUCTOR_P (decl)
7964 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
7965 && !processing_template_decl)
7966 deduce_noexcept_on_destructor (decl);
7968 decl = check_explicit_specialization (orig_declarator, decl,
7969 template_count,
7970 2 * funcdef_flag +
7971 4 * (friendp != 0));
7972 if (decl == error_mark_node)
7973 return NULL_TREE;
7975 if (DECL_STATIC_FUNCTION_P (decl))
7976 check_static_quals (decl, quals);
7978 if (attrlist)
7980 cplus_decl_attributes (&decl, *attrlist, 0);
7981 *attrlist = NULL_TREE;
7984 /* Check main's type after attributes have been applied. */
7985 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7987 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7988 integer_type_node))
7990 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7991 tree newtype;
7992 error ("%<::main%> must return %<int%>");
7993 newtype = build_function_type (integer_type_node, oldtypeargs);
7994 TREE_TYPE (decl) = newtype;
7996 if (warn_main)
7997 check_main_parameter_types (decl);
8000 if (ctype != NULL_TREE
8001 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8002 && check)
8004 tree old_decl = check_classfn (ctype, decl,
8005 (processing_template_decl
8006 > template_class_depth (ctype))
8007 ? current_template_parms
8008 : NULL_TREE);
8010 if (old_decl == error_mark_node)
8011 return NULL_TREE;
8013 if (old_decl)
8015 tree ok;
8016 tree pushed_scope;
8018 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8019 /* Because grokfndecl is always supposed to return a
8020 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8021 here. We depend on our callers to figure out that its
8022 really a template that's being returned. */
8023 old_decl = DECL_TEMPLATE_RESULT (old_decl);
8025 if (DECL_STATIC_FUNCTION_P (old_decl)
8026 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8028 /* Remove the `this' parm added by grokclassfn. */
8029 revert_static_member_fn (decl);
8030 check_static_quals (decl, quals);
8032 if (DECL_ARTIFICIAL (old_decl))
8034 error ("definition of implicitly-declared %qD", old_decl);
8035 return NULL_TREE;
8037 else if (DECL_DEFAULTED_FN (old_decl))
8039 error ("definition of explicitly-defaulted %q+D", decl);
8040 error ("%q+#D explicitly defaulted here", old_decl);
8041 return NULL_TREE;
8044 /* Since we've smashed OLD_DECL to its
8045 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8046 if (TREE_CODE (decl) == TEMPLATE_DECL)
8047 decl = DECL_TEMPLATE_RESULT (decl);
8049 /* Attempt to merge the declarations. This can fail, in
8050 the case of some invalid specialization declarations. */
8051 pushed_scope = push_scope (ctype);
8052 ok = duplicate_decls (decl, old_decl, friendp);
8053 if (pushed_scope)
8054 pop_scope (pushed_scope);
8055 if (!ok)
8057 error ("no %q#D member function declared in class %qT",
8058 decl, ctype);
8059 return NULL_TREE;
8061 if (ok == error_mark_node)
8062 return NULL_TREE;
8063 return old_decl;
8067 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8068 return NULL_TREE;
8070 if (ctype == NULL_TREE || check)
8071 return decl;
8073 if (virtualp)
8074 DECL_VIRTUAL_P (decl) = 1;
8076 return decl;
8079 /* decl is a FUNCTION_DECL.
8080 specifiers are the parsed virt-specifiers.
8082 Set flags to reflect the virt-specifiers.
8084 Returns decl. */
8086 static tree
8087 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
8089 if (decl == NULL_TREE)
8090 return decl;
8091 if (specifiers & VIRT_SPEC_OVERRIDE)
8092 DECL_OVERRIDE_P (decl) = 1;
8093 if (specifiers & VIRT_SPEC_FINAL)
8094 DECL_FINAL_P (decl) = 1;
8095 return decl;
8098 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
8099 the linkage that DECL will receive in the object file. */
8101 static void
8102 set_linkage_for_static_data_member (tree decl)
8104 /* A static data member always has static storage duration and
8105 external linkage. Note that static data members are forbidden in
8106 local classes -- the only situation in which a class has
8107 non-external linkage. */
8108 TREE_PUBLIC (decl) = 1;
8109 TREE_STATIC (decl) = 1;
8110 /* For non-template classes, static data members are always put
8111 out in exactly those files where they are defined, just as
8112 with ordinary namespace-scope variables. */
8113 if (!processing_template_decl)
8114 DECL_INTERFACE_KNOWN (decl) = 1;
8117 /* Create a VAR_DECL named NAME with the indicated TYPE.
8119 If SCOPE is non-NULL, it is the class type or namespace containing
8120 the variable. If SCOPE is NULL, the variable should is created in
8121 the innermost enclosing scope. */
8123 static tree
8124 grokvardecl (tree type,
8125 tree name,
8126 tree orig_declarator,
8127 const cp_decl_specifier_seq *declspecs,
8128 int initialized,
8129 int constp,
8130 int template_count,
8131 tree scope)
8133 tree decl;
8134 tree explicit_scope;
8136 gcc_assert (!name || identifier_p (name));
8138 /* Compute the scope in which to place the variable, but remember
8139 whether or not that scope was explicitly specified by the user. */
8140 explicit_scope = scope;
8141 if (!scope)
8143 /* An explicit "extern" specifier indicates a namespace-scope
8144 variable. */
8145 if (declspecs->storage_class == sc_extern)
8146 scope = current_decl_namespace ();
8147 else if (!at_function_scope_p ())
8148 scope = current_scope ();
8151 if (scope
8152 && (/* If the variable is a namespace-scope variable declared in a
8153 template, we need DECL_LANG_SPECIFIC. */
8154 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
8155 /* Similarly for namespace-scope variables with language linkage
8156 other than C++. */
8157 || (TREE_CODE (scope) == NAMESPACE_DECL
8158 && current_lang_name != lang_name_cplusplus)
8159 /* Similarly for static data members. */
8160 || TYPE_P (scope)
8161 /* Similarly for explicit specializations. */
8162 || (orig_declarator
8163 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
8164 decl = build_lang_decl (VAR_DECL, name, type);
8165 else
8166 decl = build_decl (input_location, VAR_DECL, name, type);
8168 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
8169 set_decl_namespace (decl, explicit_scope, 0);
8170 else
8171 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
8173 if (declspecs->storage_class == sc_extern)
8175 DECL_THIS_EXTERN (decl) = 1;
8176 DECL_EXTERNAL (decl) = !initialized;
8179 if (DECL_CLASS_SCOPE_P (decl))
8181 set_linkage_for_static_data_member (decl);
8182 /* This function is only called with out-of-class definitions. */
8183 DECL_EXTERNAL (decl) = 0;
8184 check_class_member_definition_namespace (decl);
8186 /* At top level, either `static' or no s.c. makes a definition
8187 (perhaps tentative), and absence of `static' makes it public. */
8188 else if (toplevel_bindings_p ())
8190 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
8191 && (DECL_THIS_EXTERN (decl) || ! constp));
8192 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8194 /* Not at top level, only `static' makes a static definition. */
8195 else
8197 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8198 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8201 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
8203 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8205 CP_DECL_THREAD_LOCAL_P (decl) = true;
8206 if (!processing_template_decl)
8207 set_decl_tls_model (decl, decl_default_tls_model (decl));
8209 if (declspecs->gnu_thread_keyword_p)
8210 SET_DECL_GNU_TLS_P (decl);
8213 /* If the type of the decl has no linkage, make sure that we'll
8214 notice that in mark_used. */
8215 if (cxx_dialect > cxx98
8216 && decl_linkage (decl) != lk_none
8217 && DECL_LANG_SPECIFIC (decl) == NULL
8218 && !DECL_EXTERN_C_P (decl)
8219 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
8220 retrofit_lang_decl (decl);
8222 if (TREE_PUBLIC (decl))
8224 /* [basic.link]: A name with no linkage (notably, the name of a class
8225 or enumeration declared in a local scope) shall not be used to
8226 declare an entity with linkage.
8228 DR 757 relaxes this restriction for C++0x. */
8229 if (cxx_dialect < cxx11)
8230 no_linkage_error (decl);
8232 else
8233 DECL_INTERFACE_KNOWN (decl) = 1;
8235 // Handle explicit specializations and instantiations of variable templates.
8236 if (orig_declarator)
8237 decl = check_explicit_specialization (orig_declarator, decl,
8238 template_count, 0);
8240 return decl != error_mark_node ? decl : NULL_TREE;
8243 /* Create and return a canonical pointer to member function type, for
8244 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8246 tree
8247 build_ptrmemfunc_type (tree type)
8249 tree field, fields;
8250 tree t;
8252 if (type == error_mark_node)
8253 return type;
8255 /* Make sure that we always have the unqualified pointer-to-member
8256 type first. */
8257 if (cp_cv_quals quals = cp_type_quals (type))
8259 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8260 return cp_build_qualified_type (unqual, quals);
8263 /* If a canonical type already exists for this type, use it. We use
8264 this method instead of type_hash_canon, because it only does a
8265 simple equality check on the list of field members. */
8267 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8268 return t;
8270 t = make_node (RECORD_TYPE);
8272 /* Let the front end know this is a pointer to member function. */
8273 TYPE_PTRMEMFUNC_FLAG (t) = 1;
8275 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
8276 fields = field;
8278 field = build_decl (input_location, FIELD_DECL, delta_identifier,
8279 delta_type_node);
8280 DECL_CHAIN (field) = fields;
8281 fields = field;
8283 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8285 /* Zap out the name so that the back end will give us the debugging
8286 information for this anonymous RECORD_TYPE. */
8287 TYPE_NAME (t) = NULL_TREE;
8289 /* Cache this pointer-to-member type so that we can find it again
8290 later. */
8291 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8293 if (TYPE_STRUCTURAL_EQUALITY_P (type))
8294 SET_TYPE_STRUCTURAL_EQUALITY (t);
8295 else if (TYPE_CANONICAL (type) != type)
8296 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
8298 return t;
8301 /* Create and return a pointer to data member type. */
8303 tree
8304 build_ptrmem_type (tree class_type, tree member_type)
8306 if (TREE_CODE (member_type) == METHOD_TYPE)
8308 cp_cv_quals quals = type_memfn_quals (member_type);
8309 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
8310 member_type = build_memfn_type (member_type, class_type, quals, rqual);
8311 return build_ptrmemfunc_type (build_pointer_type (member_type));
8313 else
8315 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
8316 return build_offset_type (class_type, member_type);
8320 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8321 Check to see that the definition is valid. Issue appropriate error
8322 messages. Return 1 if the definition is particularly bad, or 0
8323 otherwise. */
8325 static int
8326 check_static_variable_definition (tree decl, tree type)
8328 /* Can't check yet if we don't know the type. */
8329 if (dependent_type_p (type))
8330 return 0;
8331 /* If DECL is declared constexpr, we'll do the appropriate checks
8332 in check_initializer. */
8333 if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8334 return 0;
8335 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8337 if (!COMPLETE_TYPE_P (type))
8338 error ("in-class initialization of static data member %q#D of "
8339 "incomplete type", decl);
8340 else if (literal_type_p (type))
8341 permerror (input_location,
8342 "%<constexpr%> needed for in-class initialization of "
8343 "static data member %q#D of non-integral type", decl);
8344 else
8345 error ("in-class initialization of static data member %q#D of "
8346 "non-literal type", decl);
8347 return 1;
8350 /* Motion 10 at San Diego: If a static const integral data member is
8351 initialized with an integral constant expression, the initializer
8352 may appear either in the declaration (within the class), or in
8353 the definition, but not both. If it appears in the class, the
8354 member is a member constant. The file-scope definition is always
8355 required. */
8356 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8358 error ("invalid in-class initialization of static data member "
8359 "of non-integral type %qT",
8360 type);
8361 return 1;
8363 else if (!CP_TYPE_CONST_P (type))
8364 error ("ISO C++ forbids in-class initialization of non-const "
8365 "static member %qD",
8366 decl);
8367 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8368 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8369 "%qD of non-integral type %qT", decl, type);
8371 return 0;
8374 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
8375 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8376 expressions out into temporary variables so that walk_tree doesn't
8377 step into them (c++/15764). */
8379 static tree
8380 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8382 hash_set<tree> *pset = (hash_set<tree> *)data;
8383 tree expr = *expr_p;
8384 if (TREE_CODE (expr) == SAVE_EXPR)
8386 tree op = TREE_OPERAND (expr, 0);
8387 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8388 if (TREE_SIDE_EFFECTS (op))
8389 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8390 *walk_subtrees = 0;
8392 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8393 *walk_subtrees = 0;
8394 return NULL;
8397 /* Entry point for the above. */
8399 static void
8400 stabilize_vla_size (tree size)
8402 hash_set<tree> pset;
8403 /* Break out any function calls into temporary variables. */
8404 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
8407 /* Helper function for compute_array_index_type. Look for SIZEOF_EXPR
8408 not inside of SAVE_EXPR and fold them. */
8410 static tree
8411 fold_sizeof_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8413 tree expr = *expr_p;
8414 if (TREE_CODE (expr) == SAVE_EXPR || TYPE_P (expr))
8415 *walk_subtrees = 0;
8416 else if (TREE_CODE (expr) == SIZEOF_EXPR)
8418 *(bool *)data = true;
8419 if (SIZEOF_EXPR_TYPE_P (expr))
8420 expr = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (expr, 0)),
8421 SIZEOF_EXPR, false);
8422 else if (TYPE_P (TREE_OPERAND (expr, 0)))
8423 expr = cxx_sizeof_or_alignof_type (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8424 false);
8425 else
8426 expr = cxx_sizeof_or_alignof_expr (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8427 false);
8428 if (expr == error_mark_node)
8429 expr = size_one_node;
8430 *expr_p = expr;
8431 *walk_subtrees = 0;
8433 return NULL;
8436 /* Given the SIZE (i.e., number of elements) in an array, compute an
8437 appropriate index type for the array. If non-NULL, NAME is the
8438 name of the thing being declared. */
8440 tree
8441 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8443 tree itype;
8444 tree osize = size;
8446 if (error_operand_p (size))
8447 return error_mark_node;
8449 if (!type_dependent_expression_p (size))
8451 tree type = TREE_TYPE (size);
8453 mark_rvalue_use (size);
8455 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
8456 && TREE_SIDE_EFFECTS (size))
8457 /* In C++98, we mark a non-constant array bound with a magic
8458 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
8459 else
8461 size = instantiate_non_dependent_expr_sfinae (size, complain);
8463 if (CLASS_TYPE_P (type)
8464 && CLASSTYPE_LITERAL_P (type))
8466 size = build_expr_type_conversion (WANT_INT, size, true);
8467 if (!size)
8469 if (!(complain & tf_error))
8470 return error_mark_node;
8471 if (name)
8472 error ("size of array %qD has non-integral type %qT",
8473 name, type);
8474 else
8475 error ("size of array has non-integral type %qT", type);
8476 size = integer_one_node;
8478 if (size == error_mark_node)
8479 return error_mark_node;
8480 type = TREE_TYPE (size);
8483 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8484 size = maybe_constant_value (size);
8486 if (!TREE_CONSTANT (size))
8487 size = osize;
8490 if (error_operand_p (size))
8491 return error_mark_node;
8493 /* The array bound must be an integer type. */
8494 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8496 if (!(complain & tf_error))
8497 return error_mark_node;
8498 if (name)
8499 error ("size of array %qD has non-integral type %qT", name, type);
8500 else
8501 error ("size of array has non-integral type %qT", type);
8502 size = integer_one_node;
8503 type = TREE_TYPE (size);
8507 /* A type is dependent if it is...an array type constructed from any
8508 dependent type or whose size is specified by a constant expression
8509 that is value-dependent. */
8510 /* We can only call value_dependent_expression_p on integral constant
8511 expressions; treat non-constant expressions as dependent, too. */
8512 if (processing_template_decl
8513 && (type_dependent_expression_p (size)
8514 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8516 /* We cannot do any checking for a SIZE that isn't known to be
8517 constant. Just build the index type and mark that it requires
8518 structural equality checks. */
8519 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8520 size, size_one_node));
8521 TYPE_DEPENDENT_P (itype) = 1;
8522 TYPE_DEPENDENT_P_VALID (itype) = 1;
8523 SET_TYPE_STRUCTURAL_EQUALITY (itype);
8524 return itype;
8527 /* Normally, the array-bound will be a constant. */
8528 if (TREE_CODE (size) == INTEGER_CST)
8530 /* Check to see if the array bound overflowed. Make that an
8531 error, no matter how generous we're being. */
8532 constant_expression_error (size);
8534 /* An array must have a positive number of elements. */
8535 if (tree_int_cst_lt (size, integer_zero_node))
8537 if (!(complain & tf_error))
8538 return error_mark_node;
8539 if (name)
8540 error ("size of array %qD is negative", name);
8541 else
8542 error ("size of array is negative");
8543 size = integer_one_node;
8545 /* As an extension we allow zero-sized arrays. */
8546 else if (integer_zerop (size))
8548 if (!(complain & tf_error))
8549 /* We must fail if performing argument deduction (as
8550 indicated by the state of complain), so that
8551 another substitution can be found. */
8552 return error_mark_node;
8553 else if (in_system_header_at (input_location))
8554 /* Allow them in system headers because glibc uses them. */;
8555 else if (name)
8556 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8557 else
8558 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8561 else if (TREE_CONSTANT (size)
8562 /* We don't allow VLAs at non-function scopes, or during
8563 tentative template substitution. */
8564 || !at_function_scope_p ()
8565 || !(complain & tf_error))
8567 if (!(complain & tf_error))
8568 return error_mark_node;
8569 /* `(int) &fn' is not a valid array bound. */
8570 if (name)
8571 error ("size of array %qD is not an integral constant-expression",
8572 name);
8573 else
8574 error ("size of array is not an integral constant-expression");
8575 size = integer_one_node;
8577 else if (pedantic && warn_vla != 0)
8579 if (name)
8580 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8581 else
8582 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8584 else if (warn_vla > 0)
8586 if (name)
8587 warning (OPT_Wvla,
8588 "variable length array %qD is used", name);
8589 else
8590 warning (OPT_Wvla,
8591 "variable length array is used");
8594 if (processing_template_decl && !TREE_CONSTANT (size))
8595 /* A variable sized array. */
8596 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8597 else
8599 HOST_WIDE_INT saved_processing_template_decl;
8601 /* Compute the index of the largest element in the array. It is
8602 one less than the number of elements in the array. We save
8603 and restore PROCESSING_TEMPLATE_DECL so that computations in
8604 cp_build_binary_op will be appropriately folded. */
8605 saved_processing_template_decl = processing_template_decl;
8606 processing_template_decl = 0;
8607 itype = cp_build_binary_op (input_location,
8608 MINUS_EXPR,
8609 cp_convert (ssizetype, size, complain),
8610 cp_convert (ssizetype, integer_one_node,
8611 complain),
8612 complain);
8613 itype = fold (itype);
8614 processing_template_decl = saved_processing_template_decl;
8616 if (!TREE_CONSTANT (itype))
8618 /* A variable sized array. */
8619 itype = variable_size (itype);
8621 if (TREE_CODE (itype) != SAVE_EXPR)
8623 /* Look for SIZEOF_EXPRs in itype and fold them, otherwise
8624 they might survive till gimplification. */
8625 tree newitype = itype;
8626 bool found = false;
8627 cp_walk_tree_without_duplicates (&newitype,
8628 fold_sizeof_expr_r, &found);
8629 if (found)
8630 itype = variable_size (fold (newitype));
8633 stabilize_vla_size (itype);
8635 if (flag_sanitize & SANITIZE_VLA
8636 && do_ubsan_in_current_function ())
8638 /* We have to add 1 -- in the ubsan routine we generate
8639 LE_EXPR rather than LT_EXPR. */
8640 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
8641 build_one_cst (TREE_TYPE (itype)));
8642 t = ubsan_instrument_vla (input_location, t);
8643 finish_expr_stmt (t);
8646 /* Make sure that there was no overflow when creating to a signed
8647 index type. (For example, on a 32-bit machine, an array with
8648 size 2^32 - 1 is too big.) */
8649 else if (TREE_CODE (itype) == INTEGER_CST
8650 && TREE_OVERFLOW (itype))
8652 if (!(complain & tf_error))
8653 return error_mark_node;
8654 error ("overflow in array dimension");
8655 TREE_OVERFLOW (itype) = 0;
8659 /* Create and return the appropriate index type. */
8660 itype = build_index_type (itype);
8662 /* If the index type were dependent, we would have returned early, so
8663 remember that it isn't. */
8664 TYPE_DEPENDENT_P (itype) = 0;
8665 TYPE_DEPENDENT_P_VALID (itype) = 1;
8666 return itype;
8669 /* Returns the scope (if any) in which the entity declared by
8670 DECLARATOR will be located. If the entity was declared with an
8671 unqualified name, NULL_TREE is returned. */
8673 tree
8674 get_scope_of_declarator (const cp_declarator *declarator)
8676 while (declarator && declarator->kind != cdk_id)
8677 declarator = declarator->declarator;
8679 /* If the declarator-id is a SCOPE_REF, the scope in which the
8680 declaration occurs is the first operand. */
8681 if (declarator
8682 && declarator->u.id.qualifying_scope)
8683 return declarator->u.id.qualifying_scope;
8685 /* Otherwise, the declarator is not a qualified name; the entity will
8686 be declared in the current scope. */
8687 return NULL_TREE;
8690 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8691 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
8692 with this type. */
8694 static tree
8695 create_array_type_for_decl (tree name, tree type, tree size)
8697 tree itype = NULL_TREE;
8699 /* If things have already gone awry, bail now. */
8700 if (type == error_mark_node || size == error_mark_node)
8701 return error_mark_node;
8703 /* 8.3.4/1: If the type of the identifier of D contains the auto
8704 type-specifier, the program is ill-formed. */
8705 if (type_uses_auto (type))
8707 error ("%qD declared as array of %qT", name, type);
8708 return error_mark_node;
8711 /* If there are some types which cannot be array elements,
8712 issue an error-message and return. */
8713 switch (TREE_CODE (type))
8715 case VOID_TYPE:
8716 if (name)
8717 error ("declaration of %qD as array of void", name);
8718 else
8719 error ("creating array of void");
8720 return error_mark_node;
8722 case FUNCTION_TYPE:
8723 if (name)
8724 error ("declaration of %qD as array of functions", name);
8725 else
8726 error ("creating array of functions");
8727 return error_mark_node;
8729 case REFERENCE_TYPE:
8730 if (name)
8731 error ("declaration of %qD as array of references", name);
8732 else
8733 error ("creating array of references");
8734 return error_mark_node;
8736 case METHOD_TYPE:
8737 if (name)
8738 error ("declaration of %qD as array of function members", name);
8739 else
8740 error ("creating array of function members");
8741 return error_mark_node;
8743 default:
8744 break;
8747 /* [dcl.array]
8749 The constant expressions that specify the bounds of the arrays
8750 can be omitted only for the first member of the sequence. */
8751 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8753 if (name)
8754 error ("declaration of %qD as multidimensional array must "
8755 "have bounds for all dimensions except the first",
8756 name);
8757 else
8758 error ("multidimensional array must have bounds for all "
8759 "dimensions except the first");
8761 return error_mark_node;
8764 /* Figure out the index type for the array. */
8765 if (size)
8766 itype = compute_array_index_type (name, size, tf_warning_or_error);
8768 /* [dcl.array]
8769 T is called the array element type; this type shall not be [...] an
8770 abstract class type. */
8771 abstract_virtuals_error (name, type);
8773 return build_cplus_array_type (type, itype);
8776 /* Check that it's OK to declare a function with the indicated TYPE.
8777 SFK indicates the kind of special function (if any) that this
8778 function is. OPTYPE is the type given in a conversion operator
8779 declaration, or the class type for a constructor/destructor.
8780 Returns the actual return type of the function; that
8781 may be different than TYPE if an error occurs, or for certain
8782 special functions. */
8784 static tree
8785 check_special_function_return_type (special_function_kind sfk,
8786 tree type,
8787 tree optype)
8789 switch (sfk)
8791 case sfk_constructor:
8792 if (type)
8793 error ("return type specification for constructor invalid");
8795 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8796 type = build_pointer_type (optype);
8797 else
8798 type = void_type_node;
8799 break;
8801 case sfk_destructor:
8802 if (type)
8803 error ("return type specification for destructor invalid");
8804 /* We can't use the proper return type here because we run into
8805 problems with ambiguous bases and covariant returns.
8806 Java classes are left unchanged because (void *) isn't a valid
8807 Java type, and we don't want to change the Java ABI. */
8808 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8809 type = build_pointer_type (void_type_node);
8810 else
8811 type = void_type_node;
8812 break;
8814 case sfk_conversion:
8815 if (type)
8816 error ("return type specified for %<operator %T%>", optype);
8817 type = optype;
8818 break;
8820 default:
8821 gcc_unreachable ();
8824 return type;
8827 /* A variable or data member (whose unqualified name is IDENTIFIER)
8828 has been declared with the indicated TYPE. If the TYPE is not
8829 acceptable, issue an error message and return a type to use for
8830 error-recovery purposes. */
8832 tree
8833 check_var_type (tree identifier, tree type)
8835 if (VOID_TYPE_P (type))
8837 if (!identifier)
8838 error ("unnamed variable or field declared void");
8839 else if (identifier_p (identifier))
8841 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8842 error ("variable or field %qE declared void", identifier);
8844 else
8845 error ("variable or field declared void");
8846 type = error_mark_node;
8849 return type;
8852 /* Given declspecs and a declarator (abstract or otherwise), determine
8853 the name and type of the object declared and construct a DECL node
8854 for it.
8856 DECLSPECS points to the representation of declaration-specifier
8857 sequence that precedes declarator.
8859 DECL_CONTEXT says which syntactic context this declaration is in:
8860 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8861 FUNCDEF for a function definition. Like NORMAL but a few different
8862 error messages in each case. Return value may be zero meaning
8863 this definition is too screwy to try to parse.
8864 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8865 handle member functions (which have FIELD context).
8866 Return value may be zero meaning this definition is too screwy to
8867 try to parse.
8868 PARM for a parameter declaration (either within a function prototype
8869 or before a function body). Make a PARM_DECL, or return void_type_node.
8870 TPARM for a template parameter declaration.
8871 CATCHPARM for a parameter declaration before a catch clause.
8872 TYPENAME if for a typename (in a cast or sizeof).
8873 Don't make a DECL node; just return the ..._TYPE node.
8874 FIELD for a struct or union field; make a FIELD_DECL.
8875 BITFIELD for a field with specified width.
8877 INITIALIZED is as for start_decl.
8879 ATTRLIST is a pointer to the list of attributes, which may be NULL
8880 if there are none; *ATTRLIST may be modified if attributes from inside
8881 the declarator should be applied to the declaration.
8883 When this function is called, scoping variables (such as
8884 CURRENT_CLASS_TYPE) should reflect the scope in which the
8885 declaration occurs, not the scope in which the new declaration will
8886 be placed. For example, on:
8888 void S::f() { ... }
8890 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8891 should not be `S'.
8893 Returns a DECL (if a declarator is present), a TYPE (if there is no
8894 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8895 error occurs. */
8897 tree
8898 grokdeclarator (const cp_declarator *declarator,
8899 cp_decl_specifier_seq *declspecs,
8900 enum decl_context decl_context,
8901 int initialized,
8902 tree* attrlist)
8904 tree type = NULL_TREE;
8905 int longlong = 0;
8906 int explicit_intN = 0;
8907 int virtualp, explicitp, friendp, inlinep, staticp;
8908 int explicit_int = 0;
8909 int explicit_char = 0;
8910 int defaulted_int = 0;
8912 tree typedef_decl = NULL_TREE;
8913 const char *name = NULL;
8914 tree typedef_type = NULL_TREE;
8915 /* True if this declarator is a function definition. */
8916 bool funcdef_flag = false;
8917 cp_declarator_kind innermost_code = cdk_error;
8918 int bitfield = 0;
8919 #if 0
8920 /* See the code below that used this. */
8921 tree decl_attr = NULL_TREE;
8922 #endif
8924 /* Keep track of what sort of function is being processed
8925 so that we can warn about default return values, or explicit
8926 return values which do not match prescribed defaults. */
8927 special_function_kind sfk = sfk_none;
8929 tree dname = NULL_TREE;
8930 tree ctor_return_type = NULL_TREE;
8931 enum overload_flags flags = NO_SPECIAL;
8932 /* cv-qualifiers that apply to the declarator, for a declaration of
8933 a member function. */
8934 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8935 /* virt-specifiers that apply to the declarator, for a declaration of
8936 a member function. */
8937 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8938 /* ref-qualifier that applies to the declarator, for a declaration of
8939 a member function. */
8940 cp_ref_qualifier rqual = REF_QUAL_NONE;
8941 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
8942 int type_quals;
8943 tree raises = NULL_TREE;
8944 int template_count = 0;
8945 tree returned_attrs = NULL_TREE;
8946 tree parms = NULL_TREE;
8947 const cp_declarator *id_declarator;
8948 /* The unqualified name of the declarator; either an
8949 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
8950 tree unqualified_id;
8951 /* The class type, if any, in which this entity is located,
8952 or NULL_TREE if none. Note that this value may be different from
8953 the current class type; for example if an attempt is made to declare
8954 "A::f" inside "B", this value will be "A". */
8955 tree ctype = current_class_type;
8956 /* The NAMESPACE_DECL for the namespace in which this entity is
8957 located. If an unqualified name is used to declare the entity,
8958 this value will be NULL_TREE, even if the entity is located at
8959 namespace scope. */
8960 tree in_namespace = NULL_TREE;
8961 cp_storage_class storage_class;
8962 bool unsigned_p, signed_p, short_p, long_p, thread_p;
8963 bool type_was_error_mark_node = false;
8964 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8965 bool template_type_arg = false;
8966 bool template_parm_flag = false;
8967 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
8968 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
8969 bool late_return_type_p = false;
8970 bool array_parameter_p = false;
8971 source_location saved_loc = input_location;
8972 const char *errmsg;
8974 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
8975 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
8976 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
8977 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
8978 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
8979 explicit_intN = declspecs->explicit_intN_p;
8980 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
8982 if (decl_context == FUNCDEF)
8983 funcdef_flag = true, decl_context = NORMAL;
8984 else if (decl_context == MEMFUNCDEF)
8985 funcdef_flag = true, decl_context = FIELD;
8986 else if (decl_context == BITFIELD)
8987 bitfield = 1, decl_context = FIELD;
8988 else if (decl_context == TEMPLATE_TYPE_ARG)
8989 template_type_arg = true, decl_context = TYPENAME;
8990 else if (decl_context == TPARM)
8991 template_parm_flag = true, decl_context = PARM;
8993 if (initialized > 1)
8994 funcdef_flag = true;
8996 /* Look inside a declarator for the name being declared
8997 and get it as a string, for an error message. */
8998 for (id_declarator = declarator;
8999 id_declarator;
9000 id_declarator = id_declarator->declarator)
9002 if (id_declarator->kind != cdk_id)
9003 innermost_code = id_declarator->kind;
9005 switch (id_declarator->kind)
9007 case cdk_function:
9008 if (id_declarator->declarator
9009 && id_declarator->declarator->kind == cdk_id)
9011 sfk = id_declarator->declarator->u.id.sfk;
9012 if (sfk == sfk_destructor)
9013 flags = DTOR_FLAG;
9015 break;
9017 case cdk_id:
9019 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
9020 tree decl = id_declarator->u.id.unqualified_name;
9021 if (!decl)
9022 break;
9023 if (qualifying_scope)
9025 if (at_function_scope_p ())
9027 /* [dcl.meaning]
9029 A declarator-id shall not be qualified except
9030 for ...
9032 None of the cases are permitted in block
9033 scope. */
9034 if (qualifying_scope == global_namespace)
9035 error ("invalid use of qualified-name %<::%D%>",
9036 decl);
9037 else if (TYPE_P (qualifying_scope))
9038 error ("invalid use of qualified-name %<%T::%D%>",
9039 qualifying_scope, decl);
9040 else
9041 error ("invalid use of qualified-name %<%D::%D%>",
9042 qualifying_scope, decl);
9043 return error_mark_node;
9045 else if (TYPE_P (qualifying_scope))
9047 ctype = qualifying_scope;
9048 if (!MAYBE_CLASS_TYPE_P (ctype))
9050 error ("%q#T is not a class or a namespace", ctype);
9051 ctype = NULL_TREE;
9053 else if (innermost_code != cdk_function
9054 && current_class_type
9055 && !uniquely_derived_from_p (ctype,
9056 current_class_type))
9058 error ("invalid use of qualified-name %<%T::%D%>",
9059 qualifying_scope, decl);
9060 return error_mark_node;
9063 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
9064 in_namespace = qualifying_scope;
9066 switch (TREE_CODE (decl))
9068 case BIT_NOT_EXPR:
9070 tree type;
9072 if (innermost_code != cdk_function)
9074 error ("declaration of %qD as non-function", decl);
9075 return error_mark_node;
9077 else if (!qualifying_scope
9078 && !(current_class_type && at_class_scope_p ()))
9080 error ("declaration of %qD as non-member", decl);
9081 return error_mark_node;
9084 type = TREE_OPERAND (decl, 0);
9085 if (TYPE_P (type))
9086 type = constructor_name (type);
9087 name = identifier_to_locale (IDENTIFIER_POINTER (type));
9088 dname = decl;
9090 break;
9092 case TEMPLATE_ID_EXPR:
9094 tree fns = TREE_OPERAND (decl, 0);
9096 dname = fns;
9097 if (!identifier_p (dname))
9099 if (variable_template_p (dname))
9100 dname = DECL_NAME (dname);
9101 else
9103 gcc_assert (is_overloaded_fn (dname));
9104 dname = DECL_NAME (get_first_fn (dname));
9108 /* Fall through. */
9110 case IDENTIFIER_NODE:
9111 if (identifier_p (decl))
9112 dname = decl;
9114 if (C_IS_RESERVED_WORD (dname))
9116 error ("declarator-id missing; using reserved word %qD",
9117 dname);
9118 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9120 else if (!IDENTIFIER_TYPENAME_P (dname))
9121 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9122 else
9124 gcc_assert (flags == NO_SPECIAL);
9125 flags = TYPENAME_FLAG;
9126 ctor_return_type = TREE_TYPE (dname);
9127 sfk = sfk_conversion;
9128 if (is_typename_at_global_scope (dname))
9129 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9130 else
9131 name = "<invalid operator>";
9133 break;
9135 default:
9136 gcc_unreachable ();
9138 break;
9141 case cdk_array:
9142 case cdk_pointer:
9143 case cdk_reference:
9144 case cdk_ptrmem:
9145 break;
9147 case cdk_error:
9148 return error_mark_node;
9150 default:
9151 gcc_unreachable ();
9153 if (id_declarator->kind == cdk_id)
9154 break;
9157 /* [dcl.fct.edf]
9159 The declarator in a function-definition shall have the form
9160 D1 ( parameter-declaration-clause) ... */
9161 if (funcdef_flag && innermost_code != cdk_function)
9163 error ("function definition does not declare parameters");
9164 return error_mark_node;
9167 if (flags == TYPENAME_FLAG
9168 && innermost_code != cdk_function
9169 && ! (ctype && !declspecs->any_specifiers_p))
9171 error ("declaration of %qD as non-function", dname);
9172 return error_mark_node;
9175 if (dname
9176 && identifier_p (dname)
9177 && UDLIT_OPER_P (dname)
9178 && innermost_code != cdk_function)
9180 error ("declaration of %qD as non-function", dname);
9181 return error_mark_node;
9184 if (dname && IDENTIFIER_OPNAME_P (dname))
9186 if (typedef_p)
9188 error ("declaration of %qD as %<typedef%>", dname);
9189 return error_mark_node;
9191 else if (decl_context == PARM || decl_context == CATCHPARM)
9193 error ("declaration of %qD as parameter", dname);
9194 return error_mark_node;
9198 /* Anything declared one level down from the top level
9199 must be one of the parameters of a function
9200 (because the body is at least two levels down). */
9202 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9203 by not allowing C++ class definitions to specify their parameters
9204 with xdecls (must be spec.d in the parmlist).
9206 Since we now wait to push a class scope until we are sure that
9207 we are in a legitimate method context, we must set oldcname
9208 explicitly (since current_class_name is not yet alive).
9210 We also want to avoid calling this a PARM if it is in a namespace. */
9212 if (decl_context == NORMAL && !toplevel_bindings_p ())
9214 cp_binding_level *b = current_binding_level;
9215 current_binding_level = b->level_chain;
9216 if (current_binding_level != 0 && toplevel_bindings_p ())
9217 decl_context = PARM;
9218 current_binding_level = b;
9221 if (name == NULL)
9222 name = decl_context == PARM ? "parameter" : "type name";
9224 if (constexpr_p && typedef_p)
9226 error ("%<constexpr%> cannot appear in a typedef declaration");
9227 return error_mark_node;
9230 /* If there were multiple types specified in the decl-specifier-seq,
9231 issue an error message. */
9232 if (declspecs->multiple_types_p)
9234 error ("two or more data types in declaration of %qs", name);
9235 return error_mark_node;
9238 if (declspecs->conflicting_specifiers_p)
9240 error ("conflicting specifiers in declaration of %qs", name);
9241 return error_mark_node;
9244 /* Extract the basic type from the decl-specifier-seq. */
9245 type = declspecs->type;
9246 if (type == error_mark_node)
9248 type = NULL_TREE;
9249 type_was_error_mark_node = true;
9251 /* If the entire declaration is itself tagged as deprecated then
9252 suppress reports of deprecated items. */
9253 if (type && TREE_DEPRECATED (type)
9254 && deprecated_state != DEPRECATED_SUPPRESS)
9255 warn_deprecated_use (type, NULL_TREE);
9256 if (type && TREE_CODE (type) == TYPE_DECL)
9258 typedef_decl = type;
9259 type = TREE_TYPE (typedef_decl);
9260 if (TREE_DEPRECATED (type)
9261 && DECL_ARTIFICIAL (typedef_decl)
9262 && deprecated_state != DEPRECATED_SUPPRESS)
9263 warn_deprecated_use (type, NULL_TREE);
9265 /* No type at all: default to `int', and set DEFAULTED_INT
9266 because it was not a user-defined typedef. */
9267 if (type == NULL_TREE)
9269 if (signed_p || unsigned_p || long_p || short_p)
9271 /* These imply 'int'. */
9272 type = integer_type_node;
9273 defaulted_int = 1;
9275 /* If we just have "complex", it is equivalent to "complex double". */
9276 else if (!longlong && !explicit_intN
9277 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
9279 type = double_type_node;
9280 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
9281 "ISO C++ does not support plain %<complex%> meaning "
9282 "%<double complex%>");
9285 /* Gather flags. */
9286 explicit_int = declspecs->explicit_int_p;
9287 explicit_char = declspecs->explicit_char_p;
9289 #if 0
9290 /* See the code below that used this. */
9291 if (typedef_decl)
9292 decl_attr = DECL_ATTRIBUTES (typedef_decl);
9293 #endif
9294 typedef_type = type;
9297 if (sfk != sfk_conversion)
9298 ctor_return_type = ctype;
9300 if (sfk != sfk_none)
9301 type = check_special_function_return_type (sfk, type,
9302 ctor_return_type);
9303 else if (type == NULL_TREE)
9305 int is_main;
9307 explicit_int = -1;
9309 /* We handle `main' specially here, because 'main () { }' is so
9310 common. With no options, it is allowed. With -Wreturn-type,
9311 it is a warning. It is only an error with -pedantic-errors. */
9312 is_main = (funcdef_flag
9313 && dname && identifier_p (dname)
9314 && MAIN_NAME_P (dname)
9315 && ctype == NULL_TREE
9316 && in_namespace == NULL_TREE
9317 && current_namespace == global_namespace);
9319 if (type_was_error_mark_node)
9320 /* We've already issued an error, don't complain more. */;
9321 else if (in_system_header_at (input_location) || flag_ms_extensions)
9322 /* Allow it, sigh. */;
9323 else if (! is_main)
9324 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
9325 else if (pedantic)
9326 pedwarn (input_location, OPT_Wpedantic,
9327 "ISO C++ forbids declaration of %qs with no type", name);
9328 else
9329 warning (OPT_Wreturn_type,
9330 "ISO C++ forbids declaration of %qs with no type", name);
9332 if (type_was_error_mark_node && template_parm_flag)
9333 /* FIXME we should be able to propagate the error_mark_node as is
9334 for other contexts too. */
9335 type = error_mark_node;
9336 else
9337 type = integer_type_node;
9340 ctype = NULL_TREE;
9342 if (explicit_intN)
9344 if (! int_n_enabled_p[declspecs->int_n_idx])
9346 error ("%<__int%d%> is not supported by this target",
9347 int_n_data[declspecs->int_n_idx].bitsize);
9348 explicit_intN = false;
9350 else if (pedantic && ! in_system_header_at (input_location))
9351 pedwarn (input_location, OPT_Wpedantic,
9352 "ISO C++ does not support %<__int%d%> for %qs",
9353 int_n_data[declspecs->int_n_idx].bitsize, name);
9356 /* Now process the modifiers that were specified
9357 and check for invalid combinations. */
9359 /* Long double is a special combination. */
9360 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9362 long_p = false;
9363 type = cp_build_qualified_type (long_double_type_node,
9364 cp_type_quals (type));
9367 /* Check all other uses of type modifiers. */
9369 if (unsigned_p || signed_p || long_p || short_p)
9371 int ok = 0;
9373 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9374 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9375 else if (signed_p && unsigned_p)
9376 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9377 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9378 error ("%<long long%> invalid for %qs", name);
9379 else if (long_p && TREE_CODE (type) == REAL_TYPE)
9380 error ("%<long%> invalid for %qs", name);
9381 else if (short_p && TREE_CODE (type) == REAL_TYPE)
9382 error ("%<short%> invalid for %qs", name);
9383 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9384 error ("%<long%> or %<short%> invalid for %qs", name);
9385 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
9386 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9387 else if ((long_p || short_p) && explicit_char)
9388 error ("%<long%> or %<short%> specified with char for %qs", name);
9389 else if (long_p && short_p)
9390 error ("%<long%> and %<short%> specified together for %qs", name);
9391 else if (type == char16_type_node || type == char32_type_node)
9393 if (signed_p || unsigned_p)
9394 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9395 else if (short_p || long_p)
9396 error ("%<short%> or %<long%> invalid for %qs", name);
9398 else
9400 ok = 1;
9401 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
9403 pedwarn (input_location, OPT_Wpedantic,
9404 "long, short, signed or unsigned used invalidly for %qs",
9405 name);
9406 if (flag_pedantic_errors)
9407 ok = 0;
9411 /* Discard the type modifiers if they are invalid. */
9412 if (! ok)
9414 unsigned_p = false;
9415 signed_p = false;
9416 long_p = false;
9417 short_p = false;
9418 longlong = 0;
9422 /* Decide whether an integer type is signed or not.
9423 Optionally treat bitfields as signed by default. */
9424 if (unsigned_p
9425 /* [class.bit]
9427 It is implementation-defined whether a plain (neither
9428 explicitly signed or unsigned) char, short, int, or long
9429 bit-field is signed or unsigned.
9431 Naturally, we extend this to long long as well. Note that
9432 this does not include wchar_t. */
9433 || (bitfield && !flag_signed_bitfields
9434 && !signed_p
9435 /* A typedef for plain `int' without `signed' can be
9436 controlled just like plain `int', but a typedef for
9437 `signed int' cannot be so controlled. */
9438 && !(typedef_decl
9439 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9440 && TREE_CODE (type) == INTEGER_TYPE
9441 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9443 if (explicit_intN)
9444 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
9445 else if (longlong)
9446 type = long_long_unsigned_type_node;
9447 else if (long_p)
9448 type = long_unsigned_type_node;
9449 else if (short_p)
9450 type = short_unsigned_type_node;
9451 else if (type == char_type_node)
9452 type = unsigned_char_type_node;
9453 else if (typedef_decl)
9454 type = unsigned_type_for (type);
9455 else
9456 type = unsigned_type_node;
9458 else if (signed_p && type == char_type_node)
9459 type = signed_char_type_node;
9460 else if (explicit_intN)
9461 type = int_n_trees[declspecs->int_n_idx].signed_type;
9462 else if (longlong)
9463 type = long_long_integer_type_node;
9464 else if (long_p)
9465 type = long_integer_type_node;
9466 else if (short_p)
9467 type = short_integer_type_node;
9469 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9471 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9472 error ("complex invalid for %qs", name);
9473 /* If a modifier is specified, the resulting complex is the complex
9474 form of TYPE. E.g, "complex short" is "complex short int". */
9475 else if (type == integer_type_node)
9476 type = complex_integer_type_node;
9477 else if (type == float_type_node)
9478 type = complex_float_type_node;
9479 else if (type == double_type_node)
9480 type = complex_double_type_node;
9481 else if (type == long_double_type_node)
9482 type = complex_long_double_type_node;
9483 else
9484 type = build_complex_type (type);
9487 type_quals = TYPE_UNQUALIFIED;
9488 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9489 type_quals |= TYPE_QUAL_CONST;
9490 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9491 type_quals |= TYPE_QUAL_VOLATILE;
9492 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9493 type_quals |= TYPE_QUAL_RESTRICT;
9494 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
9495 error ("qualifiers are not allowed on declaration of %<operator %T%>",
9496 ctor_return_type);
9498 /* If we're using the injected-class-name to form a compound type or a
9499 declaration, replace it with the underlying class so we don't get
9500 redundant typedefs in the debug output. But if we are returning the
9501 type unchanged, leave it alone so that it's available to
9502 maybe_get_template_decl_from_type_decl. */
9503 if (CLASS_TYPE_P (type)
9504 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9505 && type == TREE_TYPE (TYPE_NAME (type))
9506 && (declarator || type_quals))
9507 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9509 type_quals |= cp_type_quals (type);
9510 type = cp_build_qualified_type_real
9511 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
9512 || declspecs->decltype_p)
9513 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9514 /* We might have ignored or rejected some of the qualifiers. */
9515 type_quals = cp_type_quals (type);
9517 staticp = 0;
9518 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9519 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9520 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9522 storage_class = declspecs->storage_class;
9523 if (storage_class == sc_static)
9524 staticp = 1 + (decl_context == FIELD);
9526 if (virtualp && staticp == 2)
9528 error ("member %qD cannot be declared both virtual and static", dname);
9529 storage_class = sc_none;
9530 staticp = 0;
9532 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9534 /* Issue errors about use of storage classes for parameters. */
9535 if (decl_context == PARM)
9537 if (typedef_p)
9539 error ("typedef declaration invalid in parameter declaration");
9540 return error_mark_node;
9542 else if (template_parm_flag && storage_class != sc_none)
9544 error ("storage class specified for template parameter %qs", name);
9545 return error_mark_node;
9547 else if (storage_class == sc_static
9548 || storage_class == sc_extern
9549 || thread_p)
9550 error ("storage class specifiers invalid in parameter declarations");
9552 /* Function parameters cannot be constexpr. If we saw one, moan
9553 and pretend it wasn't there. */
9554 if (constexpr_p)
9556 error ("a parameter cannot be declared %<constexpr%>");
9557 constexpr_p = 0;
9561 /* Give error if `virtual' is used outside of class declaration. */
9562 if (virtualp
9563 && (current_class_name == NULL_TREE || decl_context != FIELD))
9565 error_at (declspecs->locations[ds_virtual],
9566 "%<virtual%> outside class declaration");
9567 virtualp = 0;
9570 /* Static anonymous unions are dealt with here. */
9571 if (staticp && decl_context == TYPENAME
9572 && declspecs->type
9573 && ANON_AGGR_TYPE_P (declspecs->type))
9574 decl_context = FIELD;
9576 /* Warn about storage classes that are invalid for certain
9577 kinds of declarations (parameters, typenames, etc.). */
9578 if (thread_p
9579 && ((storage_class
9580 && storage_class != sc_extern
9581 && storage_class != sc_static)
9582 || typedef_p))
9584 error ("multiple storage classes in declaration of %qs", name);
9585 thread_p = false;
9587 if (decl_context != NORMAL
9588 && ((storage_class != sc_none
9589 && storage_class != sc_mutable)
9590 || thread_p))
9592 if ((decl_context == PARM || decl_context == CATCHPARM)
9593 && (storage_class == sc_register
9594 || storage_class == sc_auto))
9596 else if (typedef_p)
9598 else if (decl_context == FIELD
9599 /* C++ allows static class elements. */
9600 && storage_class == sc_static)
9601 /* C++ also allows inlines and signed and unsigned elements,
9602 but in those cases we don't come in here. */
9604 else
9606 if (decl_context == FIELD)
9607 error ("storage class specified for %qs", name);
9608 else
9610 if (decl_context == PARM || decl_context == CATCHPARM)
9611 error ("storage class specified for parameter %qs", name);
9612 else
9613 error ("storage class specified for typename");
9615 if (storage_class == sc_register
9616 || storage_class == sc_auto
9617 || storage_class == sc_extern
9618 || thread_p)
9619 storage_class = sc_none;
9622 else if (storage_class == sc_extern && funcdef_flag
9623 && ! toplevel_bindings_p ())
9624 error ("nested function %qs declared %<extern%>", name);
9625 else if (toplevel_bindings_p ())
9627 if (storage_class == sc_auto)
9628 error ("top-level declaration of %qs specifies %<auto%>", name);
9630 else if (thread_p
9631 && storage_class != sc_extern
9632 && storage_class != sc_static)
9634 if (declspecs->gnu_thread_keyword_p)
9635 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9636 "declared %<__thread%>", name);
9638 /* When thread_local is applied to a variable of block scope the
9639 storage-class-specifier static is implied if it does not appear
9640 explicitly. */
9641 storage_class = declspecs->storage_class = sc_static;
9642 staticp = 1;
9645 if (storage_class && friendp)
9647 error ("storage class specifiers invalid in friend function declarations");
9648 storage_class = sc_none;
9649 staticp = 0;
9652 if (!id_declarator)
9653 unqualified_id = NULL_TREE;
9654 else
9656 unqualified_id = id_declarator->u.id.unqualified_name;
9657 switch (TREE_CODE (unqualified_id))
9659 case BIT_NOT_EXPR:
9660 unqualified_id = TREE_OPERAND (unqualified_id, 0);
9661 if (TYPE_P (unqualified_id))
9662 unqualified_id = constructor_name (unqualified_id);
9663 break;
9665 case IDENTIFIER_NODE:
9666 case TEMPLATE_ID_EXPR:
9667 break;
9669 default:
9670 gcc_unreachable ();
9674 if (declspecs->std_attributes)
9676 /* Apply the c++11 attributes to the type preceding them. */
9677 input_location = declspecs->locations[ds_std_attribute];
9678 decl_attributes (&type, declspecs->std_attributes, 0);
9679 input_location = saved_loc;
9682 /* Determine the type of the entity declared by recurring on the
9683 declarator. */
9684 for (; declarator; declarator = declarator->declarator)
9686 const cp_declarator *inner_declarator;
9687 tree attrs;
9689 if (type == error_mark_node)
9690 return error_mark_node;
9692 attrs = declarator->attributes;
9693 if (attrs)
9695 int attr_flags;
9697 attr_flags = 0;
9698 if (declarator == NULL || declarator->kind == cdk_id)
9699 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9700 if (declarator->kind == cdk_function)
9701 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9702 if (declarator->kind == cdk_array)
9703 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9704 returned_attrs = decl_attributes (&type,
9705 chainon (returned_attrs, attrs),
9706 attr_flags);
9709 if (declarator->kind == cdk_id)
9710 break;
9712 inner_declarator = declarator->declarator;
9714 switch (declarator->kind)
9716 case cdk_array:
9717 type = create_array_type_for_decl (dname, type,
9718 declarator->u.array.bounds);
9719 if (declarator->std_attributes)
9720 /* [dcl.array]/1:
9722 The optional attribute-specifier-seq appertains to the
9723 array. */
9724 returned_attrs = chainon (returned_attrs,
9725 declarator->std_attributes);
9726 break;
9728 case cdk_function:
9730 tree arg_types;
9731 int funcdecl_p;
9733 /* Declaring a function type.
9734 Make sure we have a valid type for the function to return. */
9736 if (type_quals != TYPE_UNQUALIFIED)
9738 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9739 warning (OPT_Wignored_qualifiers,
9740 "type qualifiers ignored on function return type");
9741 /* We now know that the TYPE_QUALS don't apply to the
9742 decl, but to its return type. */
9743 type_quals = TYPE_UNQUALIFIED;
9745 errmsg = targetm.invalid_return_type (type);
9746 if (errmsg)
9748 error (errmsg);
9749 type = integer_type_node;
9752 /* Error about some types functions can't return. */
9754 if (TREE_CODE (type) == FUNCTION_TYPE)
9756 error ("%qs declared as function returning a function", name);
9757 return error_mark_node;
9759 if (TREE_CODE (type) == ARRAY_TYPE)
9761 error ("%qs declared as function returning an array", name);
9762 return error_mark_node;
9765 input_location = declspecs->locations[ds_type_spec];
9766 abstract_virtuals_error (ACU_RETURN, type);
9767 input_location = saved_loc;
9769 /* Pick up type qualifiers which should be applied to `this'. */
9770 memfn_quals = declarator->u.function.qualifiers;
9771 /* Pick up virt-specifiers. */
9772 virt_specifiers = declarator->u.function.virt_specifiers;
9773 /* And ref-qualifier, too */
9774 rqual = declarator->u.function.ref_qualifier;
9775 /* Pick up the exception specifications. */
9776 raises = declarator->u.function.exception_specification;
9777 /* If the exception-specification is ill-formed, let's pretend
9778 there wasn't one. */
9779 if (raises == error_mark_node)
9780 raises = NULL_TREE;
9782 /* Say it's a definition only for the CALL_EXPR
9783 closest to the identifier. */
9784 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9786 /* Handle a late-specified return type. */
9787 if (funcdecl_p)
9789 if (type_uses_auto (type))
9791 if (!declarator->u.function.late_return_type)
9793 if (current_class_type
9794 && LAMBDA_TYPE_P (current_class_type))
9795 /* OK for C++11 lambdas. */;
9796 else if (cxx_dialect < cxx14)
9798 error ("%qs function uses "
9799 "%<auto%> type specifier without trailing "
9800 "return type", name);
9801 inform (input_location, "deduced return type "
9802 "only available with -std=c++14 or "
9803 "-std=gnu++14");
9805 else if (virtualp)
9807 error ("virtual function cannot "
9808 "have deduced return type");
9809 virtualp = false;
9812 else if (!is_auto (type) && sfk != sfk_conversion)
9814 error ("%qs function with trailing return type has"
9815 " %qT as its type rather than plain %<auto%>",
9816 name, type);
9817 return error_mark_node;
9820 else if (declarator->u.function.late_return_type
9821 && sfk != sfk_conversion)
9823 if (cxx_dialect < cxx11)
9824 /* Not using maybe_warn_cpp0x because this should
9825 always be an error. */
9826 error ("trailing return type only available with "
9827 "-std=c++11 or -std=gnu++11");
9828 else
9829 error ("%qs function with trailing return type not "
9830 "declared with %<auto%> type specifier", name);
9831 return error_mark_node;
9834 type = splice_late_return_type
9835 (type, declarator->u.function.late_return_type);
9836 if (type == error_mark_node)
9837 return error_mark_node;
9839 if (declarator->u.function.late_return_type)
9840 late_return_type_p = true;
9842 if (ctype == NULL_TREE
9843 && decl_context == FIELD
9844 && funcdecl_p
9845 && friendp == 0)
9846 ctype = current_class_type;
9848 if (ctype && (sfk == sfk_constructor
9849 || sfk == sfk_destructor))
9851 /* We are within a class's scope. If our declarator name
9852 is the same as the class name, and we are defining
9853 a function, then it is a constructor/destructor, and
9854 therefore returns a void type. */
9856 /* ISO C++ 12.4/2. A destructor may not be declared
9857 const or volatile. A destructor may not be static.
9858 A destructor may not be declared with ref-qualifier.
9860 ISO C++ 12.1. A constructor may not be declared
9861 const or volatile. A constructor may not be
9862 virtual. A constructor may not be static.
9863 A constructor may not be declared with ref-qualifier. */
9864 if (staticp == 2)
9865 error ((flags == DTOR_FLAG)
9866 ? G_("destructor cannot be static member function")
9867 : G_("constructor cannot be static member function"));
9868 if (memfn_quals)
9870 error ((flags == DTOR_FLAG)
9871 ? G_("destructors may not be cv-qualified")
9872 : G_("constructors may not be cv-qualified"));
9873 memfn_quals = TYPE_UNQUALIFIED;
9876 if (rqual)
9878 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
9879 error ((flags == DTOR_FLAG)
9880 ? "destructors may not be ref-qualified"
9881 : "constructors may not be ref-qualified");
9882 rqual = REF_QUAL_NONE;
9885 if (decl_context == FIELD
9886 && !member_function_or_else (ctype,
9887 current_class_type,
9888 flags))
9889 return error_mark_node;
9891 if (flags != DTOR_FLAG)
9893 /* It's a constructor. */
9894 if (explicitp == 1)
9895 explicitp = 2;
9896 if (virtualp)
9898 permerror (input_location, "constructors cannot be declared virtual");
9899 virtualp = 0;
9901 if (decl_context == FIELD
9902 && sfk != sfk_constructor)
9903 return error_mark_node;
9905 if (decl_context == FIELD)
9906 staticp = 0;
9908 else if (friendp)
9910 if (virtualp)
9912 /* Cannot be both friend and virtual. */
9913 error ("virtual functions cannot be friends");
9914 friendp = 0;
9916 if (decl_context == NORMAL)
9917 error ("friend declaration not in class definition");
9918 if (current_function_decl && funcdef_flag)
9919 error ("can%'t define friend function %qs in a local "
9920 "class definition",
9921 name);
9923 else if (ctype && sfk == sfk_conversion)
9925 if (explicitp == 1)
9927 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9928 explicitp = 2;
9930 if (late_return_type_p)
9931 error ("a conversion function cannot have a trailing return type");
9934 arg_types = grokparms (declarator->u.function.parameters,
9935 &parms);
9937 if (inner_declarator
9938 && inner_declarator->kind == cdk_id
9939 && inner_declarator->u.id.sfk == sfk_destructor
9940 && arg_types != void_list_node)
9942 error ("destructors may not have parameters");
9943 arg_types = void_list_node;
9944 parms = NULL_TREE;
9947 type = build_function_type (type, arg_types);
9948 if (declarator->std_attributes)
9949 /* [dcl.fct]/2:
9951 The optional attribute-specifier-seq appertains to
9952 the function type. */
9953 decl_attributes (&type, declarator->std_attributes,
9956 break;
9958 case cdk_pointer:
9959 case cdk_reference:
9960 case cdk_ptrmem:
9961 /* Filter out pointers-to-references and references-to-references.
9962 We can get these if a TYPE_DECL is used. */
9964 if (TREE_CODE (type) == REFERENCE_TYPE)
9966 if (declarator->kind != cdk_reference)
9968 error ("cannot declare pointer to %q#T", type);
9969 type = TREE_TYPE (type);
9972 /* In C++0x, we allow reference to reference declarations
9973 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9974 and template type arguments [14.3.1/4 temp.arg.type]. The
9975 check for direct reference to reference declarations, which
9976 are still forbidden, occurs below. Reasoning behind the change
9977 can be found in DR106, DR540, and the rvalue reference
9978 proposals. */
9979 else if (cxx_dialect == cxx98)
9981 error ("cannot declare reference to %q#T", type);
9982 type = TREE_TYPE (type);
9985 else if (VOID_TYPE_P (type))
9987 if (declarator->kind == cdk_reference)
9988 error ("cannot declare reference to %q#T", type);
9989 else if (declarator->kind == cdk_ptrmem)
9990 error ("cannot declare pointer to %q#T member", type);
9993 /* We now know that the TYPE_QUALS don't apply to the decl,
9994 but to the target of the pointer. */
9995 type_quals = TYPE_UNQUALIFIED;
9997 /* This code used to handle METHOD_TYPE, but I don't think it's
9998 possible to get it here anymore. */
9999 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
10000 if (declarator->kind == cdk_ptrmem
10001 && TREE_CODE (type) == FUNCTION_TYPE)
10003 memfn_quals |= type_memfn_quals (type);
10004 type = build_memfn_type (type,
10005 declarator->u.pointer.class_type,
10006 memfn_quals,
10007 rqual);
10008 if (type == error_mark_node)
10009 return error_mark_node;
10011 rqual = REF_QUAL_NONE;
10012 memfn_quals = TYPE_UNQUALIFIED;
10015 if (TREE_CODE (type) == FUNCTION_TYPE
10016 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
10017 || type_memfn_rqual (type) != REF_QUAL_NONE))
10018 error (declarator->kind == cdk_reference
10019 ? G_("cannot declare reference to qualified function type %qT")
10020 : G_("cannot declare pointer to qualified function type %qT"),
10021 type);
10023 /* When the pointed-to type involves components of variable size,
10024 care must be taken to ensure that the size evaluation code is
10025 emitted early enough to dominate all the possible later uses
10026 and late enough for the variables on which it depends to have
10027 been assigned.
10029 This is expected to happen automatically when the pointed-to
10030 type has a name/declaration of it's own, but special attention
10031 is required if the type is anonymous.
10033 We handle the NORMAL and FIELD contexts here by inserting a
10034 dummy statement that just evaluates the size at a safe point
10035 and ensures it is not deferred until e.g. within a deeper
10036 conditional context (c++/43555).
10038 We expect nothing to be needed here for PARM or TYPENAME.
10039 Evaluating the size at this point for TYPENAME would
10040 actually be incorrect, as we might be in the middle of an
10041 expression with side effects on the pointed-to type size
10042 "arguments" prior to the pointer declaration point and the
10043 size evaluation could end up prior to the side effects. */
10045 if (!TYPE_NAME (type)
10046 && (decl_context == NORMAL || decl_context == FIELD)
10047 && at_function_scope_p ()
10048 && variably_modified_type_p (type, NULL_TREE))
10049 /* Force evaluation of the SAVE_EXPR. */
10050 finish_expr_stmt (TYPE_SIZE (type));
10052 if (declarator->kind == cdk_reference)
10054 /* In C++0x, the type we are creating a reference to might be
10055 a typedef which is itself a reference type. In that case,
10056 we follow the reference collapsing rules in
10057 [7.1.3/8 dcl.typedef] to create the final reference type:
10059 "If a typedef TD names a type that is a reference to a type
10060 T, an attempt to create the type 'lvalue reference to cv TD'
10061 creates the type 'lvalue reference to T,' while an attempt
10062 to create the type "rvalue reference to cv TD' creates the
10063 type TD."
10065 if (VOID_TYPE_P (type))
10066 /* We already gave an error. */;
10067 else if (TREE_CODE (type) == REFERENCE_TYPE)
10069 if (declarator->u.reference.rvalue_ref)
10070 /* Leave type alone. */;
10071 else
10072 type = cp_build_reference_type (TREE_TYPE (type), false);
10074 else
10075 type = cp_build_reference_type
10076 (type, declarator->u.reference.rvalue_ref);
10078 /* In C++0x, we need this check for direct reference to
10079 reference declarations, which are forbidden by
10080 [8.3.2/5 dcl.ref]. Reference to reference declarations
10081 are only allowed indirectly through typedefs and template
10082 type arguments. Example:
10084 void foo(int & &); // invalid ref-to-ref decl
10086 typedef int & int_ref;
10087 void foo(int_ref &); // valid ref-to-ref decl
10089 if (inner_declarator && inner_declarator->kind == cdk_reference)
10090 error ("cannot declare reference to %q#T, which is not "
10091 "a typedef or a template type argument", type);
10093 else if (TREE_CODE (type) == METHOD_TYPE)
10094 type = build_ptrmemfunc_type (build_pointer_type (type));
10095 else if (declarator->kind == cdk_ptrmem)
10097 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
10098 != NAMESPACE_DECL);
10099 if (declarator->u.pointer.class_type == error_mark_node)
10100 /* We will already have complained. */
10101 type = error_mark_node;
10102 else
10103 type = build_ptrmem_type (declarator->u.pointer.class_type,
10104 type);
10106 else
10107 type = build_pointer_type (type);
10109 /* Process a list of type modifier keywords (such as
10110 const or volatile) that were given inside the `*' or `&'. */
10112 if (declarator->u.pointer.qualifiers)
10114 type
10115 = cp_build_qualified_type (type,
10116 declarator->u.pointer.qualifiers);
10117 type_quals = cp_type_quals (type);
10120 /* Apply C++11 attributes to the pointer, and not to the
10121 type pointed to. This is unlike what is done for GNU
10122 attributes above. It is to comply with [dcl.ptr]/1:
10124 [the optional attribute-specifier-seq (7.6.1) appertains
10125 to the pointer and not to the object pointed to]. */
10126 if (declarator->std_attributes)
10127 decl_attributes (&type, declarator->std_attributes,
10130 ctype = NULL_TREE;
10131 break;
10133 case cdk_error:
10134 break;
10136 default:
10137 gcc_unreachable ();
10141 /* A `constexpr' specifier used in an object declaration declares
10142 the object as `const'. */
10143 if (constexpr_p && innermost_code != cdk_function)
10145 /* DR1688 says that a `constexpr' specifier in combination with
10146 `volatile' is valid. */
10148 if (TREE_CODE (type) != REFERENCE_TYPE)
10150 type_quals |= TYPE_QUAL_CONST;
10151 type = cp_build_qualified_type (type, type_quals);
10155 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
10156 && TREE_CODE (type) != FUNCTION_TYPE
10157 && TREE_CODE (type) != METHOD_TYPE
10158 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
10160 error ("template-id %qD used as a declarator",
10161 unqualified_id);
10162 unqualified_id = dname;
10165 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
10166 qualified with a class-name, turn it into a METHOD_TYPE, unless
10167 we know that the function is static. We take advantage of this
10168 opportunity to do other processing that pertains to entities
10169 explicitly declared to be class members. Note that if DECLARATOR
10170 is non-NULL, we know it is a cdk_id declarator; otherwise, we
10171 would not have exited the loop above. */
10172 if (declarator
10173 && declarator->u.id.qualifying_scope
10174 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
10176 ctype = declarator->u.id.qualifying_scope;
10177 ctype = TYPE_MAIN_VARIANT (ctype);
10178 template_count = num_template_headers_for_class (ctype);
10180 if (ctype == current_class_type)
10182 if (friendp)
10184 permerror (input_location, "member functions are implicitly friends of their class");
10185 friendp = 0;
10187 else
10188 permerror (declarator->id_loc,
10189 "extra qualification %<%T::%> on member %qs",
10190 ctype, name);
10192 else if (/* If the qualifying type is already complete, then we
10193 can skip the following checks. */
10194 !COMPLETE_TYPE_P (ctype)
10195 && (/* If the function is being defined, then
10196 qualifying type must certainly be complete. */
10197 funcdef_flag
10198 /* A friend declaration of "T::f" is OK, even if
10199 "T" is a template parameter. But, if this
10200 function is not a friend, the qualifying type
10201 must be a class. */
10202 || (!friendp && !CLASS_TYPE_P (ctype))
10203 /* For a declaration, the type need not be
10204 complete, if either it is dependent (since there
10205 is no meaningful definition of complete in that
10206 case) or the qualifying class is currently being
10207 defined. */
10208 || !(dependent_type_p (ctype)
10209 || currently_open_class (ctype)))
10210 /* Check that the qualifying type is complete. */
10211 && !complete_type_or_else (ctype, NULL_TREE))
10212 return error_mark_node;
10213 else if (TREE_CODE (type) == FUNCTION_TYPE)
10215 if (current_class_type
10216 && (!friendp || funcdef_flag))
10218 error (funcdef_flag
10219 ? G_("cannot define member function %<%T::%s%> "
10220 "within %<%T%>")
10221 : G_("cannot declare member function %<%T::%s%> "
10222 "within %<%T%>"),
10223 ctype, name, current_class_type);
10224 return error_mark_node;
10227 else if (typedef_p && current_class_type)
10229 error ("cannot declare member %<%T::%s%> within %qT",
10230 ctype, name, current_class_type);
10231 return error_mark_node;
10235 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
10236 ctype = current_class_type;
10238 /* Now TYPE has the actual type. */
10240 if (returned_attrs)
10242 if (attrlist)
10243 *attrlist = chainon (returned_attrs, *attrlist);
10244 else
10245 attrlist = &returned_attrs;
10248 if (declarator
10249 && declarator->kind == cdk_id
10250 && declarator->std_attributes)
10251 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
10252 a declarator-id appertains to the entity that is declared. */
10253 *attrlist = chainon (*attrlist, declarator->std_attributes);
10255 /* Handle parameter packs. */
10256 if (parameter_pack_p)
10258 if (decl_context == PARM)
10259 /* Turn the type into a pack expansion.*/
10260 type = make_pack_expansion (type);
10261 else
10262 error ("non-parameter %qs cannot be a parameter pack", name);
10265 /* Did array size calculations overflow or does the array cover more
10266 than half of the address-space? */
10267 if (TREE_CODE (type) == ARRAY_TYPE
10268 && COMPLETE_TYPE_P (type)
10269 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
10270 && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
10272 error ("size of array %qs is too large", name);
10273 /* If we proceed with the array type as it is, we'll eventually
10274 crash in tree_to_[su]hwi(). */
10275 type = error_mark_node;
10278 if ((decl_context == FIELD || decl_context == PARM)
10279 && !processing_template_decl
10280 && variably_modified_type_p (type, NULL_TREE))
10282 if (decl_context == FIELD)
10283 error ("data member may not have variably modified type %qT", type);
10284 else
10285 error ("parameter may not have variably modified type %qT", type);
10286 type = error_mark_node;
10289 if (explicitp == 1 || (explicitp && friendp))
10291 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
10292 in the declaration of a constructor or conversion function within
10293 a class definition. */
10294 if (!current_class_type)
10295 error_at (declspecs->locations[ds_explicit],
10296 "%<explicit%> outside class declaration");
10297 else if (friendp)
10298 error_at (declspecs->locations[ds_explicit],
10299 "%<explicit%> in friend declaration");
10300 else
10301 error_at (declspecs->locations[ds_explicit],
10302 "only declarations of constructors and conversion operators "
10303 "can be %<explicit%>");
10304 explicitp = 0;
10307 if (storage_class == sc_mutable)
10309 if (decl_context != FIELD || friendp)
10311 error ("non-member %qs cannot be declared %<mutable%>", name);
10312 storage_class = sc_none;
10314 else if (decl_context == TYPENAME || typedef_p)
10316 error ("non-object member %qs cannot be declared %<mutable%>", name);
10317 storage_class = sc_none;
10319 else if (TREE_CODE (type) == FUNCTION_TYPE
10320 || TREE_CODE (type) == METHOD_TYPE)
10322 error ("function %qs cannot be declared %<mutable%>", name);
10323 storage_class = sc_none;
10325 else if (staticp)
10327 error ("static %qs cannot be declared %<mutable%>", name);
10328 storage_class = sc_none;
10330 else if (type_quals & TYPE_QUAL_CONST)
10332 error ("const %qs cannot be declared %<mutable%>", name);
10333 storage_class = sc_none;
10335 else if (TREE_CODE (type) == REFERENCE_TYPE)
10337 permerror (input_location, "reference %qs cannot be declared "
10338 "%<mutable%>", name);
10339 storage_class = sc_none;
10343 /* If this is declaring a typedef name, return a TYPE_DECL. */
10344 if (typedef_p && decl_context != TYPENAME)
10346 tree decl;
10348 /* Note that the grammar rejects storage classes
10349 in typenames, fields or parameters. */
10350 if (current_lang_name == lang_name_java)
10351 TYPE_FOR_JAVA (type) = 1;
10353 /* This declaration:
10355 typedef void f(int) const;
10357 declares a function type which is not a member of any
10358 particular class, but which is cv-qualified; for
10359 example "f S::*" declares a pointer to a const-qualified
10360 member function of S. We record the cv-qualification in the
10361 function type. */
10362 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
10364 type = apply_memfn_quals (type, memfn_quals, rqual);
10366 /* We have now dealt with these qualifiers. */
10367 memfn_quals = TYPE_UNQUALIFIED;
10368 rqual = REF_QUAL_NONE;
10371 if (type_uses_auto (type))
10373 error ("typedef declared %<auto%>");
10374 type = error_mark_node;
10377 if (decl_context == FIELD)
10378 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10379 else
10380 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10381 if (id_declarator && declarator->u.id.qualifying_scope) {
10382 error_at (DECL_SOURCE_LOCATION (decl),
10383 "typedef name may not be a nested-name-specifier");
10384 TREE_TYPE (decl) = error_mark_node;
10387 if (decl_context != FIELD)
10389 if (!current_function_decl)
10390 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10391 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10392 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10393 (current_function_decl)))
10394 /* The TYPE_DECL is "abstract" because there will be
10395 clones of this constructor/destructor, and there will
10396 be copies of this TYPE_DECL generated in those
10397 clones. The decloning optimization (for space) may
10398 revert this subsequently if it determines that
10399 the clones should share a common implementation. */
10400 DECL_ABSTRACT_P (decl) = true;
10402 else if (current_class_type
10403 && constructor_name_p (unqualified_id, current_class_type))
10404 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10405 "as enclosing class",
10406 unqualified_id);
10408 /* If the user declares "typedef struct {...} foo" then the
10409 struct will have an anonymous name. Fill that name in now.
10410 Nothing can refer to it, so nothing needs know about the name
10411 change. */
10412 if (type != error_mark_node
10413 && unqualified_id
10414 && TYPE_NAME (type)
10415 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10416 && TYPE_ANONYMOUS_P (type)
10417 && declspecs->type_definition_p
10418 && attributes_naming_typedef_ok (*attrlist)
10419 && cp_type_quals (type) == TYPE_UNQUALIFIED)
10421 tree t;
10423 /* Replace the anonymous name with the real name everywhere. */
10424 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10426 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
10427 /* We do not rename the debug info representing the
10428 anonymous tagged type because the standard says in
10429 [dcl.typedef] that the naming applies only for
10430 linkage purposes. */
10431 /*debug_hooks->set_name (t, decl);*/
10432 TYPE_NAME (t) = decl;
10435 if (TYPE_LANG_SPECIFIC (type))
10436 TYPE_WAS_ANONYMOUS (type) = 1;
10438 /* If this is a typedef within a template class, the nested
10439 type is a (non-primary) template. The name for the
10440 template needs updating as well. */
10441 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10442 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10443 = TYPE_IDENTIFIER (type);
10445 /* Adjust linkage now that we aren't anonymous anymore. */
10446 reset_type_linkage (type);
10448 /* FIXME remangle member functions; member functions of a
10449 type with external linkage have external linkage. */
10452 if (signed_p
10453 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10454 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10456 bad_specifiers (decl, BSP_TYPE, virtualp,
10457 memfn_quals != TYPE_UNQUALIFIED,
10458 inlinep, friendp, raises != NULL_TREE);
10460 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10461 /* Acknowledge that this was written:
10462 `using analias = atype;'. */
10463 TYPE_DECL_ALIAS_P (decl) = 1;
10465 return decl;
10468 /* Detect the case of an array type of unspecified size
10469 which came, as such, direct from a typedef name.
10470 We must copy the type, so that the array's domain can be
10471 individually set by the object's initializer. */
10473 if (type && typedef_type
10474 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10475 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10476 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10478 /* Detect where we're using a typedef of function type to declare a
10479 function. PARMS will not be set, so we must create it now. */
10481 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10483 tree decls = NULL_TREE;
10484 tree args;
10486 for (args = TYPE_ARG_TYPES (type);
10487 args && args != void_list_node;
10488 args = TREE_CHAIN (args))
10490 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10492 DECL_CHAIN (decl) = decls;
10493 decls = decl;
10496 parms = nreverse (decls);
10498 if (decl_context != TYPENAME)
10500 /* The qualifiers on the function type become the qualifiers on
10501 the non-static member function. */
10502 memfn_quals |= type_memfn_quals (type);
10503 rqual = type_memfn_rqual (type);
10504 type_quals = TYPE_UNQUALIFIED;
10508 /* If this is a type name (such as, in a cast or sizeof),
10509 compute the type and return it now. */
10511 if (decl_context == TYPENAME)
10513 /* Note that here we don't care about type_quals. */
10515 /* Special case: "friend class foo" looks like a TYPENAME context. */
10516 if (friendp)
10518 if (inlinep)
10520 error ("%<inline%> specified for friend class declaration");
10521 inlinep = 0;
10524 if (!current_aggr)
10526 /* Don't allow friend declaration without a class-key. */
10527 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10528 permerror (input_location, "template parameters cannot be friends");
10529 else if (TREE_CODE (type) == TYPENAME_TYPE)
10530 permerror (input_location, "friend declaration requires class-key, "
10531 "i.e. %<friend class %T::%D%>",
10532 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10533 else
10534 permerror (input_location, "friend declaration requires class-key, "
10535 "i.e. %<friend %#T%>",
10536 type);
10539 /* Only try to do this stuff if we didn't already give up. */
10540 if (type != integer_type_node)
10542 /* A friendly class? */
10543 if (current_class_type)
10544 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10545 /*complain=*/true);
10546 else
10547 error ("trying to make class %qT a friend of global scope",
10548 type);
10550 type = void_type_node;
10553 else if (memfn_quals || rqual)
10555 if (ctype == NULL_TREE
10556 && TREE_CODE (type) == METHOD_TYPE)
10557 ctype = TYPE_METHOD_BASETYPE (type);
10559 if (ctype)
10560 type = build_memfn_type (type, ctype, memfn_quals, rqual);
10561 /* Core issue #547: need to allow this in template type args.
10562 Allow it in general in C++11 for alias-declarations. */
10563 else if ((template_type_arg || cxx_dialect >= cxx11)
10564 && TREE_CODE (type) == FUNCTION_TYPE)
10565 type = apply_memfn_quals (type, memfn_quals, rqual);
10566 else
10567 error ("invalid qualifiers on non-member function type");
10570 return type;
10572 else if (unqualified_id == NULL_TREE && decl_context != PARM
10573 && decl_context != CATCHPARM
10574 && TREE_CODE (type) != UNION_TYPE
10575 && ! bitfield)
10577 error ("abstract declarator %qT used as declaration", type);
10578 return error_mark_node;
10581 /* Only functions may be declared using an operator-function-id. */
10582 if (unqualified_id
10583 && IDENTIFIER_OPNAME_P (unqualified_id)
10584 && TREE_CODE (type) != FUNCTION_TYPE
10585 && TREE_CODE (type) != METHOD_TYPE)
10587 error ("declaration of %qD as non-function", unqualified_id);
10588 return error_mark_node;
10591 /* We don't check parameter types here because we can emit a better
10592 error message later. */
10593 if (decl_context != PARM)
10595 type = check_var_type (unqualified_id, type);
10596 if (type == error_mark_node)
10597 return error_mark_node;
10600 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10601 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10603 if (decl_context == PARM || decl_context == CATCHPARM)
10605 if (ctype || in_namespace)
10606 error ("cannot use %<::%> in parameter declaration");
10608 if (type_uses_auto (type))
10610 if (cxx_dialect >= cxx14)
10611 error ("%<auto%> parameter not permitted in this context");
10612 else
10613 error ("parameter declared %<auto%>");
10614 type = error_mark_node;
10617 /* A parameter declared as an array of T is really a pointer to T.
10618 One declared as a function is really a pointer to a function.
10619 One declared as a member is really a pointer to member. */
10621 if (TREE_CODE (type) == ARRAY_TYPE)
10623 /* Transfer const-ness of array into that of type pointed to. */
10624 type = build_pointer_type (TREE_TYPE (type));
10625 type_quals = TYPE_UNQUALIFIED;
10626 array_parameter_p = true;
10628 else if (TREE_CODE (type) == FUNCTION_TYPE)
10629 type = build_pointer_type (type);
10632 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10633 && !NEW_DELETE_OPNAME_P (unqualified_id))
10635 cp_cv_quals real_quals = memfn_quals;
10636 if (cxx_dialect < cxx14 && constexpr_p
10637 && sfk != sfk_constructor && sfk != sfk_destructor)
10638 real_quals |= TYPE_QUAL_CONST;
10639 type = build_memfn_type (type, ctype, real_quals, rqual);
10643 tree decl;
10645 if (decl_context == PARM)
10647 decl = cp_build_parm_decl (unqualified_id, type);
10648 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
10650 bad_specifiers (decl, BSP_PARM, virtualp,
10651 memfn_quals != TYPE_UNQUALIFIED,
10652 inlinep, friendp, raises != NULL_TREE);
10654 else if (decl_context == FIELD)
10656 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE
10657 && type_uses_auto (type))
10659 error ("non-static data member declared %<auto%>");
10660 type = error_mark_node;
10663 /* The C99 flexible array extension. */
10664 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10665 && TYPE_DOMAIN (type) == NULL_TREE)
10667 tree itype = compute_array_index_type (dname, integer_zero_node,
10668 tf_warning_or_error);
10669 type = build_cplus_array_type (TREE_TYPE (type), itype);
10672 if (type == error_mark_node)
10674 /* Happens when declaring arrays of sizes which
10675 are error_mark_node, for example. */
10676 decl = NULL_TREE;
10678 else if (in_namespace && !friendp)
10680 /* Something like struct S { int N::j; }; */
10681 error ("invalid use of %<::%>");
10682 return error_mark_node;
10684 else if (TREE_CODE (type) == FUNCTION_TYPE
10685 || TREE_CODE (type) == METHOD_TYPE)
10687 int publicp = 0;
10688 tree function_context;
10690 if (friendp == 0)
10692 /* This should never happen in pure C++ (the check
10693 could be an assert). It could happen in
10694 Objective-C++ if someone writes invalid code that
10695 uses a function declaration for an instance
10696 variable or property (instance variables and
10697 properties are parsed as FIELD_DECLs, but they are
10698 part of an Objective-C class, not a C++ class).
10699 That code is invalid and is caught by this
10700 check. */
10701 if (!ctype)
10703 error ("declaration of function %qD in invalid context",
10704 unqualified_id);
10705 return error_mark_node;
10708 /* ``A union may [ ... ] not [ have ] virtual functions.''
10709 ARM 9.5 */
10710 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10712 error ("function %qD declared virtual inside a union",
10713 unqualified_id);
10714 return error_mark_node;
10717 if (NEW_DELETE_OPNAME_P (unqualified_id))
10719 if (virtualp)
10721 error ("%qD cannot be declared virtual, since it "
10722 "is always static",
10723 unqualified_id);
10724 virtualp = 0;
10729 /* Check that the name used for a destructor makes sense. */
10730 if (sfk == sfk_destructor)
10732 tree uqname = id_declarator->u.id.unqualified_name;
10734 if (!ctype)
10736 gcc_assert (friendp);
10737 error ("expected qualified name in friend declaration "
10738 "for destructor %qD", uqname);
10739 return error_mark_node;
10742 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10744 error ("declaration of %qD as member of %qT",
10745 uqname, ctype);
10746 return error_mark_node;
10748 if (constexpr_p)
10750 error ("a destructor cannot be %<constexpr%>");
10751 return error_mark_node;
10754 else if (sfk == sfk_constructor && friendp && !ctype)
10756 error ("expected qualified name in friend declaration "
10757 "for constructor %qD",
10758 id_declarator->u.id.unqualified_name);
10759 return error_mark_node;
10762 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10764 tree tmpl = TREE_OPERAND (unqualified_id, 0);
10765 if (variable_template_p (tmpl))
10767 error ("specialization of variable template %qD "
10768 "declared as function", tmpl);
10769 inform (DECL_SOURCE_LOCATION (tmpl),
10770 "variable template declared here");
10771 return error_mark_node;
10775 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10776 function_context = (ctype != NULL_TREE) ?
10777 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10778 publicp = (! friendp || ! staticp)
10779 && function_context == NULL_TREE;
10781 if (late_return_type_p)
10782 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10784 decl = grokfndecl (ctype, type,
10785 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10786 ? unqualified_id : dname,
10787 parms,
10788 unqualified_id,
10789 virtualp, flags, memfn_quals, rqual, raises,
10790 friendp ? -1 : 0, friendp, publicp,
10791 inlinep | (2 * constexpr_p),
10792 initialized == SD_DELETED, sfk,
10793 funcdef_flag, template_count, in_namespace,
10794 attrlist, declarator->id_loc);
10795 decl = set_virt_specifiers (decl, virt_specifiers);
10796 if (decl == NULL_TREE)
10797 return error_mark_node;
10798 #if 0
10799 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10800 /* The decl and setting of decl_attr is also turned off. */
10801 decl = build_decl_attribute_variant (decl, decl_attr);
10802 #endif
10804 /* [class.conv.ctor]
10806 A constructor declared without the function-specifier
10807 explicit that can be called with a single parameter
10808 specifies a conversion from the type of its first
10809 parameter to the type of its class. Such a constructor
10810 is called a converting constructor. */
10811 if (explicitp == 2)
10812 DECL_NONCONVERTING_P (decl) = 1;
10814 else if (!staticp && !dependent_type_p (type)
10815 && !COMPLETE_TYPE_P (complete_type (type))
10816 && (TREE_CODE (type) != ARRAY_TYPE
10817 || !COMPLETE_TYPE_P (TREE_TYPE (type))
10818 || initialized == 0))
10820 if (unqualified_id)
10822 error ("field %qD has incomplete type %qT",
10823 unqualified_id, type);
10824 cxx_incomplete_type_inform (strip_array_types (type));
10826 else
10827 error ("name %qT has incomplete type", type);
10829 type = error_mark_node;
10830 decl = NULL_TREE;
10832 else
10834 if (friendp)
10836 error ("%qE is neither function nor member function; "
10837 "cannot be declared friend", unqualified_id);
10838 friendp = 0;
10840 decl = NULL_TREE;
10843 if (friendp)
10845 /* Friends are treated specially. */
10846 if (ctype == current_class_type)
10847 ; /* We already issued a permerror. */
10848 else if (decl && DECL_NAME (decl))
10850 if (template_class_depth (current_class_type) == 0)
10852 decl = check_explicit_specialization
10853 (unqualified_id, decl, template_count,
10854 2 * funcdef_flag + 4);
10855 if (decl == error_mark_node)
10856 return error_mark_node;
10859 decl = do_friend (ctype, unqualified_id, decl,
10860 *attrlist, flags,
10861 funcdef_flag);
10862 return decl;
10864 else
10865 return error_mark_node;
10868 /* Structure field. It may not be a function, except for C++. */
10870 if (decl == NULL_TREE)
10872 if (staticp)
10874 /* C++ allows static class members. All other work
10875 for this is done by grokfield. */
10876 decl = build_lang_decl_loc (declarator
10877 ? declarator->id_loc
10878 : input_location,
10879 VAR_DECL, unqualified_id, type);
10880 set_linkage_for_static_data_member (decl);
10881 /* Even if there is an in-class initialization, DECL
10882 is considered undefined until an out-of-class
10883 definition is provided. */
10884 DECL_EXTERNAL (decl) = 1;
10886 if (thread_p)
10888 CP_DECL_THREAD_LOCAL_P (decl) = true;
10889 if (!processing_template_decl)
10890 set_decl_tls_model (decl, decl_default_tls_model (decl));
10891 if (declspecs->gnu_thread_keyword_p)
10892 SET_DECL_GNU_TLS_P (decl);
10895 if (constexpr_p && !initialized)
10897 error ("constexpr static data member %qD must have an "
10898 "initializer", decl);
10899 constexpr_p = false;
10902 else
10904 if (constexpr_p)
10906 error ("non-static data member %qE declared %<constexpr%>",
10907 unqualified_id);
10908 constexpr_p = false;
10910 decl = build_decl (input_location,
10911 FIELD_DECL, unqualified_id, type);
10912 DECL_NONADDRESSABLE_P (decl) = bitfield;
10913 if (bitfield && !unqualified_id)
10914 TREE_NO_WARNING (decl) = 1;
10916 if (storage_class == sc_mutable)
10918 DECL_MUTABLE_P (decl) = 1;
10919 storage_class = sc_none;
10922 if (initialized)
10924 /* An attempt is being made to initialize a non-static
10925 member. This is new in C++11. */
10926 maybe_warn_cpp0x (CPP0X_NSDMI);
10928 /* If this has been parsed with static storage class, but
10929 errors forced staticp to be cleared, ensure NSDMI is
10930 not present. */
10931 if (declspecs->storage_class == sc_static)
10932 DECL_INITIAL (decl) = error_mark_node;
10936 bad_specifiers (decl, BSP_FIELD, virtualp,
10937 memfn_quals != TYPE_UNQUALIFIED,
10938 inlinep, friendp, raises != NULL_TREE);
10941 else if (TREE_CODE (type) == FUNCTION_TYPE
10942 || TREE_CODE (type) == METHOD_TYPE)
10944 tree original_name;
10945 int publicp = 0;
10947 if (!unqualified_id)
10948 return error_mark_node;
10950 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10951 original_name = dname;
10952 else
10953 original_name = unqualified_id;
10955 if (storage_class == sc_auto)
10956 error ("storage class %<auto%> invalid for function %qs", name);
10957 else if (storage_class == sc_register)
10958 error ("storage class %<register%> invalid for function %qs", name);
10959 else if (thread_p)
10961 if (declspecs->gnu_thread_keyword_p)
10962 error ("storage class %<__thread%> invalid for function %qs",
10963 name);
10964 else
10965 error ("storage class %<thread_local%> invalid for function %qs",
10966 name);
10969 if (virt_specifiers)
10970 error ("virt-specifiers in %qs not allowed outside a class definition", name);
10971 /* Function declaration not at top level.
10972 Storage classes other than `extern' are not allowed
10973 and `extern' makes no difference. */
10974 if (! toplevel_bindings_p ()
10975 && (storage_class == sc_static
10976 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
10977 && pedantic)
10979 if (storage_class == sc_static)
10980 pedwarn (input_location, OPT_Wpedantic,
10981 "%<static%> specified invalid for function %qs "
10982 "declared out of global scope", name);
10983 else
10984 pedwarn (input_location, OPT_Wpedantic,
10985 "%<inline%> specifier invalid for function %qs "
10986 "declared out of global scope", name);
10989 if (ctype == NULL_TREE)
10991 if (virtualp)
10993 error ("virtual non-class function %qs", name);
10994 virtualp = 0;
10996 else if (sfk == sfk_constructor
10997 || sfk == sfk_destructor)
10999 error (funcdef_flag
11000 ? G_("%qs defined in a non-class scope")
11001 : G_("%qs declared in a non-class scope"), name);
11002 sfk = sfk_none;
11006 /* Record whether the function is public. */
11007 publicp = (ctype != NULL_TREE
11008 || storage_class != sc_static);
11010 if (late_return_type_p)
11011 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
11013 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
11014 virtualp, flags, memfn_quals, rqual, raises,
11015 1, friendp,
11016 publicp, inlinep | (2 * constexpr_p),
11017 initialized == SD_DELETED, sfk,
11018 funcdef_flag,
11019 template_count, in_namespace, attrlist,
11020 declarator->id_loc);
11021 if (decl == NULL_TREE)
11022 return error_mark_node;
11024 if (staticp == 1)
11026 int invalid_static = 0;
11028 /* Don't allow a static member function in a class, and forbid
11029 declaring main to be static. */
11030 if (TREE_CODE (type) == METHOD_TYPE)
11032 permerror (input_location, "cannot declare member function %qD to have "
11033 "static linkage", decl);
11034 invalid_static = 1;
11036 else if (current_function_decl)
11038 /* FIXME need arm citation */
11039 error ("cannot declare static function inside another function");
11040 invalid_static = 1;
11043 if (invalid_static)
11045 staticp = 0;
11046 storage_class = sc_none;
11050 else
11052 /* It's a variable. */
11054 /* An uninitialized decl with `extern' is a reference. */
11055 decl = grokvardecl (type, dname, unqualified_id,
11056 declspecs,
11057 initialized,
11058 (type_quals & TYPE_QUAL_CONST) != 0,
11059 template_count,
11060 ctype ? ctype : in_namespace);
11061 if (decl == NULL_TREE)
11062 return error_mark_node;
11064 bad_specifiers (decl, BSP_VAR, virtualp,
11065 memfn_quals != TYPE_UNQUALIFIED,
11066 inlinep, friendp, raises != NULL_TREE);
11068 if (ctype)
11070 DECL_CONTEXT (decl) = ctype;
11071 if (staticp == 1)
11073 permerror (input_location, "%<static%> may not be used when defining "
11074 "(as opposed to declaring) a static data member");
11075 staticp = 0;
11076 storage_class = sc_none;
11078 if (storage_class == sc_register && TREE_STATIC (decl))
11080 error ("static member %qD declared %<register%>", decl);
11081 storage_class = sc_none;
11083 if (storage_class == sc_extern && pedantic)
11085 pedwarn (input_location, OPT_Wpedantic,
11086 "cannot explicitly declare member %q#D to have "
11087 "extern linkage", decl);
11088 storage_class = sc_none;
11091 else if (constexpr_p && DECL_EXTERNAL (decl))
11093 error ("declaration of constexpr variable %qD is not a definition",
11094 decl);
11095 constexpr_p = false;
11099 if (storage_class == sc_extern && initialized && !funcdef_flag)
11101 if (toplevel_bindings_p ())
11103 /* It's common practice (and completely valid) to have a const
11104 be initialized and declared extern. */
11105 if (!(type_quals & TYPE_QUAL_CONST))
11106 warning (0, "%qs initialized and declared %<extern%>", name);
11108 else
11110 error ("%qs has both %<extern%> and initializer", name);
11111 return error_mark_node;
11115 /* Record `register' declaration for warnings on &
11116 and in case doing stupid register allocation. */
11118 if (storage_class == sc_register)
11119 DECL_REGISTER (decl) = 1;
11120 else if (storage_class == sc_extern)
11121 DECL_THIS_EXTERN (decl) = 1;
11122 else if (storage_class == sc_static)
11123 DECL_THIS_STATIC (decl) = 1;
11125 /* Set constexpr flag on vars (functions got it in grokfndecl). */
11126 if (constexpr_p && VAR_P (decl))
11127 DECL_DECLARED_CONSTEXPR_P (decl) = true;
11129 /* Record constancy and volatility on the DECL itself . There's
11130 no need to do this when processing a template; we'll do this
11131 for the instantiated declaration based on the type of DECL. */
11132 if (!processing_template_decl)
11133 cp_apply_type_quals_to_decl (type_quals, decl);
11135 return decl;
11139 /* Subroutine of start_function. Ensure that each of the parameter
11140 types (as listed in PARMS) is complete, as is required for a
11141 function definition. */
11143 static void
11144 require_complete_types_for_parms (tree parms)
11146 for (; parms; parms = DECL_CHAIN (parms))
11148 if (dependent_type_p (TREE_TYPE (parms)))
11149 continue;
11150 if (!VOID_TYPE_P (TREE_TYPE (parms))
11151 && complete_type_or_else (TREE_TYPE (parms), parms))
11153 relayout_decl (parms);
11154 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
11156 else
11157 /* grokparms or complete_type_or_else will have already issued
11158 an error. */
11159 TREE_TYPE (parms) = error_mark_node;
11163 /* Returns nonzero if T is a local variable. */
11166 local_variable_p (const_tree t)
11168 if ((VAR_P (t)
11169 /* A VAR_DECL with a context that is a _TYPE is a static data
11170 member. */
11171 && !TYPE_P (CP_DECL_CONTEXT (t))
11172 /* Any other non-local variable must be at namespace scope. */
11173 && !DECL_NAMESPACE_SCOPE_P (t))
11174 || (TREE_CODE (t) == PARM_DECL))
11175 return 1;
11177 return 0;
11180 /* Like local_variable_p, but suitable for use as a tree-walking
11181 function. */
11183 static tree
11184 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
11185 void * /*data*/)
11187 if (local_variable_p (*tp)
11188 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
11189 return *tp;
11190 else if (TYPE_P (*tp))
11191 *walk_subtrees = 0;
11193 return NULL_TREE;
11196 /* Check that ARG, which is a default-argument expression for a
11197 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
11198 something goes wrong. DECL may also be a _TYPE node, rather than a
11199 DECL, if there is no DECL available. */
11201 tree
11202 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
11204 tree var;
11205 tree decl_type;
11207 if (TREE_CODE (arg) == DEFAULT_ARG)
11208 /* We get a DEFAULT_ARG when looking at an in-class declaration
11209 with a default argument. Ignore the argument for now; we'll
11210 deal with it after the class is complete. */
11211 return arg;
11213 if (TYPE_P (decl))
11215 decl_type = decl;
11216 decl = NULL_TREE;
11218 else
11219 decl_type = TREE_TYPE (decl);
11221 if (arg == error_mark_node
11222 || decl == error_mark_node
11223 || TREE_TYPE (arg) == error_mark_node
11224 || decl_type == error_mark_node)
11225 /* Something already went wrong. There's no need to check
11226 further. */
11227 return error_mark_node;
11229 /* [dcl.fct.default]
11231 A default argument expression is implicitly converted to the
11232 parameter type. */
11233 ++cp_unevaluated_operand;
11234 perform_implicit_conversion_flags (decl_type, arg, complain,
11235 LOOKUP_IMPLICIT);
11236 --cp_unevaluated_operand;
11238 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
11239 the call sites. */
11240 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
11241 && null_ptr_cst_p (arg))
11242 return nullptr_node;
11244 /* [dcl.fct.default]
11246 Local variables shall not be used in default argument
11247 expressions.
11249 The keyword `this' shall not be used in a default argument of a
11250 member function. */
11251 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
11252 if (var)
11254 if (complain & tf_warning_or_error)
11256 if (DECL_NAME (var) == this_identifier)
11257 permerror (input_location, "default argument %qE uses %qD",
11258 arg, var);
11259 else
11260 error ("default argument %qE uses local variable %qD", arg, var);
11262 return error_mark_node;
11265 /* All is well. */
11266 return arg;
11269 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
11271 static tree
11272 type_is_deprecated (tree type)
11274 enum tree_code code;
11275 if (TREE_DEPRECATED (type))
11276 return type;
11277 if (TYPE_NAME (type)
11278 && TREE_DEPRECATED (TYPE_NAME (type)))
11279 return type;
11281 /* Do warn about using typedefs to a deprecated class. */
11282 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
11283 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
11285 code = TREE_CODE (type);
11287 if (code == POINTER_TYPE || code == REFERENCE_TYPE
11288 || code == OFFSET_TYPE || code == FUNCTION_TYPE
11289 || code == METHOD_TYPE || code == ARRAY_TYPE)
11290 return type_is_deprecated (TREE_TYPE (type));
11292 if (TYPE_PTRMEMFUNC_P (type))
11293 return type_is_deprecated
11294 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
11296 return NULL_TREE;
11299 /* Decode the list of parameter types for a function type.
11300 Given the list of things declared inside the parens,
11301 return a list of types.
11303 If this parameter does not end with an ellipsis, we append
11304 void_list_node.
11306 *PARMS is set to the chain of PARM_DECLs created. */
11308 static tree
11309 grokparms (tree parmlist, tree *parms)
11311 tree result = NULL_TREE;
11312 tree decls = NULL_TREE;
11313 tree parm;
11314 int any_error = 0;
11316 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
11318 tree type = NULL_TREE;
11319 tree init = TREE_PURPOSE (parm);
11320 tree decl = TREE_VALUE (parm);
11321 const char *errmsg;
11323 if (parm == void_list_node)
11324 break;
11326 if (! decl || TREE_TYPE (decl) == error_mark_node)
11327 continue;
11329 type = TREE_TYPE (decl);
11330 if (VOID_TYPE_P (type))
11332 if (same_type_p (type, void_type_node)
11333 && !init
11334 && !DECL_NAME (decl) && !result
11335 && TREE_CHAIN (parm) == void_list_node)
11336 /* DR 577: A parameter list consisting of a single
11337 unnamed parameter of non-dependent type 'void'. */
11338 break;
11339 else if (cv_qualified_p (type))
11340 error_at (DECL_SOURCE_LOCATION (decl),
11341 "invalid use of cv-qualified type %qT in "
11342 "parameter declaration", type);
11343 else
11344 error_at (DECL_SOURCE_LOCATION (decl),
11345 "invalid use of type %<void%> in parameter "
11346 "declaration");
11347 /* It's not a good idea to actually create parameters of
11348 type `void'; other parts of the compiler assume that a
11349 void type terminates the parameter list. */
11350 type = error_mark_node;
11351 TREE_TYPE (decl) = error_mark_node;
11354 if (type != error_mark_node
11355 && TYPE_FOR_JAVA (type)
11356 && MAYBE_CLASS_TYPE_P (type))
11358 error ("parameter %qD has Java class type", decl);
11359 type = error_mark_node;
11360 TREE_TYPE (decl) = error_mark_node;
11361 init = NULL_TREE;
11364 if (type != error_mark_node
11365 && (errmsg = targetm.invalid_parameter_type (type)))
11367 error (errmsg);
11368 type = error_mark_node;
11369 TREE_TYPE (decl) = error_mark_node;
11372 if (type != error_mark_node)
11374 if (deprecated_state != DEPRECATED_SUPPRESS)
11376 tree deptype = type_is_deprecated (type);
11377 if (deptype)
11378 warn_deprecated_use (deptype, NULL_TREE);
11381 /* Top-level qualifiers on the parameters are
11382 ignored for function types. */
11383 type = cp_build_qualified_type (type, 0);
11384 if (TREE_CODE (type) == METHOD_TYPE)
11386 error ("parameter %qD invalidly declared method type", decl);
11387 type = build_pointer_type (type);
11388 TREE_TYPE (decl) = type;
11390 else if (abstract_virtuals_error (decl, type))
11391 any_error = 1; /* Seems like a good idea. */
11392 else if (POINTER_TYPE_P (type))
11394 /* [dcl.fct]/6, parameter types cannot contain pointers
11395 (references) to arrays of unknown bound. */
11396 tree t = TREE_TYPE (type);
11397 int ptr = TYPE_PTR_P (type);
11399 while (1)
11401 if (TYPE_PTR_P (t))
11402 ptr = 1;
11403 else if (TREE_CODE (t) != ARRAY_TYPE)
11404 break;
11405 else if (!TYPE_DOMAIN (t))
11406 break;
11407 t = TREE_TYPE (t);
11409 if (TREE_CODE (t) == ARRAY_TYPE)
11410 error (ptr
11411 ? G_("parameter %qD includes pointer to array of "
11412 "unknown bound %qT")
11413 : G_("parameter %qD includes reference to array of "
11414 "unknown bound %qT"),
11415 decl, t);
11418 if (any_error)
11419 init = NULL_TREE;
11420 else if (init && !processing_template_decl)
11421 init = check_default_argument (decl, init, tf_warning_or_error);
11424 DECL_CHAIN (decl) = decls;
11425 decls = decl;
11426 result = tree_cons (init, type, result);
11428 decls = nreverse (decls);
11429 result = nreverse (result);
11430 if (parm)
11431 result = chainon (result, void_list_node);
11432 *parms = decls;
11434 return result;
11438 /* D is a constructor or overloaded `operator='.
11440 Let T be the class in which D is declared. Then, this function
11441 returns:
11443 -1 if D's is an ill-formed constructor or copy assignment operator
11444 whose first parameter is of type `T'.
11445 0 if D is not a copy constructor or copy assignment
11446 operator.
11447 1 if D is a copy constructor or copy assignment operator whose
11448 first parameter is a reference to non-const qualified T.
11449 2 if D is a copy constructor or copy assignment operator whose
11450 first parameter is a reference to const qualified T.
11452 This function can be used as a predicate. Positive values indicate
11453 a copy constructor and nonzero values indicate a copy assignment
11454 operator. */
11457 copy_fn_p (const_tree d)
11459 tree args;
11460 tree arg_type;
11461 int result = 1;
11463 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11465 if (TREE_CODE (d) == TEMPLATE_DECL
11466 || (DECL_TEMPLATE_INFO (d)
11467 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11468 /* Instantiations of template member functions are never copy
11469 functions. Note that member functions of templated classes are
11470 represented as template functions internally, and we must
11471 accept those as copy functions. */
11472 return 0;
11474 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11475 if (!args)
11476 return 0;
11478 arg_type = TREE_VALUE (args);
11479 if (arg_type == error_mark_node)
11480 return 0;
11482 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11484 /* Pass by value copy assignment operator. */
11485 result = -1;
11487 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11488 && !TYPE_REF_IS_RVALUE (arg_type)
11489 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11491 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11492 result = 2;
11494 else
11495 return 0;
11497 args = TREE_CHAIN (args);
11499 if (args && args != void_list_node && !TREE_PURPOSE (args))
11500 /* There are more non-optional args. */
11501 return 0;
11503 return result;
11506 /* D is a constructor or overloaded `operator='.
11508 Let T be the class in which D is declared. Then, this function
11509 returns true when D is a move constructor or move assignment
11510 operator, false otherwise. */
11512 bool
11513 move_fn_p (const_tree d)
11515 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11517 if (cxx_dialect == cxx98)
11518 /* There are no move constructors if we are in C++98 mode. */
11519 return false;
11521 if (TREE_CODE (d) == TEMPLATE_DECL
11522 || (DECL_TEMPLATE_INFO (d)
11523 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11524 /* Instantiations of template member functions are never move
11525 functions. Note that member functions of templated classes are
11526 represented as template functions internally, and we must
11527 accept those as move functions. */
11528 return 0;
11530 return move_signature_fn_p (d);
11533 /* D is a constructor or overloaded `operator='.
11535 Then, this function returns true when D has the same signature as a move
11536 constructor or move assignment operator (because either it is such a
11537 ctor/op= or it is a template specialization with the same signature),
11538 false otherwise. */
11540 bool
11541 move_signature_fn_p (const_tree d)
11543 tree args;
11544 tree arg_type;
11545 bool result = false;
11547 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11548 if (!args)
11549 return 0;
11551 arg_type = TREE_VALUE (args);
11552 if (arg_type == error_mark_node)
11553 return 0;
11555 if (TREE_CODE (arg_type) == REFERENCE_TYPE
11556 && TYPE_REF_IS_RVALUE (arg_type)
11557 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11558 DECL_CONTEXT (d)))
11559 result = true;
11561 args = TREE_CHAIN (args);
11563 if (args && args != void_list_node && !TREE_PURPOSE (args))
11564 /* There are more non-optional args. */
11565 return false;
11567 return result;
11570 /* Remember any special properties of member function DECL. */
11572 void
11573 grok_special_member_properties (tree decl)
11575 tree class_type;
11577 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11578 return;
11580 class_type = DECL_CONTEXT (decl);
11581 if (DECL_CONSTRUCTOR_P (decl))
11583 int ctor = copy_fn_p (decl);
11585 if (!DECL_ARTIFICIAL (decl))
11586 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11588 if (ctor > 0)
11590 /* [class.copy]
11592 A non-template constructor for class X is a copy
11593 constructor if its first parameter is of type X&, const
11594 X&, volatile X& or const volatile X&, and either there
11595 are no other parameters or else all other parameters have
11596 default arguments. */
11597 TYPE_HAS_COPY_CTOR (class_type) = 1;
11598 if (user_provided_p (decl))
11599 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
11600 if (ctor > 1)
11601 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
11603 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
11604 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
11605 else if (move_fn_p (decl) && user_provided_p (decl))
11606 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
11607 else if (is_list_ctor (decl))
11608 TYPE_HAS_LIST_CTOR (class_type) = 1;
11610 if (DECL_DECLARED_CONSTEXPR_P (decl)
11611 && !copy_fn_p (decl) && !move_fn_p (decl))
11612 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
11614 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
11616 /* [class.copy]
11618 A non-template assignment operator for class X is a copy
11619 assignment operator if its parameter is of type X, X&, const
11620 X&, volatile X& or const volatile X&. */
11622 int assop = copy_fn_p (decl);
11624 if (assop)
11626 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
11627 if (user_provided_p (decl))
11628 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
11629 if (assop != 1)
11630 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
11632 else if (move_fn_p (decl) && user_provided_p (decl))
11633 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
11635 /* Destructors are handled in check_methods. */
11638 /* Check a constructor DECL has the correct form. Complains
11639 if the class has a constructor of the form X(X). */
11642 grok_ctor_properties (const_tree ctype, const_tree decl)
11644 int ctor_parm = copy_fn_p (decl);
11646 if (ctor_parm < 0)
11648 /* [class.copy]
11650 A declaration of a constructor for a class X is ill-formed if
11651 its first parameter is of type (optionally cv-qualified) X
11652 and either there are no other parameters or else all other
11653 parameters have default arguments.
11655 We *don't* complain about member template instantiations that
11656 have this form, though; they can occur as we try to decide
11657 what constructor to use during overload resolution. Since
11658 overload resolution will never prefer such a constructor to
11659 the non-template copy constructor (which is either explicitly
11660 or implicitly defined), there's no need to worry about their
11661 existence. Theoretically, they should never even be
11662 instantiated, but that's hard to forestall. */
11663 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11664 ctype, ctype);
11665 return 0;
11668 return 1;
11671 /* An operator with this code is unary, but can also be binary. */
11673 static int
11674 ambi_op_p (enum tree_code code)
11676 return (code == INDIRECT_REF
11677 || code == ADDR_EXPR
11678 || code == UNARY_PLUS_EXPR
11679 || code == NEGATE_EXPR
11680 || code == PREINCREMENT_EXPR
11681 || code == PREDECREMENT_EXPR);
11684 /* An operator with this name can only be unary. */
11686 static int
11687 unary_op_p (enum tree_code code)
11689 return (code == TRUTH_NOT_EXPR
11690 || code == BIT_NOT_EXPR
11691 || code == COMPONENT_REF
11692 || code == TYPE_EXPR);
11695 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
11696 errors are issued for invalid declarations. */
11698 bool
11699 grok_op_properties (tree decl, bool complain)
11701 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11702 tree argtype;
11703 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11704 tree name = DECL_NAME (decl);
11705 enum tree_code operator_code;
11706 int arity;
11707 bool ellipsis_p;
11708 tree class_type;
11710 /* Count the number of arguments and check for ellipsis. */
11711 for (argtype = argtypes, arity = 0;
11712 argtype && argtype != void_list_node;
11713 argtype = TREE_CHAIN (argtype))
11714 ++arity;
11715 ellipsis_p = !argtype;
11717 class_type = DECL_CONTEXT (decl);
11718 if (class_type && !CLASS_TYPE_P (class_type))
11719 class_type = NULL_TREE;
11721 if (DECL_CONV_FN_P (decl))
11722 operator_code = TYPE_EXPR;
11723 else
11726 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
11727 if (ansi_opname (CODE) == name) \
11729 operator_code = (CODE); \
11730 break; \
11732 else if (ansi_assopname (CODE) == name) \
11734 operator_code = (CODE); \
11735 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
11736 break; \
11739 #include "operators.def"
11740 #undef DEF_OPERATOR
11742 gcc_unreachable ();
11744 while (0);
11745 gcc_assert (operator_code != MAX_TREE_CODES);
11746 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11748 if (class_type)
11749 switch (operator_code)
11751 case NEW_EXPR:
11752 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11753 break;
11755 case DELETE_EXPR:
11756 TYPE_GETS_DELETE (class_type) |= 1;
11757 break;
11759 case VEC_NEW_EXPR:
11760 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11761 break;
11763 case VEC_DELETE_EXPR:
11764 TYPE_GETS_DELETE (class_type) |= 2;
11765 break;
11767 default:
11768 break;
11771 /* [basic.std.dynamic.allocation]/1:
11773 A program is ill-formed if an allocation function is declared
11774 in a namespace scope other than global scope or declared static
11775 in global scope.
11777 The same also holds true for deallocation functions. */
11778 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11779 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11781 if (DECL_NAMESPACE_SCOPE_P (decl))
11783 if (CP_DECL_CONTEXT (decl) != global_namespace)
11785 error ("%qD may not be declared within a namespace", decl);
11786 return false;
11788 else if (!TREE_PUBLIC (decl))
11790 error ("%qD may not be declared as static", decl);
11791 return false;
11796 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11798 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11799 DECL_IS_OPERATOR_NEW (decl) = 1;
11801 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11802 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11803 else
11805 /* An operator function must either be a non-static member function
11806 or have at least one parameter of a class, a reference to a class,
11807 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11808 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11810 if (operator_code == TYPE_EXPR
11811 || operator_code == CALL_EXPR
11812 || operator_code == COMPONENT_REF
11813 || operator_code == ARRAY_REF
11814 || operator_code == NOP_EXPR)
11816 error ("%qD must be a nonstatic member function", decl);
11817 return false;
11819 else
11821 tree p;
11823 if (DECL_STATIC_FUNCTION_P (decl))
11825 error ("%qD must be either a non-static member "
11826 "function or a non-member function", decl);
11827 return false;
11830 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11832 tree arg = non_reference (TREE_VALUE (p));
11833 if (arg == error_mark_node)
11834 return false;
11836 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11837 because these checks are performed even on
11838 template functions. */
11839 if (MAYBE_CLASS_TYPE_P (arg)
11840 || TREE_CODE (arg) == ENUMERAL_TYPE)
11841 break;
11844 if (!p || p == void_list_node)
11846 if (complain)
11847 error ("%qD must have an argument of class or "
11848 "enumerated type", decl);
11849 return false;
11854 /* There are no restrictions on the arguments to an overloaded
11855 "operator ()". */
11856 if (operator_code == CALL_EXPR)
11857 return true;
11859 /* Warn about conversion operators that will never be used. */
11860 if (IDENTIFIER_TYPENAME_P (name)
11861 && ! DECL_TEMPLATE_INFO (decl)
11862 && warn_conversion
11863 /* Warn only declaring the function; there is no need to
11864 warn again about out-of-class definitions. */
11865 && class_type == current_class_type)
11867 tree t = TREE_TYPE (name);
11868 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11870 if (ref)
11871 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11873 if (VOID_TYPE_P (t))
11874 warning (OPT_Wconversion,
11876 ? G_("conversion to a reference to void "
11877 "will never use a type conversion operator")
11878 : G_("conversion to void "
11879 "will never use a type conversion operator"));
11880 else if (class_type)
11882 if (t == class_type)
11883 warning (OPT_Wconversion,
11885 ? G_("conversion to a reference to the same type "
11886 "will never use a type conversion operator")
11887 : G_("conversion to the same type "
11888 "will never use a type conversion operator"));
11889 /* Don't force t to be complete here. */
11890 else if (MAYBE_CLASS_TYPE_P (t)
11891 && COMPLETE_TYPE_P (t)
11892 && DERIVED_FROM_P (t, class_type))
11893 warning (OPT_Wconversion,
11895 ? G_("conversion to a reference to a base class "
11896 "will never use a type conversion operator")
11897 : G_("conversion to a base class "
11898 "will never use a type conversion operator"));
11903 if (operator_code == COND_EXPR)
11905 /* 13.4.0.3 */
11906 error ("ISO C++ prohibits overloading operator ?:");
11907 return false;
11909 else if (ellipsis_p)
11911 error ("%qD must not have variable number of arguments", decl);
11912 return false;
11914 else if (ambi_op_p (operator_code))
11916 if (arity == 1)
11917 /* We pick the one-argument operator codes by default, so
11918 we don't have to change anything. */
11920 else if (arity == 2)
11922 /* If we thought this was a unary operator, we now know
11923 it to be a binary operator. */
11924 switch (operator_code)
11926 case INDIRECT_REF:
11927 operator_code = MULT_EXPR;
11928 break;
11930 case ADDR_EXPR:
11931 operator_code = BIT_AND_EXPR;
11932 break;
11934 case UNARY_PLUS_EXPR:
11935 operator_code = PLUS_EXPR;
11936 break;
11938 case NEGATE_EXPR:
11939 operator_code = MINUS_EXPR;
11940 break;
11942 case PREINCREMENT_EXPR:
11943 operator_code = POSTINCREMENT_EXPR;
11944 break;
11946 case PREDECREMENT_EXPR:
11947 operator_code = POSTDECREMENT_EXPR;
11948 break;
11950 default:
11951 gcc_unreachable ();
11954 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11956 if ((operator_code == POSTINCREMENT_EXPR
11957 || operator_code == POSTDECREMENT_EXPR)
11958 && ! processing_template_decl
11959 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11961 if (methodp)
11962 error ("postfix %qD must take %<int%> as its argument",
11963 decl);
11964 else
11965 error ("postfix %qD must take %<int%> as its second "
11966 "argument", decl);
11967 return false;
11970 else
11972 if (methodp)
11973 error ("%qD must take either zero or one argument", decl);
11974 else
11975 error ("%qD must take either one or two arguments", decl);
11976 return false;
11979 /* More Effective C++ rule 6. */
11980 if (warn_ecpp
11981 && (operator_code == POSTINCREMENT_EXPR
11982 || operator_code == POSTDECREMENT_EXPR
11983 || operator_code == PREINCREMENT_EXPR
11984 || operator_code == PREDECREMENT_EXPR))
11986 tree arg = TREE_VALUE (argtypes);
11987 tree ret = TREE_TYPE (TREE_TYPE (decl));
11988 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11989 arg = TREE_TYPE (arg);
11990 arg = TYPE_MAIN_VARIANT (arg);
11991 if (operator_code == PREINCREMENT_EXPR
11992 || operator_code == PREDECREMENT_EXPR)
11994 if (TREE_CODE (ret) != REFERENCE_TYPE
11995 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11996 arg))
11997 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11998 build_reference_type (arg));
12000 else
12002 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12003 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
12007 else if (unary_op_p (operator_code))
12009 if (arity != 1)
12011 if (methodp)
12012 error ("%qD must take %<void%>", decl);
12013 else
12014 error ("%qD must take exactly one argument", decl);
12015 return false;
12018 else /* if (binary_op_p (operator_code)) */
12020 if (arity != 2)
12022 if (methodp)
12023 error ("%qD must take exactly one argument", decl);
12024 else
12025 error ("%qD must take exactly two arguments", decl);
12026 return false;
12029 /* More Effective C++ rule 7. */
12030 if (warn_ecpp
12031 && (operator_code == TRUTH_ANDIF_EXPR
12032 || operator_code == TRUTH_ORIF_EXPR
12033 || operator_code == COMPOUND_EXPR))
12034 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
12035 decl);
12038 /* Effective C++ rule 23. */
12039 if (warn_ecpp
12040 && arity == 2
12041 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
12042 && (operator_code == PLUS_EXPR
12043 || operator_code == MINUS_EXPR
12044 || operator_code == TRUNC_DIV_EXPR
12045 || operator_code == MULT_EXPR
12046 || operator_code == TRUNC_MOD_EXPR)
12047 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12048 warning (OPT_Weffc__, "%qD should return by value", decl);
12050 /* [over.oper]/8 */
12051 for (; argtypes && argtypes != void_list_node;
12052 argtypes = TREE_CHAIN (argtypes))
12053 if (TREE_PURPOSE (argtypes))
12055 TREE_PURPOSE (argtypes) = NULL_TREE;
12056 if (operator_code == POSTINCREMENT_EXPR
12057 || operator_code == POSTDECREMENT_EXPR)
12059 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments",
12060 decl);
12062 else
12064 error ("%qD cannot have default arguments", decl);
12065 return false;
12069 return true;
12072 /* Return a string giving the keyword associate with CODE. */
12074 static const char *
12075 tag_name (enum tag_types code)
12077 switch (code)
12079 case record_type:
12080 return "struct";
12081 case class_type:
12082 return "class";
12083 case union_type:
12084 return "union";
12085 case enum_type:
12086 return "enum";
12087 case typename_type:
12088 return "typename";
12089 default:
12090 gcc_unreachable ();
12094 /* Name lookup in an elaborated-type-specifier (after the keyword
12095 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
12096 elaborated-type-specifier is invalid, issue a diagnostic and return
12097 error_mark_node; otherwise, return the *_TYPE to which it referred.
12098 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
12100 tree
12101 check_elaborated_type_specifier (enum tag_types tag_code,
12102 tree decl,
12103 bool allow_template_p)
12105 tree type;
12107 /* In the case of:
12109 struct S { struct S *p; };
12111 name lookup will find the TYPE_DECL for the implicit "S::S"
12112 typedef. Adjust for that here. */
12113 if (DECL_SELF_REFERENCE_P (decl))
12114 decl = TYPE_NAME (TREE_TYPE (decl));
12116 type = TREE_TYPE (decl);
12118 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
12119 is false for this case as well. */
12120 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12122 error ("using template type parameter %qT after %qs",
12123 type, tag_name (tag_code));
12124 return error_mark_node;
12126 /* Accept template template parameters. */
12127 else if (allow_template_p
12128 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
12129 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
12131 /* [dcl.type.elab]
12133 If the identifier resolves to a typedef-name or the
12134 simple-template-id resolves to an alias template
12135 specialization, the elaborated-type-specifier is ill-formed.
12137 In other words, the only legitimate declaration to use in the
12138 elaborated type specifier is the implicit typedef created when
12139 the type is declared. */
12140 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
12141 && !DECL_SELF_REFERENCE_P (decl)
12142 && tag_code != typename_type)
12144 if (alias_template_specialization_p (type))
12145 error ("using alias template specialization %qT after %qs",
12146 type, tag_name (tag_code));
12147 else
12148 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
12149 inform (DECL_SOURCE_LOCATION (decl),
12150 "%qD has a previous declaration here", decl);
12151 return error_mark_node;
12153 else if (TREE_CODE (type) != RECORD_TYPE
12154 && TREE_CODE (type) != UNION_TYPE
12155 && tag_code != enum_type
12156 && tag_code != typename_type)
12158 error ("%qT referred to as %qs", type, tag_name (tag_code));
12159 inform (input_location, "%q+T has a previous declaration here", type);
12160 return error_mark_node;
12162 else if (TREE_CODE (type) != ENUMERAL_TYPE
12163 && tag_code == enum_type)
12165 error ("%qT referred to as enum", type);
12166 inform (input_location, "%q+T has a previous declaration here", type);
12167 return error_mark_node;
12169 else if (!allow_template_p
12170 && TREE_CODE (type) == RECORD_TYPE
12171 && CLASSTYPE_IS_TEMPLATE (type))
12173 /* If a class template appears as elaborated type specifier
12174 without a template header such as:
12176 template <class T> class C {};
12177 void f(class C); // No template header here
12179 then the required template argument is missing. */
12180 error ("template argument required for %<%s %T%>",
12181 tag_name (tag_code),
12182 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
12183 return error_mark_node;
12186 return type;
12189 /* Lookup NAME in elaborate type specifier in scope according to
12190 SCOPE and issue diagnostics if necessary.
12191 Return *_TYPE node upon success, NULL_TREE when the NAME is not
12192 found, and ERROR_MARK_NODE for type error. */
12194 static tree
12195 lookup_and_check_tag (enum tag_types tag_code, tree name,
12196 tag_scope scope, bool template_header_p)
12198 tree t;
12199 tree decl;
12200 if (scope == ts_global)
12202 /* First try ordinary name lookup, ignoring hidden class name
12203 injected via friend declaration. */
12204 decl = lookup_name_prefer_type (name, 2);
12205 decl = strip_using_decl (decl);
12206 /* If that fails, the name will be placed in the smallest
12207 non-class, non-function-prototype scope according to 3.3.1/5.
12208 We may already have a hidden name declared as friend in this
12209 scope. So lookup again but not ignoring hidden names.
12210 If we find one, that name will be made visible rather than
12211 creating a new tag. */
12212 if (!decl)
12213 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
12215 else
12216 decl = lookup_type_scope (name, scope);
12218 if (decl
12219 && (DECL_CLASS_TEMPLATE_P (decl)
12220 /* If scope is ts_current we're defining a class, so ignore a
12221 template template parameter. */
12222 || (scope != ts_current
12223 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
12224 decl = DECL_TEMPLATE_RESULT (decl);
12226 if (decl && TREE_CODE (decl) == TYPE_DECL)
12228 /* Look for invalid nested type:
12229 class C {
12230 class C {};
12231 }; */
12232 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
12234 error ("%qD has the same name as the class in which it is "
12235 "declared",
12236 decl);
12237 return error_mark_node;
12240 /* Two cases we need to consider when deciding if a class
12241 template is allowed as an elaborated type specifier:
12242 1. It is a self reference to its own class.
12243 2. It comes with a template header.
12245 For example:
12247 template <class T> class C {
12248 class C *c1; // DECL_SELF_REFERENCE_P is true
12249 class D;
12251 template <class U> class C; // template_header_p is true
12252 template <class T> class C<T>::D {
12253 class C *c2; // DECL_SELF_REFERENCE_P is true
12254 }; */
12256 t = check_elaborated_type_specifier (tag_code,
12257 decl,
12258 template_header_p
12259 | DECL_SELF_REFERENCE_P (decl));
12260 return t;
12262 else if (decl && TREE_CODE (decl) == TREE_LIST)
12264 error ("reference to %qD is ambiguous", name);
12265 print_candidates (decl);
12266 return error_mark_node;
12268 else
12269 return NULL_TREE;
12272 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
12273 Define the tag as a forward-reference if it is not defined.
12275 If a declaration is given, process it here, and report an error if
12276 multiple declarations are not identical.
12278 SCOPE is TS_CURRENT when this is also a definition. Only look in
12279 the current frame for the name (since C++ allows new names in any
12280 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
12281 declaration. Only look beginning from the current scope outward up
12282 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
12284 TEMPLATE_HEADER_P is true when this declaration is preceded by
12285 a set of template parameters. */
12287 static tree
12288 xref_tag_1 (enum tag_types tag_code, tree name,
12289 tag_scope orig_scope, bool template_header_p)
12291 enum tree_code code;
12292 tree t;
12293 tree context = NULL_TREE;
12294 tag_scope scope;
12296 gcc_assert (identifier_p (name));
12298 switch (tag_code)
12300 case record_type:
12301 case class_type:
12302 code = RECORD_TYPE;
12303 break;
12304 case union_type:
12305 code = UNION_TYPE;
12306 break;
12307 case enum_type:
12308 code = ENUMERAL_TYPE;
12309 break;
12310 default:
12311 gcc_unreachable ();
12314 if (orig_scope == ts_lambda)
12315 scope = ts_current;
12316 else
12317 scope = orig_scope;
12319 /* In case of anonymous name, xref_tag is only called to
12320 make type node and push name. Name lookup is not required. */
12321 if (anon_aggrname_p (name))
12322 t = NULL_TREE;
12323 else
12324 t = lookup_and_check_tag (tag_code, name,
12325 scope, template_header_p);
12327 if (t == error_mark_node)
12328 return error_mark_node;
12330 if (scope != ts_current && t && current_class_type
12331 && template_class_depth (current_class_type)
12332 && template_header_p)
12334 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
12335 return t;
12337 /* Since SCOPE is not TS_CURRENT, we are not looking at a
12338 definition of this tag. Since, in addition, we are currently
12339 processing a (member) template declaration of a template
12340 class, we must be very careful; consider:
12342 template <class X>
12343 struct S1
12345 template <class U>
12346 struct S2
12347 { template <class V>
12348 friend struct S1; };
12350 Here, the S2::S1 declaration should not be confused with the
12351 outer declaration. In particular, the inner version should
12352 have a template parameter of level 2, not level 1. This
12353 would be particularly important if the member declaration
12354 were instead:
12356 template <class V = U> friend struct S1;
12358 say, when we should tsubst into `U' when instantiating
12359 S2. On the other hand, when presented with:
12361 template <class T>
12362 struct S1 {
12363 template <class U>
12364 struct S2 {};
12365 template <class U>
12366 friend struct S2;
12369 we must find the inner binding eventually. We
12370 accomplish this by making sure that the new type we
12371 create to represent this declaration has the right
12372 TYPE_CONTEXT. */
12373 context = TYPE_CONTEXT (t);
12374 t = NULL_TREE;
12377 if (! t)
12379 /* If no such tag is yet defined, create a forward-reference node
12380 and record it as the "definition".
12381 When a real declaration of this type is found,
12382 the forward-reference will be altered into a real type. */
12383 if (code == ENUMERAL_TYPE)
12385 error ("use of enum %q#D without previous declaration", name);
12386 return error_mark_node;
12388 else
12390 t = make_class_type (code);
12391 TYPE_CONTEXT (t) = context;
12392 if (orig_scope == ts_lambda)
12393 /* Remember that we're declaring a lambda to avoid bogus errors
12394 in push_template_decl. */
12395 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
12396 t = pushtag (name, t, scope);
12399 else
12401 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
12403 if (!redeclare_class_template (t, current_template_parms))
12404 return error_mark_node;
12406 else if (!processing_template_decl
12407 && CLASS_TYPE_P (t)
12408 && CLASSTYPE_IS_TEMPLATE (t))
12410 error ("redeclaration of %qT as a non-template", t);
12411 error ("previous declaration %q+D", t);
12412 return error_mark_node;
12415 /* Make injected friend class visible. */
12416 if (scope != ts_within_enclosing_non_class
12417 && hidden_name_p (TYPE_NAME (t)))
12419 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12420 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12422 if (TYPE_TEMPLATE_INFO (t))
12424 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12425 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12430 return t;
12433 /* Wrapper for xref_tag_1. */
12435 tree
12436 xref_tag (enum tag_types tag_code, tree name,
12437 tag_scope scope, bool template_header_p)
12439 tree ret;
12440 bool subtime;
12441 subtime = timevar_cond_start (TV_NAME_LOOKUP);
12442 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12443 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12444 return ret;
12448 tree
12449 xref_tag_from_type (tree old, tree id, tag_scope scope)
12451 enum tag_types tag_kind;
12453 if (TREE_CODE (old) == RECORD_TYPE)
12454 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12455 else
12456 tag_kind = union_type;
12458 if (id == NULL_TREE)
12459 id = TYPE_IDENTIFIER (old);
12461 return xref_tag (tag_kind, id, scope, false);
12464 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12465 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
12466 access_* node, and the TREE_VALUE is the type of the base-class.
12467 Non-NULL TREE_TYPE indicates virtual inheritance.
12469 Returns true if the binfo hierarchy was successfully created,
12470 false if an error was detected. */
12472 bool
12473 xref_basetypes (tree ref, tree base_list)
12475 tree *basep;
12476 tree binfo, base_binfo;
12477 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
12478 unsigned max_bases = 0; /* Maximum direct bases. */
12479 int i;
12480 tree default_access;
12481 tree igo_prev; /* Track Inheritance Graph Order. */
12483 if (ref == error_mark_node)
12484 return false;
12486 /* The base of a derived class is private by default, all others are
12487 public. */
12488 default_access = (TREE_CODE (ref) == RECORD_TYPE
12489 && CLASSTYPE_DECLARED_CLASS (ref)
12490 ? access_private_node : access_public_node);
12492 /* First, make sure that any templates in base-classes are
12493 instantiated. This ensures that if we call ourselves recursively
12494 we do not get confused about which classes are marked and which
12495 are not. */
12496 basep = &base_list;
12497 while (*basep)
12499 tree basetype = TREE_VALUE (*basep);
12501 /* The dependent_type_p call below should really be dependent_scope_p
12502 so that we give a hard error about using an incomplete type as a
12503 base, but we allow it with a pedwarn for backward
12504 compatibility. */
12505 if (processing_template_decl
12506 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12507 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12508 if (!dependent_type_p (basetype)
12509 && !complete_type_or_else (basetype, NULL))
12510 /* An incomplete type. Remove it from the list. */
12511 *basep = TREE_CHAIN (*basep);
12512 else
12514 max_bases++;
12515 if (TREE_TYPE (*basep))
12516 max_vbases++;
12517 if (CLASS_TYPE_P (basetype))
12518 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
12519 basep = &TREE_CHAIN (*basep);
12523 TYPE_MARKED_P (ref) = 1;
12525 /* The binfo slot should be empty, unless this is an (ill-formed)
12526 redefinition. */
12527 if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12529 error ("redefinition of %q#T", ref);
12530 return false;
12533 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12535 binfo = make_tree_binfo (max_bases);
12537 TYPE_BINFO (ref) = binfo;
12538 BINFO_OFFSET (binfo) = size_zero_node;
12539 BINFO_TYPE (binfo) = ref;
12541 /* Apply base-class info set up to the variants of this type. */
12542 fixup_type_variants (ref);
12544 if (max_bases)
12546 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
12547 /* An aggregate cannot have baseclasses. */
12548 CLASSTYPE_NON_AGGREGATE (ref) = 1;
12550 if (TREE_CODE (ref) == UNION_TYPE)
12552 error ("derived union %qT invalid", ref);
12553 return false;
12557 if (max_bases > 1)
12559 if (TYPE_FOR_JAVA (ref))
12561 error ("Java class %qT cannot have multiple bases", ref);
12562 return false;
12566 if (max_vbases)
12568 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
12570 if (TYPE_FOR_JAVA (ref))
12572 error ("Java class %qT cannot have virtual bases", ref);
12573 return false;
12577 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
12579 tree access = TREE_PURPOSE (base_list);
12580 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
12581 tree basetype = TREE_VALUE (base_list);
12583 if (access == access_default_node)
12584 access = default_access;
12586 if (PACK_EXPANSION_P (basetype))
12587 basetype = PACK_EXPANSION_PATTERN (basetype);
12588 if (TREE_CODE (basetype) == TYPE_DECL)
12589 basetype = TREE_TYPE (basetype);
12590 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
12592 error ("base type %qT fails to be a struct or class type",
12593 basetype);
12594 return false;
12597 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
12598 TYPE_FOR_JAVA (ref) = 1;
12600 base_binfo = NULL_TREE;
12601 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
12603 base_binfo = TYPE_BINFO (basetype);
12604 /* The original basetype could have been a typedef'd type. */
12605 basetype = BINFO_TYPE (base_binfo);
12607 /* Inherit flags from the base. */
12608 TYPE_HAS_NEW_OPERATOR (ref)
12609 |= TYPE_HAS_NEW_OPERATOR (basetype);
12610 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12611 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12612 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12613 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
12614 CLASSTYPE_DIAMOND_SHAPED_P (ref)
12615 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
12616 CLASSTYPE_REPEATED_BASE_P (ref)
12617 |= CLASSTYPE_REPEATED_BASE_P (basetype);
12620 /* We must do this test after we've seen through a typedef
12621 type. */
12622 if (TYPE_MARKED_P (basetype))
12624 if (basetype == ref)
12625 error ("recursive type %qT undefined", basetype);
12626 else
12627 error ("duplicate base type %qT invalid", basetype);
12628 return false;
12631 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
12632 /* Regenerate the pack expansion for the bases. */
12633 basetype = make_pack_expansion (basetype);
12635 TYPE_MARKED_P (basetype) = 1;
12637 base_binfo = copy_binfo (base_binfo, basetype, ref,
12638 &igo_prev, via_virtual);
12639 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
12640 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
12642 BINFO_BASE_APPEND (binfo, base_binfo);
12643 BINFO_BASE_ACCESS_APPEND (binfo, access);
12646 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
12647 /* If we didn't get max_vbases vbases, we must have shared at
12648 least one of them, and are therefore diamond shaped. */
12649 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
12651 /* Unmark all the types. */
12652 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12653 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12654 TYPE_MARKED_P (ref) = 0;
12656 /* Now see if we have a repeated base type. */
12657 if (!CLASSTYPE_REPEATED_BASE_P (ref))
12659 for (base_binfo = binfo; base_binfo;
12660 base_binfo = TREE_CHAIN (base_binfo))
12662 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12664 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
12665 break;
12667 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
12669 for (base_binfo = binfo; base_binfo;
12670 base_binfo = TREE_CHAIN (base_binfo))
12671 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12672 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12673 else
12674 break;
12677 return true;
12681 /* Copies the enum-related properties from type SRC to type DST.
12682 Used with the underlying type of an enum and the enum itself. */
12683 static void
12684 copy_type_enum (tree dst, tree src)
12686 tree t;
12687 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12689 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12690 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12691 TYPE_SIZE (t) = TYPE_SIZE (src);
12692 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12693 SET_TYPE_MODE (dst, TYPE_MODE (src));
12694 TYPE_PRECISION (t) = TYPE_PRECISION (src);
12695 TYPE_ALIGN (t) = TYPE_ALIGN (src);
12696 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12697 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12701 /* Begin compiling the definition of an enumeration type.
12702 NAME is its name,
12704 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12706 UNDERLYING_TYPE is the type that will be used as the storage for
12707 the enumeration type. This should be NULL_TREE if no storage type
12708 was specified.
12710 SCOPED_ENUM_P is true if this is a scoped enumeration type.
12712 if IS_NEW is not NULL, gets TRUE iff a new type is created.
12714 Returns the type object, as yet incomplete.
12715 Also records info about it so that build_enumerator
12716 may be used to declare the individual values as they are read. */
12718 tree
12719 start_enum (tree name, tree enumtype, tree underlying_type,
12720 bool scoped_enum_p, bool *is_new)
12722 tree prevtype = NULL_TREE;
12723 gcc_assert (identifier_p (name));
12725 if (is_new)
12726 *is_new = false;
12727 /* [C++0x dcl.enum]p5:
12729 If not explicitly specified, the underlying type of a scoped
12730 enumeration type is int. */
12731 if (!underlying_type && scoped_enum_p)
12732 underlying_type = integer_type_node;
12734 if (underlying_type)
12735 underlying_type = cv_unqualified (underlying_type);
12737 /* If this is the real definition for a previous forward reference,
12738 fill in the contents in the same object that used to be the
12739 forward reference. */
12740 if (!enumtype)
12741 enumtype = lookup_and_check_tag (enum_type, name,
12742 /*tag_scope=*/ts_current,
12743 /*template_header_p=*/false);
12745 /* In case of a template_decl, the only check that should be deferred
12746 to instantiation time is the comparison of underlying types. */
12747 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12749 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12751 error_at (input_location, "scoped/unscoped mismatch "
12752 "in enum %q#T", enumtype);
12753 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12754 "previous definition here");
12755 enumtype = error_mark_node;
12757 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12759 error_at (input_location, "underlying type mismatch "
12760 "in enum %q#T", enumtype);
12761 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12762 "previous definition here");
12763 enumtype = error_mark_node;
12765 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12766 && !dependent_type_p (underlying_type)
12767 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12768 && !same_type_p (underlying_type,
12769 ENUM_UNDERLYING_TYPE (enumtype)))
12771 error_at (input_location, "different underlying type "
12772 "in enum %q#T", enumtype);
12773 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12774 "previous definition here");
12775 underlying_type = NULL_TREE;
12779 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12780 || processing_template_decl)
12782 /* In case of error, make a dummy enum to allow parsing to
12783 continue. */
12784 if (enumtype == error_mark_node)
12786 name = make_anon_name ();
12787 enumtype = NULL_TREE;
12790 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12791 of an opaque enum, or an opaque enum of an already defined
12792 enumeration (C++0x only).
12793 In any other case, it'll be NULL_TREE. */
12794 if (!enumtype)
12796 if (is_new)
12797 *is_new = true;
12799 prevtype = enumtype;
12801 /* Do not push the decl more than once, unless we need to
12802 compare underlying types at instantiation time */
12803 if (!enumtype
12804 || TREE_CODE (enumtype) != ENUMERAL_TYPE
12805 || (underlying_type
12806 && dependent_type_p (underlying_type))
12807 || (ENUM_UNDERLYING_TYPE (enumtype)
12808 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12810 enumtype = cxx_make_type (ENUMERAL_TYPE);
12811 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12813 else
12814 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12815 false);
12817 if (enumtype == error_mark_node)
12818 return error_mark_node;
12820 /* The enum is considered opaque until the opening '{' of the
12821 enumerator list. */
12822 SET_OPAQUE_ENUM_P (enumtype, true);
12823 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12826 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12828 if (underlying_type)
12830 if (CP_INTEGRAL_TYPE_P (underlying_type))
12832 copy_type_enum (enumtype, underlying_type);
12833 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12835 else if (dependent_type_p (underlying_type))
12836 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12837 else
12838 error ("underlying type %<%T%> of %<%T%> must be an integral type",
12839 underlying_type, enumtype);
12842 /* If into a template class, the returned enum is always the first
12843 declaration (opaque or not) seen. This way all the references to
12844 this type will be to the same declaration. The following ones are used
12845 only to check for definition errors. */
12846 if (prevtype && processing_template_decl)
12847 return prevtype;
12848 else
12849 return enumtype;
12852 /* After processing and defining all the values of an enumeration type,
12853 install their decls in the enumeration type.
12854 ENUMTYPE is the type object. */
12856 void
12857 finish_enum_value_list (tree enumtype)
12859 tree values;
12860 tree underlying_type;
12861 tree decl;
12862 tree value;
12863 tree minnode, maxnode;
12864 tree t;
12866 bool fixed_underlying_type_p
12867 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12869 /* We built up the VALUES in reverse order. */
12870 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12872 /* For an enum defined in a template, just set the type of the values;
12873 all further processing is postponed until the template is
12874 instantiated. We need to set the type so that tsubst of a CONST_DECL
12875 works. */
12876 if (processing_template_decl)
12878 for (values = TYPE_VALUES (enumtype);
12879 values;
12880 values = TREE_CHAIN (values))
12881 TREE_TYPE (TREE_VALUE (values)) = enumtype;
12882 return;
12885 /* Determine the minimum and maximum values of the enumerators. */
12886 if (TYPE_VALUES (enumtype))
12888 minnode = maxnode = NULL_TREE;
12890 for (values = TYPE_VALUES (enumtype);
12891 values;
12892 values = TREE_CHAIN (values))
12894 decl = TREE_VALUE (values);
12896 /* [dcl.enum]: Following the closing brace of an enum-specifier,
12897 each enumerator has the type of its enumeration. Prior to the
12898 closing brace, the type of each enumerator is the type of its
12899 initializing value. */
12900 TREE_TYPE (decl) = enumtype;
12902 /* Update the minimum and maximum values, if appropriate. */
12903 value = DECL_INITIAL (decl);
12904 if (value == error_mark_node)
12905 value = integer_zero_node;
12906 /* Figure out what the minimum and maximum values of the
12907 enumerators are. */
12908 if (!minnode)
12909 minnode = maxnode = value;
12910 else if (tree_int_cst_lt (maxnode, value))
12911 maxnode = value;
12912 else if (tree_int_cst_lt (value, minnode))
12913 minnode = value;
12916 else
12917 /* [dcl.enum]
12919 If the enumerator-list is empty, the underlying type is as if
12920 the enumeration had a single enumerator with value 0. */
12921 minnode = maxnode = integer_zero_node;
12923 if (!fixed_underlying_type_p)
12925 /* Compute the number of bits require to represent all values of the
12926 enumeration. We must do this before the type of MINNODE and
12927 MAXNODE are transformed, since tree_int_cst_min_precision relies
12928 on the TREE_TYPE of the value it is passed. */
12929 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
12930 int lowprec = tree_int_cst_min_precision (minnode, sgn);
12931 int highprec = tree_int_cst_min_precision (maxnode, sgn);
12932 int precision = MAX (lowprec, highprec);
12933 unsigned int itk;
12934 bool use_short_enum;
12936 /* Determine the underlying type of the enumeration.
12938 [dcl.enum]
12940 The underlying type of an enumeration is an integral type that
12941 can represent all the enumerator values defined in the
12942 enumeration. It is implementation-defined which integral type is
12943 used as the underlying type for an enumeration except that the
12944 underlying type shall not be larger than int unless the value of
12945 an enumerator cannot fit in an int or unsigned int.
12947 We use "int" or an "unsigned int" as the underlying type, even if
12948 a smaller integral type would work, unless the user has
12949 explicitly requested that we use the smallest possible type. The
12950 user can request that for all enumerations with a command line
12951 flag, or for just one enumeration with an attribute. */
12953 use_short_enum = flag_short_enums
12954 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12956 for (itk = (use_short_enum ? itk_char : itk_int);
12957 itk != itk_none;
12958 itk++)
12960 underlying_type = integer_types[itk];
12961 if (underlying_type != NULL_TREE
12962 && TYPE_PRECISION (underlying_type) >= precision
12963 && TYPE_SIGN (underlying_type) == sgn)
12964 break;
12966 if (itk == itk_none)
12968 /* DR 377
12970 IF no integral type can represent all the enumerator values, the
12971 enumeration is ill-formed. */
12972 error ("no integral type can represent all of the enumerator values "
12973 "for %qT", enumtype);
12974 precision = TYPE_PRECISION (long_long_integer_type_node);
12975 underlying_type = integer_types[itk_unsigned_long_long];
12978 /* [dcl.enum]
12980 The value of sizeof() applied to an enumeration type, an object
12981 of an enumeration type, or an enumerator, is the value of sizeof()
12982 applied to the underlying type. */
12983 copy_type_enum (enumtype, underlying_type);
12985 /* Compute the minimum and maximum values for the type.
12987 [dcl.enum]
12989 For an enumeration where emin is the smallest enumerator and emax
12990 is the largest, the values of the enumeration are the values of the
12991 underlying type in the range bmin to bmax, where bmin and bmax are,
12992 respectively, the smallest and largest values of the smallest bit-
12993 field that can store emin and emax. */
12995 /* The middle-end currently assumes that types with TYPE_PRECISION
12996 narrower than their underlying type are suitably zero or sign
12997 extended to fill their mode. Similarly, it assumes that the front
12998 end assures that a value of a particular type must be within
12999 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
13001 We used to set these fields based on bmin and bmax, but that led
13002 to invalid assumptions like optimizing away bounds checking. So
13003 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
13004 TYPE_MAX_VALUE to the values for the mode above and only restrict
13005 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
13006 ENUM_UNDERLYING_TYPE (enumtype)
13007 = build_distinct_type_copy (underlying_type);
13008 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
13009 set_min_and_max_values_for_integral_type
13010 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
13012 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
13013 if (flag_strict_enums)
13014 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
13016 else
13017 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
13019 /* Convert each of the enumerators to the type of the underlying
13020 type of the enumeration. */
13021 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13023 location_t saved_location;
13025 decl = TREE_VALUE (values);
13026 saved_location = input_location;
13027 input_location = DECL_SOURCE_LOCATION (decl);
13028 if (fixed_underlying_type_p)
13029 /* If the enumeration type has a fixed underlying type, we
13030 already checked all of the enumerator values. */
13031 value = DECL_INITIAL (decl);
13032 else
13033 value = perform_implicit_conversion (underlying_type,
13034 DECL_INITIAL (decl),
13035 tf_warning_or_error);
13036 input_location = saved_location;
13038 /* Do not clobber shared ints. */
13039 value = copy_node (value);
13041 TREE_TYPE (value) = enumtype;
13042 DECL_INITIAL (decl) = value;
13045 /* Fix up all variant types of this enum type. */
13046 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
13047 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
13049 if (at_class_scope_p ()
13050 && COMPLETE_TYPE_P (current_class_type)
13051 && UNSCOPED_ENUM_P (enumtype))
13052 insert_late_enum_def_into_classtype_sorted_fields (enumtype,
13053 current_class_type);
13055 /* Finish debugging output for this type. */
13056 rest_of_type_compilation (enumtype, namespace_bindings_p ());
13059 /* Finishes the enum type. This is called only the first time an
13060 enumeration is seen, be it opaque or odinary.
13061 ENUMTYPE is the type object. */
13063 void
13064 finish_enum (tree enumtype)
13066 if (processing_template_decl)
13068 if (at_function_scope_p ())
13069 add_stmt (build_min (TAG_DEFN, enumtype));
13070 return;
13073 /* If this is a forward declaration, there should not be any variants,
13074 though we can get a variant in the middle of an enum-specifier with
13075 wacky code like 'enum E { e = sizeof(const E*) };' */
13076 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
13077 && (TYPE_VALUES (enumtype)
13078 || !TYPE_NEXT_VARIANT (enumtype)));
13081 /* Build and install a CONST_DECL for an enumeration constant of the
13082 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
13083 Apply ATTRIBUTES if available. LOC is the location of NAME.
13084 Assignment of sequential values by default is handled here. */
13086 void
13087 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
13088 location_t loc)
13090 tree decl;
13091 tree context;
13092 tree type;
13094 /* scalar_constant_value will pull out this expression, so make sure
13095 it's folded as appropriate. */
13096 if (processing_template_decl)
13097 value = fold_non_dependent_expr (value);
13099 /* If the VALUE was erroneous, pretend it wasn't there; that will
13100 result in the enum being assigned the next value in sequence. */
13101 if (value == error_mark_node)
13102 value = NULL_TREE;
13104 /* Remove no-op casts from the value. */
13105 if (value)
13106 STRIP_TYPE_NOPS (value);
13108 if (! processing_template_decl)
13110 /* Validate and default VALUE. */
13111 if (value != NULL_TREE)
13113 if (!ENUM_UNDERLYING_TYPE (enumtype))
13115 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
13116 value, true);
13117 if (tmp_value)
13118 value = tmp_value;
13120 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
13121 (TREE_TYPE (value)))
13122 value = perform_implicit_conversion_flags
13123 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
13124 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
13126 if (value == error_mark_node)
13127 value = NULL_TREE;
13129 if (value != NULL_TREE)
13131 value = cxx_constant_value (value);
13133 if (TREE_CODE (value) != INTEGER_CST
13134 || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
13136 error ("enumerator value for %qD is not an integer constant",
13137 name);
13138 value = NULL_TREE;
13143 /* Default based on previous value. */
13144 if (value == NULL_TREE)
13146 if (TYPE_VALUES (enumtype))
13148 tree prev_value;
13149 bool overflowed;
13151 /* C++03 7.2/4: If no initializer is specified for the first
13152 enumerator, the type is an unspecified integral
13153 type. Otherwise the type is the same as the type of the
13154 initializing value of the preceding enumerator unless the
13155 incremented value is not representable in that type, in
13156 which case the type is an unspecified integral type
13157 sufficient to contain the incremented value. */
13158 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13159 if (error_operand_p (prev_value))
13160 value = error_mark_node;
13161 else
13163 tree type = TREE_TYPE (prev_value);
13164 signop sgn = TYPE_SIGN (type);
13165 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
13166 &overflowed);
13167 if (!overflowed)
13169 bool pos = !wi::neg_p (wi, sgn);
13170 if (!wi::fits_to_tree_p (wi, type))
13172 unsigned int itk;
13173 for (itk = itk_int; itk != itk_none; itk++)
13175 type = integer_types[itk];
13176 if (type != NULL_TREE
13177 && (pos || !TYPE_UNSIGNED (type))
13178 && wi::fits_to_tree_p (wi, type))
13179 break;
13181 if (type && cxx_dialect < cxx11
13182 && itk > itk_unsigned_long)
13183 pedwarn (input_location, OPT_Wlong_long, pos ? "\
13184 incremented enumerator value is too large for %<unsigned long%>" : "\
13185 incremented enumerator value is too large for %<long%>");
13187 if (type == NULL_TREE)
13188 overflowed = true;
13189 else
13190 value = wide_int_to_tree (type, wi);
13193 if (overflowed)
13195 error ("overflow in enumeration values at %qD", name);
13196 value = error_mark_node;
13200 else
13201 value = integer_zero_node;
13204 /* Remove no-op casts from the value. */
13205 STRIP_TYPE_NOPS (value);
13207 /* If the underlying type of the enum is fixed, check whether
13208 the enumerator values fits in the underlying type. If it
13209 does not fit, the program is ill-formed [C++0x dcl.enum]. */
13210 if (ENUM_UNDERLYING_TYPE (enumtype)
13211 && value
13212 && TREE_CODE (value) == INTEGER_CST)
13214 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
13215 error ("enumerator value %E is outside the range of underlying "
13216 "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
13218 /* Convert the value to the appropriate type. */
13219 value = convert (ENUM_UNDERLYING_TYPE (enumtype), value);
13223 /* C++ associates enums with global, function, or class declarations. */
13224 context = current_scope ();
13226 /* Build the actual enumeration constant. Note that the enumeration
13227 constants have the underlying type of the enum (if it is fixed)
13228 or the type of their initializer (if the underlying type of the
13229 enum is not fixed):
13231 [ C++0x dcl.enum ]
13233 If the underlying type is fixed, the type of each enumerator
13234 prior to the closing brace is the underlying type; if the
13235 initializing value of an enumerator cannot be represented by
13236 the underlying type, the program is ill-formed. If the
13237 underlying type is not fixed, the type of each enumerator is
13238 the type of its initializing value.
13240 If the underlying type is not fixed, it will be computed by
13241 finish_enum and we will reset the type of this enumerator. Of
13242 course, if we're processing a template, there may be no value. */
13243 type = value ? TREE_TYPE (value) : NULL_TREE;
13245 decl = build_decl (loc, CONST_DECL, name, type);
13247 DECL_CONTEXT (decl) = enumtype;
13248 TREE_CONSTANT (decl) = 1;
13249 TREE_READONLY (decl) = 1;
13250 DECL_INITIAL (decl) = value;
13252 if (attributes)
13253 cplus_decl_attributes (&decl, attributes, 0);
13255 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
13256 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13257 on the TYPE_FIELDS list for `S'. (That's so that you can say
13258 things like `S::i' later.) */
13259 finish_member_declaration (decl);
13260 else
13261 pushdecl (decl);
13263 /* Add this enumeration constant to the list for this type. */
13264 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13267 /* Look for an enumerator with the given NAME within the enumeration
13268 type ENUMTYPE. This routine is used primarily for qualified name
13269 lookup into an enumerator in C++0x, e.g.,
13271 enum class Color { Red, Green, Blue };
13273 Color color = Color::Red;
13275 Returns the value corresponding to the enumerator, or
13276 NULL_TREE if no such enumerator was found. */
13277 tree
13278 lookup_enumerator (tree enumtype, tree name)
13280 tree e;
13281 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
13283 e = purpose_member (name, TYPE_VALUES (enumtype));
13284 return e? TREE_VALUE (e) : NULL_TREE;
13288 /* We're defining DECL. Make sure that its type is OK. */
13290 static void
13291 check_function_type (tree decl, tree current_function_parms)
13293 tree fntype = TREE_TYPE (decl);
13294 tree return_type = complete_type (TREE_TYPE (fntype));
13296 /* In a function definition, arg types must be complete. */
13297 require_complete_types_for_parms (current_function_parms);
13299 if (dependent_type_p (return_type)
13300 || type_uses_auto (return_type))
13301 return;
13302 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
13303 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
13305 tree args = TYPE_ARG_TYPES (fntype);
13307 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13308 error ("return type %q#T is incomplete", return_type);
13309 else
13310 error ("return type has Java class type %q#T", return_type);
13312 /* Make it return void instead. */
13313 if (TREE_CODE (fntype) == METHOD_TYPE)
13314 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
13315 void_type_node,
13316 TREE_CHAIN (args));
13317 else
13318 fntype = build_function_type (void_type_node, args);
13319 fntype
13320 = build_exception_variant (fntype,
13321 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
13322 fntype = (cp_build_type_attribute_variant
13323 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
13324 TREE_TYPE (decl) = fntype;
13326 else
13327 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13330 /* Create the FUNCTION_DECL for a function definition.
13331 DECLSPECS and DECLARATOR are the parts of the declaration;
13332 they describe the function's name and the type it returns,
13333 but twisted together in a fashion that parallels the syntax of C.
13335 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13336 DECLARATOR is really the DECL for the function we are about to
13337 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13338 indicating that the function is an inline defined in-class.
13340 This function creates a binding context for the function body
13341 as well as setting up the FUNCTION_DECL in current_function_decl.
13343 For C++, we must first check whether that datum makes any sense.
13344 For example, "class A local_a(1,2);" means that variable local_a
13345 is an aggregate of type A, which should have a constructor
13346 applied to it with the argument list [1, 2].
13348 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
13349 or may be a BLOCK if the function has been defined previously
13350 in this translation unit. On exit, DECL_INITIAL (decl1) will be
13351 error_mark_node if the function has never been defined, or
13352 a BLOCK if the function has been defined somewhere. */
13354 bool
13355 start_preparsed_function (tree decl1, tree attrs, int flags)
13357 tree ctype = NULL_TREE;
13358 tree fntype;
13359 tree restype;
13360 int doing_friend = 0;
13361 cp_binding_level *bl;
13362 tree current_function_parms;
13363 struct c_fileinfo *finfo
13364 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
13365 bool honor_interface;
13367 /* Sanity check. */
13368 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
13369 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
13371 fntype = TREE_TYPE (decl1);
13372 if (TREE_CODE (fntype) == METHOD_TYPE)
13373 ctype = TYPE_METHOD_BASETYPE (fntype);
13375 /* ISO C++ 11.4/5. A friend function defined in a class is in
13376 the (lexical) scope of the class in which it is defined. */
13377 if (!ctype && DECL_FRIEND_P (decl1))
13379 ctype = DECL_FRIEND_CONTEXT (decl1);
13381 /* CTYPE could be null here if we're dealing with a template;
13382 for example, `inline friend float foo()' inside a template
13383 will have no CTYPE set. */
13384 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13385 ctype = NULL_TREE;
13386 else
13387 doing_friend = 1;
13390 if (DECL_DECLARED_INLINE_P (decl1)
13391 && lookup_attribute ("noinline", attrs))
13392 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
13393 "inline function %qD given attribute noinline", decl1);
13395 /* Handle gnu_inline attribute. */
13396 if (GNU_INLINE_P (decl1))
13398 DECL_EXTERNAL (decl1) = 1;
13399 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13400 DECL_INTERFACE_KNOWN (decl1) = 1;
13401 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
13404 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13405 /* This is a constructor, we must ensure that any default args
13406 introduced by this definition are propagated to the clones
13407 now. The clones are used directly in overload resolution. */
13408 adjust_clone_args (decl1);
13410 /* Sometimes we don't notice that a function is a static member, and
13411 build a METHOD_TYPE for it. Fix that up now. */
13412 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13413 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
13415 /* Set up current_class_type, and enter the scope of the class, if
13416 appropriate. */
13417 if (ctype)
13418 push_nested_class (ctype);
13419 else if (DECL_STATIC_FUNCTION_P (decl1))
13420 push_nested_class (DECL_CONTEXT (decl1));
13422 /* Now that we have entered the scope of the class, we must restore
13423 the bindings for any template parameters surrounding DECL1, if it
13424 is an inline member template. (Order is important; consider the
13425 case where a template parameter has the same name as a field of
13426 the class.) It is not until after this point that
13427 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
13428 if (flags & SF_INCLASS_INLINE)
13429 maybe_begin_member_template_processing (decl1);
13431 /* Effective C++ rule 15. */
13432 if (warn_ecpp
13433 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13434 && VOID_TYPE_P (TREE_TYPE (fntype)))
13435 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13437 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13438 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13439 if (!DECL_INITIAL (decl1))
13440 DECL_INITIAL (decl1) = error_mark_node;
13442 /* This function exists in static storage.
13443 (This does not mean `static' in the C sense!) */
13444 TREE_STATIC (decl1) = 1;
13446 /* We must call push_template_decl after current_class_type is set
13447 up. (If we are processing inline definitions after exiting a
13448 class scope, current_class_type will be NULL_TREE until set above
13449 by push_nested_class.) */
13450 if (processing_template_decl)
13452 tree newdecl1 = push_template_decl (decl1);
13453 if (newdecl1 == error_mark_node)
13455 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
13456 pop_nested_class ();
13457 return false;
13459 decl1 = newdecl1;
13462 /* We are now in the scope of the function being defined. */
13463 current_function_decl = decl1;
13465 /* Save the parm names or decls from this function's declarator
13466 where store_parm_decls will find them. */
13467 current_function_parms = DECL_ARGUMENTS (decl1);
13469 /* Make sure the parameter and return types are reasonable. When
13470 you declare a function, these types can be incomplete, but they
13471 must be complete when you define the function. */
13472 check_function_type (decl1, current_function_parms);
13474 /* Build the return declaration for the function. */
13475 restype = TREE_TYPE (fntype);
13477 if (DECL_RESULT (decl1) == NULL_TREE)
13479 tree resdecl;
13481 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13482 DECL_ARTIFICIAL (resdecl) = 1;
13483 DECL_IGNORED_P (resdecl) = 1;
13484 DECL_RESULT (decl1) = resdecl;
13486 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13489 /* Let the user know we're compiling this function. */
13490 announce_function (decl1);
13492 /* Record the decl so that the function name is defined.
13493 If we already have a decl for this name, and it is a FUNCTION_DECL,
13494 use the old decl. */
13495 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13497 /* A specialization is not used to guide overload resolution. */
13498 if (!DECL_FUNCTION_MEMBER_P (decl1)
13499 && !(DECL_USE_TEMPLATE (decl1) &&
13500 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
13502 tree olddecl = pushdecl (decl1);
13504 if (olddecl == error_mark_node)
13505 /* If something went wrong when registering the declaration,
13506 use DECL1; we have to have a FUNCTION_DECL to use when
13507 parsing the body of the function. */
13509 else
13511 /* Otherwise, OLDDECL is either a previous declaration
13512 of the same function or DECL1 itself. */
13514 if (warn_missing_declarations
13515 && olddecl == decl1
13516 && !DECL_MAIN_P (decl1)
13517 && TREE_PUBLIC (decl1)
13518 && !DECL_DECLARED_INLINE_P (decl1))
13520 tree context;
13522 /* Check whether DECL1 is in an anonymous
13523 namespace. */
13524 for (context = DECL_CONTEXT (decl1);
13525 context;
13526 context = DECL_CONTEXT (context))
13528 if (TREE_CODE (context) == NAMESPACE_DECL
13529 && DECL_NAME (context) == NULL_TREE)
13530 break;
13533 if (context == NULL)
13534 warning_at (DECL_SOURCE_LOCATION (decl1),
13535 OPT_Wmissing_declarations,
13536 "no previous declaration for %qD", decl1);
13539 decl1 = olddecl;
13542 else
13544 /* We need to set the DECL_CONTEXT. */
13545 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13546 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13548 fntype = TREE_TYPE (decl1);
13549 restype = TREE_TYPE (fntype);
13551 /* If #pragma weak applies, mark the decl appropriately now.
13552 The pragma only applies to global functions. Because
13553 determining whether or not the #pragma applies involves
13554 computing the mangled name for the declaration, we cannot
13555 apply the pragma until after we have merged this declaration
13556 with any previous declarations; if the original declaration
13557 has a linkage specification, that specification applies to
13558 the definition as well, and may affect the mangled name. */
13559 if (DECL_FILE_SCOPE_P (decl1))
13560 maybe_apply_pragma_weak (decl1);
13563 /* Reset this in case the call to pushdecl changed it. */
13564 current_function_decl = decl1;
13566 gcc_assert (DECL_INITIAL (decl1));
13568 /* This function may already have been parsed, in which case just
13569 return; our caller will skip over the body without parsing. */
13570 if (DECL_INITIAL (decl1) != error_mark_node)
13571 return true;
13573 /* Initialize RTL machinery. We cannot do this until
13574 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13575 even when processing a template; this is how we get
13576 CFUN set up, and our per-function variables initialized.
13577 FIXME factor out the non-RTL stuff. */
13578 bl = current_binding_level;
13579 allocate_struct_function (decl1, processing_template_decl);
13581 /* Initialize the language data structures. Whenever we start
13582 a new function, we destroy temporaries in the usual way. */
13583 cfun->language = ggc_cleared_alloc<language_function> ();
13584 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
13585 current_binding_level = bl;
13587 if (!processing_template_decl && type_uses_auto (restype))
13589 FNDECL_USED_AUTO (decl1) = true;
13590 current_function_auto_return_pattern = restype;
13593 /* Start the statement-tree, start the tree now. */
13594 DECL_SAVED_TREE (decl1) = push_stmt_list ();
13596 /* If we are (erroneously) defining a function that we have already
13597 defined before, wipe out what we knew before. */
13598 if (!DECL_PENDING_INLINE_P (decl1))
13599 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13601 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13603 /* We know that this was set up by `grokclassfn'. We do not
13604 wait until `store_parm_decls', since evil parse errors may
13605 never get us to that point. Here we keep the consistency
13606 between `current_class_type' and `current_class_ptr'. */
13607 tree t = DECL_ARGUMENTS (decl1);
13609 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
13610 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
13612 cp_function_chain->x_current_class_ref
13613 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
13614 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
13615 cp_function_chain->x_current_class_ptr = t;
13617 /* Constructors and destructors need to know whether they're "in
13618 charge" of initializing virtual base classes. */
13619 t = DECL_CHAIN (t);
13620 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13622 current_in_charge_parm = t;
13623 t = DECL_CHAIN (t);
13625 if (DECL_HAS_VTT_PARM_P (decl1))
13627 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
13628 current_vtt_parm = t;
13632 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
13633 /* Implicitly-defined methods (like the
13634 destructor for a class in which no destructor
13635 is explicitly declared) must not be defined
13636 until their definition is needed. So, we
13637 ignore interface specifications for
13638 compiler-generated functions. */
13639 && !DECL_ARTIFICIAL (decl1));
13641 if (processing_template_decl)
13642 /* Don't mess with interface flags. */;
13643 else if (DECL_INTERFACE_KNOWN (decl1))
13645 tree ctx = decl_function_context (decl1);
13647 if (DECL_NOT_REALLY_EXTERN (decl1))
13648 DECL_EXTERNAL (decl1) = 0;
13650 if (ctx != NULL_TREE && vague_linkage_p (ctx))
13651 /* This is a function in a local class in an extern inline
13652 or template function. */
13653 comdat_linkage (decl1);
13655 /* If this function belongs to an interface, it is public.
13656 If it belongs to someone else's interface, it is also external.
13657 This only affects inlines and template instantiations. */
13658 else if (!finfo->interface_unknown && honor_interface)
13660 if (DECL_DECLARED_INLINE_P (decl1)
13661 || DECL_TEMPLATE_INSTANTIATION (decl1))
13663 DECL_EXTERNAL (decl1)
13664 = (finfo->interface_only
13665 || (DECL_DECLARED_INLINE_P (decl1)
13666 && ! flag_implement_inlines
13667 && !DECL_VINDEX (decl1)));
13669 /* For WIN32 we also want to put these in linkonce sections. */
13670 maybe_make_one_only (decl1);
13672 else
13673 DECL_EXTERNAL (decl1) = 0;
13674 DECL_INTERFACE_KNOWN (decl1) = 1;
13675 /* If this function is in an interface implemented in this file,
13676 make sure that the back end knows to emit this function
13677 here. */
13678 if (!DECL_EXTERNAL (decl1))
13679 mark_needed (decl1);
13681 else if (finfo->interface_unknown && finfo->interface_only
13682 && honor_interface)
13684 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13685 interface, we will have both finfo->interface_unknown and
13686 finfo->interface_only set. In that case, we don't want to
13687 use the normal heuristics because someone will supply a
13688 #pragma implementation elsewhere, and deducing it here would
13689 produce a conflict. */
13690 comdat_linkage (decl1);
13691 DECL_EXTERNAL (decl1) = 0;
13692 DECL_INTERFACE_KNOWN (decl1) = 1;
13693 DECL_DEFER_OUTPUT (decl1) = 1;
13695 else
13697 /* This is a definition, not a reference.
13698 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
13699 if (!GNU_INLINE_P (decl1))
13700 DECL_EXTERNAL (decl1) = 0;
13702 if ((DECL_DECLARED_INLINE_P (decl1)
13703 || DECL_TEMPLATE_INSTANTIATION (decl1))
13704 && ! DECL_INTERFACE_KNOWN (decl1))
13705 DECL_DEFER_OUTPUT (decl1) = 1;
13706 else
13707 DECL_INTERFACE_KNOWN (decl1) = 1;
13710 /* Determine the ELF visibility attribute for the function. We must not
13711 do this before calling "pushdecl", as we must allow "duplicate_decls"
13712 to merge any attributes appropriately. We also need to wait until
13713 linkage is set. */
13714 if (!DECL_CLONED_FUNCTION_P (decl1))
13715 determine_visibility (decl1);
13717 if (!processing_template_decl)
13718 maybe_instantiate_noexcept (decl1);
13720 begin_scope (sk_function_parms, decl1);
13722 ++function_depth;
13724 if (DECL_DESTRUCTOR_P (decl1)
13725 || (DECL_CONSTRUCTOR_P (decl1)
13726 && targetm.cxx.cdtor_returns_this ()))
13728 cdtor_label = create_artificial_label (input_location);
13731 start_fname_decls ();
13733 store_parm_decls (current_function_parms);
13735 if (!processing_template_decl
13736 && flag_lifetime_dse && DECL_CONSTRUCTOR_P (decl1))
13738 /* Insert a clobber to let the back end know that the object storage
13739 is dead when we enter the constructor. */
13740 tree btype = CLASSTYPE_AS_BASE (current_class_type);
13741 tree clobber = build_constructor (btype, NULL);
13742 TREE_THIS_VOLATILE (clobber) = true;
13743 tree bref = build_nop (build_reference_type (btype), current_class_ptr);
13744 bref = convert_from_reference (bref);
13745 tree exprstmt = build2 (MODIFY_EXPR, btype, bref, clobber);
13746 finish_expr_stmt (exprstmt);
13749 return true;
13753 /* Like start_preparsed_function, except that instead of a
13754 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13756 Returns true on success. If the DECLARATOR is not suitable
13757 for a function, we return false, which tells the parser to
13758 skip the entire function. */
13760 bool
13761 start_function (cp_decl_specifier_seq *declspecs,
13762 const cp_declarator *declarator,
13763 tree attrs)
13765 tree decl1;
13767 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13768 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
13769 if (decl1 == error_mark_node)
13770 return false;
13771 /* If the declarator is not suitable for a function definition,
13772 cause a syntax error. */
13773 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13775 error ("invalid function declaration");
13776 return false;
13779 if (DECL_MAIN_P (decl1))
13780 /* main must return int. grokfndecl should have corrected it
13781 (and issued a diagnostic) if the user got it wrong. */
13782 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13783 integer_type_node));
13785 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13788 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13789 FN. */
13791 static bool
13792 use_eh_spec_block (tree fn)
13794 return (flag_exceptions && flag_enforce_eh_specs
13795 && !processing_template_decl
13796 && !type_throw_all_p (TREE_TYPE (fn))
13797 /* We insert the EH_SPEC_BLOCK only in the original
13798 function; then, it is copied automatically to the
13799 clones. */
13800 && !DECL_CLONED_FUNCTION_P (fn)
13801 /* Implicitly-generated constructors and destructors have
13802 exception specifications. However, those specifications
13803 are the union of the possible exceptions specified by the
13804 constructors/destructors for bases and members, so no
13805 unallowed exception will ever reach this function. By
13806 not creating the EH_SPEC_BLOCK we save a little memory,
13807 and we avoid spurious warnings about unreachable
13808 code. */
13809 && !DECL_DEFAULTED_FN (fn));
13812 /* Store the parameter declarations into the current function declaration.
13813 This is called after parsing the parameter declarations, before
13814 digesting the body of the function.
13816 Also install to binding contour return value identifier, if any. */
13818 static void
13819 store_parm_decls (tree current_function_parms)
13821 tree fndecl = current_function_decl;
13822 tree parm;
13824 /* This is a chain of any other decls that came in among the parm
13825 declarations. If a parm is declared with enum {foo, bar} x;
13826 then CONST_DECLs for foo and bar are put here. */
13827 tree nonparms = NULL_TREE;
13829 if (current_function_parms)
13831 /* This case is when the function was defined with an ANSI prototype.
13832 The parms already have decls, so we need not do anything here
13833 except record them as in effect
13834 and complain if any redundant old-style parm decls were written. */
13836 tree specparms = current_function_parms;
13837 tree next;
13839 /* Must clear this because it might contain TYPE_DECLs declared
13840 at class level. */
13841 current_binding_level->names = NULL;
13843 /* If we're doing semantic analysis, then we'll call pushdecl
13844 for each of these. We must do them in reverse order so that
13845 they end in the correct forward order. */
13846 specparms = nreverse (specparms);
13848 for (parm = specparms; parm; parm = next)
13850 next = DECL_CHAIN (parm);
13851 if (TREE_CODE (parm) == PARM_DECL)
13853 if (DECL_NAME (parm) == NULL_TREE
13854 || !VOID_TYPE_P (parm))
13855 pushdecl (parm);
13856 else
13857 error ("parameter %qD declared void", parm);
13859 else
13861 /* If we find an enum constant or a type tag,
13862 put it aside for the moment. */
13863 TREE_CHAIN (parm) = NULL_TREE;
13864 nonparms = chainon (nonparms, parm);
13868 /* Get the decls in their original chain order and record in the
13869 function. This is all and only the PARM_DECLs that were
13870 pushed into scope by the loop above. */
13871 DECL_ARGUMENTS (fndecl) = getdecls ();
13873 else
13874 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13876 /* Now store the final chain of decls for the arguments
13877 as the decl-chain of the current lexical scope.
13878 Put the enumerators in as well, at the front so that
13879 DECL_ARGUMENTS is not modified. */
13880 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13882 if (use_eh_spec_block (current_function_decl))
13883 current_eh_spec_block = begin_eh_spec_block ();
13887 /* We have finished doing semantic analysis on DECL, but have not yet
13888 generated RTL for its body. Save away our current state, so that
13889 when we want to generate RTL later we know what to do. */
13891 static void
13892 save_function_data (tree decl)
13894 struct language_function *f;
13896 /* Save the language-specific per-function data so that we can
13897 get it back when we really expand this function. */
13898 gcc_assert (!DECL_PENDING_INLINE_P (decl));
13900 /* Make a copy. */
13901 f = ggc_alloc<language_function> ();
13902 memcpy (f, cp_function_chain, sizeof (struct language_function));
13903 DECL_SAVED_FUNCTION_DATA (decl) = f;
13905 /* Clear out the bits we don't need. */
13906 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13907 f->bindings = NULL;
13908 f->x_local_names = NULL;
13909 f->base.local_typedefs = NULL;
13913 /* Set the return value of the constructor (if present). */
13915 static void
13916 finish_constructor_body (void)
13918 tree val;
13919 tree exprstmt;
13921 if (targetm.cxx.cdtor_returns_this ()
13922 && (! TYPE_FOR_JAVA (current_class_type)))
13924 /* Any return from a constructor will end up here. */
13925 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13927 val = DECL_ARGUMENTS (current_function_decl);
13928 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13929 DECL_RESULT (current_function_decl), val);
13930 /* Return the address of the object. */
13931 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13932 add_stmt (exprstmt);
13936 /* Do all the processing for the beginning of a destructor; set up the
13937 vtable pointers and cleanups for bases and members. */
13939 static void
13940 begin_destructor_body (void)
13942 tree compound_stmt;
13944 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13945 issued an error message. We still want to try to process the
13946 body of the function, but initialize_vtbl_ptrs will crash if
13947 TYPE_BINFO is NULL. */
13948 if (COMPLETE_TYPE_P (current_class_type))
13950 compound_stmt = begin_compound_stmt (0);
13951 /* Make all virtual function table pointers in non-virtual base
13952 classes point to CURRENT_CLASS_TYPE's virtual function
13953 tables. */
13954 initialize_vtbl_ptrs (current_class_ptr);
13955 finish_compound_stmt (compound_stmt);
13957 if (flag_lifetime_dse)
13959 /* Insert a cleanup to let the back end know that the object is dead
13960 when we exit the destructor, either normally or via exception. */
13961 tree btype = CLASSTYPE_AS_BASE (current_class_type);
13962 tree clobber = build_constructor (btype, NULL);
13963 TREE_THIS_VOLATILE (clobber) = true;
13964 tree bref = build_nop (build_reference_type (btype),
13965 current_class_ptr);
13966 bref = convert_from_reference (bref);
13967 tree exprstmt = build2 (MODIFY_EXPR, btype, bref, clobber);
13968 finish_decl_cleanup (NULL_TREE, exprstmt);
13971 /* And insert cleanups for our bases and members so that they
13972 will be properly destroyed if we throw. */
13973 push_base_cleanups ();
13977 /* At the end of every destructor we generate code to delete the object if
13978 necessary. Do that now. */
13980 static void
13981 finish_destructor_body (void)
13983 tree exprstmt;
13985 /* Any return from a destructor will end up here; that way all base
13986 and member cleanups will be run when the function returns. */
13987 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13989 /* In a virtual destructor, we must call delete. */
13990 if (DECL_VIRTUAL_P (current_function_decl))
13992 tree if_stmt;
13993 tree virtual_size = cxx_sizeof (current_class_type);
13995 /* [class.dtor]
13997 At the point of definition of a virtual destructor (including
13998 an implicit definition), non-placement operator delete shall
13999 be looked up in the scope of the destructor's class and if
14000 found shall be accessible and unambiguous. */
14001 exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
14002 virtual_size,
14003 /*global_p=*/false,
14004 /*placement=*/NULL_TREE,
14005 /*alloc_fn=*/NULL_TREE,
14006 tf_warning_or_error);
14008 if_stmt = begin_if_stmt ();
14009 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
14010 current_in_charge_parm,
14011 integer_one_node),
14012 if_stmt);
14013 finish_expr_stmt (exprstmt);
14014 finish_then_clause (if_stmt);
14015 finish_if_stmt (if_stmt);
14018 if (targetm.cxx.cdtor_returns_this ())
14020 tree val;
14022 val = DECL_ARGUMENTS (current_function_decl);
14023 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
14024 DECL_RESULT (current_function_decl), val);
14025 /* Return the address of the object. */
14026 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
14027 add_stmt (exprstmt);
14031 /* Do the necessary processing for the beginning of a function body, which
14032 in this case includes member-initializers, but not the catch clauses of
14033 a function-try-block. Currently, this means opening a binding level
14034 for the member-initializers (in a ctor), member cleanups (in a dtor),
14035 and capture proxies (in a lambda operator()). */
14037 tree
14038 begin_function_body (void)
14040 tree stmt;
14042 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
14043 return NULL_TREE;
14045 if (processing_template_decl)
14046 /* Do nothing now. */;
14047 else
14048 /* Always keep the BLOCK node associated with the outermost pair of
14049 curly braces of a function. These are needed for correct
14050 operation of dwarfout.c. */
14051 keep_next_level (true);
14053 stmt = begin_compound_stmt (BCS_FN_BODY);
14055 if (processing_template_decl)
14056 /* Do nothing now. */;
14057 else if (DECL_DESTRUCTOR_P (current_function_decl))
14058 begin_destructor_body ();
14060 return stmt;
14063 /* Do the processing for the end of a function body. Currently, this means
14064 closing out the cleanups for fully-constructed bases and members, and in
14065 the case of the destructor, deleting the object if desired. Again, this
14066 is only meaningful for [cd]tors, since they are the only functions where
14067 there is a significant distinction between the main body and any
14068 function catch clauses. Handling, say, main() return semantics here
14069 would be wrong, as flowing off the end of a function catch clause for
14070 main() would also need to return 0. */
14072 void
14073 finish_function_body (tree compstmt)
14075 if (compstmt == NULL_TREE)
14076 return;
14078 /* Close the block. */
14079 finish_compound_stmt (compstmt);
14081 if (processing_template_decl)
14082 /* Do nothing now. */;
14083 else if (DECL_CONSTRUCTOR_P (current_function_decl))
14084 finish_constructor_body ();
14085 else if (DECL_DESTRUCTOR_P (current_function_decl))
14086 finish_destructor_body ();
14089 /* Given a function, returns the BLOCK corresponding to the outermost level
14090 of curly braces, skipping the artificial block created for constructor
14091 initializers. */
14093 tree
14094 outer_curly_brace_block (tree fndecl)
14096 tree block = DECL_INITIAL (fndecl);
14097 if (BLOCK_OUTER_CURLY_BRACE_P (block))
14098 return block;
14099 block = BLOCK_SUBBLOCKS (block);
14100 if (BLOCK_OUTER_CURLY_BRACE_P (block))
14101 return block;
14102 block = BLOCK_SUBBLOCKS (block);
14103 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
14104 return block;
14107 /* If FNDECL is a class's key method, add the class to the list of
14108 keyed classes that should be emitted. */
14110 static void
14111 record_key_method_defined (tree fndecl)
14113 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
14114 && DECL_VIRTUAL_P (fndecl)
14115 && !processing_template_decl)
14117 tree fnclass = DECL_CONTEXT (fndecl);
14118 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
14119 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
14123 /* Subroutine of finish_function.
14124 Save the body of constexpr functions for possible
14125 future compile time evaluation. */
14127 static void
14128 maybe_save_function_definition (tree fun)
14130 if (!processing_template_decl
14131 && DECL_DECLARED_CONSTEXPR_P (fun)
14132 && !cp_function_chain->invalid_constexpr
14133 && !DECL_CLONED_FUNCTION_P (fun))
14134 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
14137 /* Finish up a function declaration and compile that function
14138 all the way to assembler language output. The free the storage
14139 for the function definition.
14141 FLAGS is a bitwise or of the following values:
14142 2 - INCLASS_INLINE
14143 We just finished processing the body of an in-class inline
14144 function definition. (This processing will have taken place
14145 after the class definition is complete.) */
14147 tree
14148 finish_function (int flags)
14150 tree fndecl = current_function_decl;
14151 tree fntype, ctype = NULL_TREE;
14152 int inclass_inline = (flags & 2) != 0;
14154 /* When we get some parse errors, we can end up without a
14155 current_function_decl, so cope. */
14156 if (fndecl == NULL_TREE)
14157 return error_mark_node;
14159 if (c_dialect_objc ())
14160 objc_finish_function ();
14162 gcc_assert (!defer_mark_used_calls);
14163 defer_mark_used_calls = true;
14165 record_key_method_defined (fndecl);
14167 fntype = TREE_TYPE (fndecl);
14169 /* TREE_READONLY (fndecl) = 1;
14170 This caused &foo to be of type ptr-to-const-function
14171 which then got a warning when stored in a ptr-to-function variable. */
14173 gcc_assert (building_stmt_list_p ());
14174 /* The current function is being defined, so its DECL_INITIAL should
14175 be set, and unless there's a multiple definition, it should be
14176 error_mark_node. */
14177 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
14179 /* For a cloned function, we've already got all the code we need;
14180 there's no need to add any extra bits. */
14181 if (!DECL_CLONED_FUNCTION_P (fndecl))
14183 /* Make it so that `main' always returns 0 by default. */
14184 if (DECL_MAIN_P (current_function_decl))
14185 finish_return_stmt (integer_zero_node);
14187 if (use_eh_spec_block (current_function_decl))
14188 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
14189 (TREE_TYPE (current_function_decl)),
14190 current_eh_spec_block);
14193 /* If we're saving up tree structure, tie off the function now. */
14194 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
14196 if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
14197 cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
14199 finish_fname_decls ();
14201 /* If this function can't throw any exceptions, remember that. */
14202 if (!processing_template_decl
14203 && !cp_function_chain->can_throw
14204 && !flag_non_call_exceptions
14205 && !decl_replaceable_p (fndecl))
14206 TREE_NOTHROW (fndecl) = 1;
14208 /* This must come after expand_function_end because cleanups might
14209 have declarations (from inline functions) that need to go into
14210 this function's blocks. */
14212 /* If the current binding level isn't the outermost binding level
14213 for this function, either there is a bug, or we have experienced
14214 syntax errors and the statement tree is malformed. */
14215 if (current_binding_level->kind != sk_function_parms)
14217 /* Make sure we have already experienced errors. */
14218 gcc_assert (errorcount);
14220 /* Throw away the broken statement tree and extra binding
14221 levels. */
14222 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
14224 while (current_binding_level->kind != sk_function_parms)
14226 if (current_binding_level->kind == sk_class)
14227 pop_nested_class ();
14228 else
14229 poplevel (0, 0, 0);
14232 poplevel (1, 0, 1);
14234 /* Statements should always be full-expressions at the outermost set
14235 of curly braces for a function. */
14236 gcc_assert (stmts_are_full_exprs_p ());
14238 /* If there are no return statements in a function with auto return type,
14239 the return type is void. But if the declared type is something like
14240 auto*, this is an error. */
14241 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
14242 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
14244 if (!is_auto (current_function_auto_return_pattern)
14245 && !current_function_returns_value && !current_function_returns_null)
14247 error ("no return statements in function returning %qT",
14248 current_function_auto_return_pattern);
14249 inform (input_location, "only plain %<auto%> return type can be "
14250 "deduced to %<void%>");
14252 apply_deduced_return_type (fndecl, void_type_node);
14253 fntype = TREE_TYPE (fndecl);
14256 /* Save constexpr function body before it gets munged by
14257 the NRV transformation. */
14258 maybe_save_function_definition (fndecl);
14260 /* Set up the named return value optimization, if we can. Candidate
14261 variables are selected in check_return_expr. */
14262 if (current_function_return_value)
14264 tree r = current_function_return_value;
14265 tree outer;
14267 if (r != error_mark_node
14268 /* This is only worth doing for fns that return in memory--and
14269 simpler, since we don't have to worry about promoted modes. */
14270 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
14271 /* Only allow this for variables declared in the outer scope of
14272 the function so we know that their lifetime always ends with a
14273 return; see g++.dg/opt/nrv6.C. We could be more flexible if
14274 we were to do this optimization in tree-ssa. */
14275 && (outer = outer_curly_brace_block (fndecl))
14276 && chain_member (r, BLOCK_VARS (outer)))
14277 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
14279 current_function_return_value = NULL_TREE;
14282 /* Remember that we were in class scope. */
14283 if (current_class_name)
14284 ctype = current_class_type;
14286 /* Must mark the RESULT_DECL as being in this function. */
14287 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14289 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14290 to the FUNCTION_DECL node itself. */
14291 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14293 /* Save away current state, if appropriate. */
14294 if (!processing_template_decl)
14295 save_function_data (fndecl);
14297 /* Complain if there's just no return statement. */
14298 if (warn_return_type
14299 && !VOID_TYPE_P (TREE_TYPE (fntype))
14300 && !dependent_type_p (TREE_TYPE (fntype))
14301 && !current_function_returns_value && !current_function_returns_null
14302 /* Don't complain if we abort or throw. */
14303 && !current_function_returns_abnormally
14304 /* Don't complain if there's an infinite loop. */
14305 && !current_function_infinite_loop
14306 /* Don't complain if we are declared noreturn. */
14307 && !TREE_THIS_VOLATILE (fndecl)
14308 && !DECL_NAME (DECL_RESULT (fndecl))
14309 && !TREE_NO_WARNING (fndecl)
14310 /* Structor return values (if any) are set by the compiler. */
14311 && !DECL_CONSTRUCTOR_P (fndecl)
14312 && !DECL_DESTRUCTOR_P (fndecl)
14313 && targetm.warn_func_return (fndecl))
14315 warning (OPT_Wreturn_type,
14316 "no return statement in function returning non-void");
14317 TREE_NO_WARNING (fndecl) = 1;
14320 /* Store the end of the function, so that we get good line number
14321 info for the epilogue. */
14322 cfun->function_end_locus = input_location;
14324 /* Complain about parameters that are only set, but never otherwise used. */
14325 if (warn_unused_but_set_parameter
14326 && !processing_template_decl
14327 && errorcount == unused_but_set_errorcount
14328 && !DECL_CLONED_FUNCTION_P (fndecl))
14330 tree decl;
14332 for (decl = DECL_ARGUMENTS (fndecl);
14333 decl;
14334 decl = DECL_CHAIN (decl))
14335 if (TREE_USED (decl)
14336 && TREE_CODE (decl) == PARM_DECL
14337 && !DECL_READ_P (decl)
14338 && DECL_NAME (decl)
14339 && !DECL_ARTIFICIAL (decl)
14340 && !TREE_NO_WARNING (decl)
14341 && !DECL_IN_SYSTEM_HEADER (decl)
14342 && TREE_TYPE (decl) != error_mark_node
14343 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
14344 && (!CLASS_TYPE_P (TREE_TYPE (decl))
14345 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
14346 warning_at (DECL_SOURCE_LOCATION (decl),
14347 OPT_Wunused_but_set_parameter,
14348 "parameter %qD set but not used", decl);
14349 unused_but_set_errorcount = errorcount;
14352 /* Complain about locally defined typedefs that are not used in this
14353 function. */
14354 maybe_warn_unused_local_typedefs ();
14356 /* Possibly warn about unused parameters. */
14357 if (warn_unused_parameter
14358 && !processing_template_decl
14359 && !DECL_CLONED_FUNCTION_P (fndecl))
14360 do_warn_unused_parameter (fndecl);
14362 /* Genericize before inlining. */
14363 if (!processing_template_decl)
14365 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
14366 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
14367 cp_genericize (fndecl);
14368 /* Clear out the bits we don't need. */
14369 f->x_current_class_ptr = NULL;
14370 f->x_current_class_ref = NULL;
14371 f->x_eh_spec_block = NULL;
14372 f->x_in_charge_parm = NULL;
14373 f->x_vtt_parm = NULL;
14374 f->x_return_value = NULL;
14375 f->bindings = NULL;
14376 f->extern_decl_map = NULL;
14377 f->infinite_loops = NULL;
14379 /* Clear out the bits we don't need. */
14380 local_names = NULL;
14382 /* We're leaving the context of this function, so zap cfun. It's still in
14383 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
14384 set_cfun (NULL);
14385 current_function_decl = NULL;
14387 /* If this is an in-class inline definition, we may have to pop the
14388 bindings for the template parameters that we added in
14389 maybe_begin_member_template_processing when start_function was
14390 called. */
14391 if (inclass_inline)
14392 maybe_end_member_template_processing ();
14394 /* Leave the scope of the class. */
14395 if (ctype)
14396 pop_nested_class ();
14398 --function_depth;
14400 /* Clean up. */
14401 current_function_decl = NULL_TREE;
14403 defer_mark_used_calls = false;
14404 if (deferred_mark_used_calls)
14406 unsigned int i;
14407 tree decl;
14409 FOR_EACH_VEC_SAFE_ELT (deferred_mark_used_calls, i, decl)
14410 mark_used (decl);
14411 vec_free (deferred_mark_used_calls);
14414 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
14415 return fndecl;
14418 /* Create the FUNCTION_DECL for a function definition.
14419 DECLSPECS and DECLARATOR are the parts of the declaration;
14420 they describe the return type and the name of the function,
14421 but twisted together in a fashion that parallels the syntax of C.
14423 This function creates a binding context for the function body
14424 as well as setting up the FUNCTION_DECL in current_function_decl.
14426 Returns a FUNCTION_DECL on success.
14428 If the DECLARATOR is not suitable for a function (it defines a datum
14429 instead), we return 0, which tells yyparse to report a parse error.
14431 May return void_type_node indicating that this method is actually
14432 a friend. See grokfield for more details.
14434 Came here with a `.pushlevel' .
14436 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14437 CHANGES TO CODE IN `grokfield'. */
14439 tree
14440 grokmethod (cp_decl_specifier_seq *declspecs,
14441 const cp_declarator *declarator, tree attrlist)
14443 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14444 &attrlist);
14446 if (fndecl == error_mark_node)
14447 return error_mark_node;
14449 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14451 error ("invalid member function declaration");
14452 return error_mark_node;
14455 if (attrlist)
14456 cplus_decl_attributes (&fndecl, attrlist, 0);
14458 /* Pass friends other than inline friend functions back. */
14459 if (fndecl == void_type_node)
14460 return fndecl;
14462 if (DECL_IN_AGGR_P (fndecl))
14464 if (DECL_CLASS_SCOPE_P (fndecl))
14465 error ("%qD is already defined in class %qT", fndecl,
14466 DECL_CONTEXT (fndecl));
14467 return error_mark_node;
14470 check_template_shadow (fndecl);
14472 if (TREE_PUBLIC (fndecl))
14473 DECL_COMDAT (fndecl) = 1;
14474 DECL_DECLARED_INLINE_P (fndecl) = 1;
14475 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
14477 /* We process method specializations in finish_struct_1. */
14478 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14480 fndecl = push_template_decl (fndecl);
14481 if (fndecl == error_mark_node)
14482 return fndecl;
14485 if (! DECL_FRIEND_P (fndecl))
14487 if (DECL_CHAIN (fndecl))
14489 fndecl = copy_node (fndecl);
14490 TREE_CHAIN (fndecl) = NULL_TREE;
14494 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14496 DECL_IN_AGGR_P (fndecl) = 1;
14497 return fndecl;
14501 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
14502 we can lay it out later, when and if its type becomes complete.
14504 Also handle constexpr variables where the initializer involves
14505 an unlowered PTRMEM_CST because the class isn't complete yet. */
14507 void
14508 maybe_register_incomplete_var (tree var)
14510 gcc_assert (VAR_P (var));
14512 /* Keep track of variables with incomplete types. */
14513 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14514 && DECL_EXTERNAL (var))
14516 tree inner_type = TREE_TYPE (var);
14518 while (TREE_CODE (inner_type) == ARRAY_TYPE)
14519 inner_type = TREE_TYPE (inner_type);
14520 inner_type = TYPE_MAIN_VARIANT (inner_type);
14522 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14523 /* RTTI TD entries are created while defining the type_info. */
14524 || (TYPE_LANG_SPECIFIC (inner_type)
14525 && TYPE_BEING_DEFINED (inner_type)))
14527 incomplete_var iv = {var, inner_type};
14528 vec_safe_push (incomplete_vars, iv);
14530 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
14531 && decl_constant_var_p (var)
14532 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
14534 /* When the outermost open class is complete we can resolve any
14535 pointers-to-members. */
14536 tree context = outermost_open_class ();
14537 incomplete_var iv = {var, context};
14538 vec_safe_push (incomplete_vars, iv);
14543 /* Called when a class type (given by TYPE) is defined. If there are
14544 any existing VAR_DECLs whose type has been completed by this
14545 declaration, update them now. */
14547 void
14548 complete_vars (tree type)
14550 unsigned ix;
14551 incomplete_var *iv;
14553 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
14555 if (same_type_p (type, iv->incomplete_type))
14557 tree var = iv->decl;
14558 tree type = TREE_TYPE (var);
14560 if (TYPE_MAIN_VARIANT (strip_array_types (type))
14561 == iv->incomplete_type)
14563 /* Complete the type of the variable. The VAR_DECL itself
14564 will be laid out in expand_expr. */
14565 complete_type (type);
14566 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
14569 if (DECL_INITIAL (var)
14570 && decl_constant_var_p (var))
14571 DECL_INITIAL (var) = cplus_expand_constant (DECL_INITIAL (var));
14573 /* Remove this entry from the list. */
14574 incomplete_vars->unordered_remove (ix);
14576 else
14577 ix++;
14580 /* Check for pending declarations which may have abstract type. */
14581 complete_type_check_abstract (type);
14584 /* If DECL is of a type which needs a cleanup, build and return an
14585 expression to perform that cleanup here. Return NULL_TREE if no
14586 cleanup need be done. */
14588 tree
14589 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
14591 tree type;
14592 tree attr;
14593 tree cleanup;
14595 /* Assume no cleanup is required. */
14596 cleanup = NULL_TREE;
14598 if (error_operand_p (decl))
14599 return cleanup;
14601 /* Handle "__attribute__((cleanup))". We run the cleanup function
14602 before the destructor since the destructor is what actually
14603 terminates the lifetime of the object. */
14604 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
14605 if (attr)
14607 tree id;
14608 tree fn;
14609 tree arg;
14611 /* Get the name specified by the user for the cleanup function. */
14612 id = TREE_VALUE (TREE_VALUE (attr));
14613 /* Look up the name to find the cleanup function to call. It is
14614 important to use lookup_name here because that is what is
14615 used in c-common.c:handle_cleanup_attribute when performing
14616 initial checks on the attribute. Note that those checks
14617 include ensuring that the function found is not an overloaded
14618 function, or an object with an overloaded call operator,
14619 etc.; we can rely on the fact that the function found is an
14620 ordinary FUNCTION_DECL. */
14621 fn = lookup_name (id);
14622 arg = build_address (decl);
14623 if (!mark_used (decl, complain) && !(complain & tf_error))
14624 return error_mark_node;
14625 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
14626 if (cleanup == error_mark_node)
14627 return error_mark_node;
14629 /* Handle ordinary C++ destructors. */
14630 type = TREE_TYPE (decl);
14631 if (type_build_dtor_call (type))
14633 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
14634 tree addr;
14635 tree call;
14637 if (TREE_CODE (type) == ARRAY_TYPE)
14638 addr = decl;
14639 else
14640 addr = build_address (decl);
14642 call = build_delete (TREE_TYPE (addr), addr,
14643 sfk_complete_destructor, flags, 0, complain);
14644 if (call == error_mark_node)
14645 cleanup = error_mark_node;
14646 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
14647 /* Discard the call. */;
14648 else if (cleanup)
14649 cleanup = cp_build_compound_expr (cleanup, call, complain);
14650 else
14651 cleanup = call;
14654 /* build_delete sets the location of the destructor call to the
14655 current location, even though the destructor is going to be
14656 called later, at the end of the current scope. This can lead to
14657 a "jumpy" behaviour for users of debuggers when they step around
14658 the end of the block. So let's unset the location of the
14659 destructor call instead. */
14660 if (cleanup != NULL && EXPR_P (cleanup))
14661 SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
14663 if (cleanup
14664 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
14665 /* Treat objects with destructors as used; the destructor may do
14666 something substantive. */
14667 && !mark_used (decl, complain) && !(complain & tf_error))
14668 return error_mark_node;
14670 return cleanup;
14674 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
14675 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
14676 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
14678 tree
14679 static_fn_type (tree memfntype)
14681 tree fntype;
14682 tree args;
14684 if (TYPE_PTRMEMFUNC_P (memfntype))
14685 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
14686 if (POINTER_TYPE_P (memfntype)
14687 || TREE_CODE (memfntype) == FUNCTION_DECL)
14688 memfntype = TREE_TYPE (memfntype);
14689 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
14690 return memfntype;
14691 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
14692 args = TYPE_ARG_TYPES (memfntype);
14693 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
14694 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
14695 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
14696 fntype = (cp_build_type_attribute_variant
14697 (fntype, TYPE_ATTRIBUTES (memfntype)));
14698 fntype = (build_exception_variant
14699 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
14700 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
14701 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
14702 return fntype;
14705 /* DECL was originally constructed as a non-static member function,
14706 but turned out to be static. Update it accordingly. */
14708 void
14709 revert_static_member_fn (tree decl)
14711 tree stype = static_fn_type (decl);
14712 cp_cv_quals quals = type_memfn_quals (stype);
14713 cp_ref_qualifier rqual = type_memfn_rqual (stype);
14715 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
14716 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
14718 TREE_TYPE (decl) = stype;
14720 if (DECL_ARGUMENTS (decl))
14721 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
14722 DECL_STATIC_FUNCTION_P (decl) = 1;
14725 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14726 one of the language-independent trees. */
14728 enum cp_tree_node_structure_enum
14729 cp_tree_node_structure (union lang_tree_node * t)
14731 switch (TREE_CODE (&t->generic))
14733 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
14734 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
14735 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
14736 case OVERLOAD: return TS_CP_OVERLOAD;
14737 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
14738 case PTRMEM_CST: return TS_CP_PTRMEM;
14739 case BASELINK: return TS_CP_BASELINK;
14740 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
14741 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
14742 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
14743 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
14744 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
14745 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
14746 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
14747 default: return TS_CP_GENERIC;
14751 /* Build the void_list_node (void_type_node having been created). */
14752 tree
14753 build_void_list_node (void)
14755 tree t = build_tree_list (NULL_TREE, void_type_node);
14756 return t;
14759 bool
14760 cp_missing_noreturn_ok_p (tree decl)
14762 /* A missing noreturn is ok for the `main' function. */
14763 return DECL_MAIN_P (decl);
14766 /* Return the decl used to identify the COMDAT group into which DECL should
14767 be placed. */
14769 tree
14770 cxx_comdat_group (tree decl)
14772 /* Virtual tables, construction virtual tables, and virtual table
14773 tables all go in a single COMDAT group, named after the primary
14774 virtual table. */
14775 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
14776 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
14777 /* For all other DECLs, the COMDAT group is the mangled name of the
14778 declaration itself. */
14779 else
14781 while (DECL_THUNK_P (decl))
14783 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
14784 into the same section as the target function. In that case
14785 we must return target's name. */
14786 tree target = THUNK_TARGET (decl);
14787 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14788 && DECL_SECTION_NAME (target) != NULL
14789 && DECL_ONE_ONLY (target))
14790 decl = target;
14791 else
14792 break;
14796 return decl;
14799 /* Returns the return type for FN as written by the user, which may include
14800 a placeholder for a deduced return type. */
14802 tree
14803 fndecl_declared_return_type (tree fn)
14805 fn = STRIP_TEMPLATE (fn);
14806 if (FNDECL_USED_AUTO (fn))
14808 struct language_function *f = NULL;
14809 if (DECL_STRUCT_FUNCTION (fn))
14810 f = DECL_STRUCT_FUNCTION (fn)->language;
14811 if (f == NULL)
14812 f = DECL_SAVED_FUNCTION_DATA (fn);
14813 return f->x_auto_return_pattern;
14815 return TREE_TYPE (TREE_TYPE (fn));
14818 /* Returns true iff DECL was declared with an auto return type and it has
14819 not yet been deduced to a real type. */
14821 bool
14822 undeduced_auto_decl (tree decl)
14824 if (cxx_dialect < cxx14)
14825 return false;
14826 return type_uses_auto (TREE_TYPE (decl));
14829 /* Complain if DECL has an undeduced return type. */
14831 void
14832 require_deduced_type (tree decl)
14834 if (undeduced_auto_decl (decl))
14835 error ("use of %qD before deduction of %<auto%>", decl);
14838 #include "gt-cp-decl.h"